軟體測試基礎

軟體測試的概念
通過一系列手段去證明軟體是符合使用者需求的,滿足品質要求的。預期結果和實際結果的一個對比。
軟體測試分類
按方法分:黑盒測試、白盒測試、灰盒測試
黑盒測試:把軟體比作一個“黑匣子”,不考慮具體是内部是如何實作的,隻考慮外部功能的運作,檢查軟體的輸入和輸出是否比對。
白盒測試:檢查軟體的代碼、函數和方法等内部結構。
灰盒測試:介于白盒和灰盒測試之間,既可以根據外部暴露出的功能進行檢測,也可以參考内部的代碼結構。
2.按方向分:功能測試、性能測試、安全測試
(1)功能測試:測試産品的功能,以确定是否滿足設計需求。
(2)性能測試:分為用戶端測試和伺服器端測試(一般預設是伺服器端測試)。
- 用戶端性能測試:啟動速度、消耗資源(CPU、記憶體、硬碟、流量、電量)
- 服務端性能測試(預設):壓力測試、負載測試、并發測試
- 壓力測試:擷取系統正确運作的上限,檢查軟體在瞬間峰值的情況下是否能夠正确運作。(通過多線程模拟)
- 負載測試:在峰值的持續壓力下運作軟體,看軟體的承載極限達到什麼程度。
- 并發測試:檢查在并發條件下,會不會出現資料錯亂的情況。(比如淘寶秒殺)
(3)安全測試:流量攻擊、滲透、SQL注入、跨域攻擊、爆破、劫持。
流量攻擊:模拟大量使用者通路伺服器,不進行任何有效操作,無端消耗伺服器資源。
滲透測試:發現軟體系統中存在的漏洞,判斷系統的安全性。
SQL注入:通過資料庫的關鍵字進行異常操作,惡意執行不相幹的SQL指令。
跨域攻擊:誘導使用者通路非法網站,利用會話資訊模拟請求,盜取和篡改資料。(比如qq盜号)
暴力破解:寫相應的腳本,用窮舉法不斷嘗試破解對方的資訊。
劫持:比如通過不安全的wifi連接配接,進行表單送出的操作,造成資料洩露。(還有網頁廣告彈窗等)
3.按階段分:單元測試、內建測試、系統測試、驗收測試
單元測試:最小子產品的測試,可以是對代碼、函數、方法進行白盒測試,一般由開發人員執行。
內建測試:主要是測試接口,是以也叫接口測試。(接口:子產品與子產品之間資料交換的通道。)
系統測試:對系統的功能、性能、安全、UI、穩定性、易用性、相容性等進行測試。
驗收測試:軟體釋出之前進行的測試,這是測試的最後一個階段,也叫傳遞測試,評估産品是否可以釋出。
4.按對象分:web測試、app測試、小程式測試、車聯網測試、物聯網測試
測試方法與測試對象無關,測試流程基本都是通用的。
5.按狀态分:動态測試、靜态測試
動态測試:運作軟體,判斷軟體運作結果與預期結果的差異,檢查軟體的正确性。(黑盒測試)
靜态測試:不運作軟體,檢查軟體代碼、方法、函數、文檔的正确性。(白盒測試)
6.其他:回歸測試,冒煙測試、α測試、β測試
回歸測試:檢查開發有沒有把bug修改好,重新測試一遍,以保持正确性。
冒煙測試:測試前的測試,檢查開發是否進行自測,軟體是否具有可測試性。
α測試:産品内測。
β測試:産品公測。
軟體基本結構
軟體 = 程式+資料+文檔
基本結構:
B/S(浏覽器/伺服器),C/S(用戶端/伺服器)
主要差別:是否需要單獨安裝/更新用戶端
前端
使用者端(前台)
app:andriod(android、kotlin),ios(swift,object-c)
web:html,css,JavaScript
小程式
管理者端(背景)
主要是web
後端
#伺服器上運作,斷網無法使用,一般是linux環境
資料庫
運作環境:java,php,python,.net,go
伺服器軟體:tomcat,apache,nginx,IIS
(c++一般用于桌面程式)
軟體測試的方法
找到合适的測試資料
邊界值
(左邊界、右邊界):<=6,先測<6,再測=6,是以要取邊界值和邊界值旁邊的點,5和6。
等價類
有效等價類:比如0.01-200,0.01,200,0.02,199.99,100.05(保險起見還選了個中間值)
無效等價類:0,200.01
使用者場景法
成功的場景:符合要求的金額和紅包寄語(預設、0,25,1,25,12),發送紅包成功
失敗的場景:金額錯誤、寄語不符合要求(輸入的值空,26)(空不等于空格)
了解概念
因果圖
判定圖
路徑覆寫法
軟體測試的模型
指的是研發模型(不僅僅是測試模型)
瀑布流
需求分析→軟體設計→軟體實作(編碼)→軟體測試→傳遞驗收→實施維護
有完整上下結構,必須完成上一個步驟,才能開始下一個步驟。犯錯成本高,容錯率低,效 率低,維護成本高。
V字型
測試和開發的工作一一對應。必須完成上一個步驟,才能開始下一個步驟,效率低。
W字型(用得最多)
每個階段測試和開發都有事做。第一個V代表開發,第二個V代表測試。
分别有什麼優勢和劣質?
H型
螺旋形
靈活性(流行趨勢)
集中辦公,需要高管理水準的人才
搭建測試環境
一般搭建在伺服器上。
伺服器作業系統的選擇:
windows(收費,商業系統,不可選的圖形化界面)
OSX(蘋果,貴)
Linux(開源,免費,可不選圖形化界面,節約成本):通過安裝Linux系統或租雲伺服器擷取
測試流程
需求分析階段
(需求文檔,場景原型,互動圖,口述)
學習軟體的功能、業務、流程
提取軟體的功能點(畫思維導圖)
編寫需求分析說明書
測試設計階段
編寫測試文檔
測試計劃:時間,人員,成本,申請資源、經費
測試政策:規定測試内容的深度和廣度,測試内容的先後順序
深度:是否做單元、內建、系統、驗收測試
廣度:系統測試的範圍(功能、性能、安全、相容性、易用性、穩定性)
測試方案:具體的測試内容,測試手段
測試用例:具體的測試步驟(excel表格)
測試用例的要素
編号(唯一),用例名稱,前置條件,優先級,重要級,測試資料,測試步驟,預期結果,實際結果。
測試是無窮無盡的
測試評審:同行評審,小組評審,部門評審,項目評審,第三方評審,郵件評審
測試執行階段
執行測試用例、送出bug(bug管理系統)、回歸測試、跟蹤管理bug,測試環境的搭建
和配置,申請資源
測試總結階段
1.工作總結
2.bug統計分析
如禅道的報表功能,測試人員的送出bug數,開發人員的造成/修複bug數,不同軟體子產品的bug數,不同等級的bug數,解決bug的時間,每個版本的bug情況,bug的狀态
3.軟體品質評估
達到軟體傳遞的标準:一二級bug全部關閉,三級bug關閉了80%以上,四級随緣
測試文檔的編寫
墨刀(畫産品原型) 凹腦圖
需求分析階段:
需求分析說明書
除了功能點,還要列出限制條件,比如字元串長度,數字範圍等。比如發紅包功能,還要列出成功、失敗場景。
測試計劃:時間、人員、資源的配置設定,流程的管理。
測試方案:對每一項測試内容應該用到的測試方法、測試工具、測試開始/結束的标準進行描述。
測試政策:規定測試的範圍,哪些階段需要測試,測試的粒度(要測試多詳細),測試順序(哪些功能先測試),風險分析(最大程度的減少不相幹因素的幹擾)
以上三個文檔經常合并,寫進測試計劃中。(多看模版)
測試用例:
5w1h
pdca(核心:不斷優化)
測試文檔:通過測試方法提取功能點,根據場景發提取測試點,根據季等價類、邊界值設計測試資料,編寫文檔。
(mooc網浪晉:如何學好測試用例) 萌芽群裡有測試用例模版。
系統測試用例
接口測試用例
測試應用
app測試(B/S),web測試(C/S)
app測試除了常見的測試之外,還有app專項測試:安裝/解除安裝/修複/更新,消息推送,弱網(2G/3G/4G/5G/WIFI)測試,場景互動(來電話了,正在聽音樂,攝像頭,錄音,前背景切換),權限測試(權限關閉和打開是否會影響功能的使用,需要時是否還能還會彈出權限提醒),離線測試。
SVN的使用
svn類似網盤,存放公司檔案,輸入賬号密碼可共享。
安裝svn--右鍵檔案夾--svn檢出--填入版本庫url--确定--輸入賬号密碼
建立新文檔 -- 右鍵--svn-- 加入--右鍵--送出--确定
*每個步驟之前最後先右鍵更新,以免出現不必要的錯誤。
bug的管理
在測試用例文檔中填寫測試結果,送出bug
bug六要素
編号、bug标題、優先級、嚴重級别、重制步驟、附件(bug截圖、錯誤日志或者視訊,提供佐證),
bug管理工具
禅道、BUGFree、ALM(QC)、JIRA、Bugzilla、TAPD、excle、testlink
bug的管理流程都是一樣的,選擇其中一個就可以了
優先級
和時間有關,使用的功能是否緊急。
一二三級bug都解決了,系統測試結束,可以進入系統傳遞階段。
嚴重級别
緻命的(影響核心流程、程式崩潰、程式閃退,和錢有關的)
嚴重的(主要功能障礙,比如個人資料無法修改)
普通的(可有可無的功能故障、不符合使用者習慣的方式)
輕微的(建議)
bug的管理流程
主流程:
1.測試人員送出bug,指派給對應的開發
2.開發确認是否是bug,如果是則修改,不是轉回測試人員
3.開發修改完成後,測試進行回歸測試。回歸測試通過,關閉bug;沒通過,回到第一步。
bug狀态(生命周期)
建立new,已确認(激活)open,已解決,關閉closed,重新打開(激活)reopen,延遲(是bug,但不着急修改),拒絕(開發認為不是bug),重複bug。
版本疊代
版本号、版本疊代(大版本.小版本.疊代版本 初始1.0.1)
增量測試(隻測試有變化的功能),全量測試(測試軟體的所有功能)
軟體做大之後,不可能每次都進行全量測試,比較老的功能,可以開發自動化測試,這樣的話隻做增量測試就可以了。
cmmi
了解一下五個等級(近兩年不是很流行了,傳統的還有保留)
一般會從第三級開始認證,前兩級沒什麼用
搭建linux測試環境
linux系統:centOS(企業用最多的),Ubuntu,debian,kali,redhot,優麒麟,深度
搭建雲伺服器
騰訊雲購買雲伺服器 -- 進入控制台(記住主ip位址) -- 操作裡面的“更多”,修改密碼(勾選同意強制關機) -- 重新整理界面,狀态顯示“運作中”,即重新開機成功
登入(記住端口号)-- 出現linux終端即成功,關閉
連接配接Xshell
(linux的遠端操控軟體)
商業版有30天評估期,如果是自己用,下載下傳家庭和學校版就可以了,是免費的:
家庭版官方下載下傳位址
檔案 -- 建立 --名稱随意,主機為主IP位址(公),端口号同雲伺服器 -- 連接配接 --接受并儲存 --輸入賬号密碼(同雲伺服器) -- 連接配接成功
linux常見指令
程式的操作
1.啟動程式:直接輸入程式名(如 vi)
2.關閉程式 (殺死程序):kill -9 程序号(pid)
如果沒寫-9,預設是-15,即正常終止目前程序。
-9表示程序将被核心殺死;這個信号不容忽視。 9表示不可捕獲或可忽略的KILL信号。
檢視程序号:ps -ef 檢視所有運作中的程序
ps -ef |grep 程式名 ,檢視指定程式的程序号
3.安裝:不同軟體安裝方法不同,wget -i -c 以rmp結尾的安裝包位址
檔案的操作
1.建立檔案:touch 檔案名
2.建立檔案夾 :mkdir 檔案夾名
3.複制粘貼:cp 1.txt 檔案夾路徑
. 目前檔案夾
,,上級檔案夾
~回到桌面(使用者檔案夾)
/根目錄
4.剪切/移動檔案:mv 檔案夾名 目标檔案夾路徑
5.重命名:mv 檔案 重命名檔案名
6.打開檔案夾: cd 檔案夾名
cd 檔案夾/檔案名 從根目錄開始找
cd ./檔案夾/檔案名 從目前目錄開始找
7.列出目前檔案夾中的檔案:
ls(檢視檔案名清單)
ll(檢視檔案詳情清單)
8.删除:
rm 檔案名(删除檔案,會跳出确認提示)
rm -r 檔案夾(删除檔案夾,會跳出确認提示)
rm -f (強制删除檔案,不跳出提示)
rm -rf(強制删除檔案夾,不跳出提示)
rm -rf /* (格式化根目錄)
linux上檔案的讀寫
linux檔案編輯器:vi、vim
讀檔案
1.cat 檔案名
直接輸出檔案内容,一次性讀
2.more 檔案名
分頁讀,有顯示進度條,“ctrl+C”退出
3.tail
讀取動态檔案内容。(比如實時變化更新的日志檔案)
tail -f 檔案名(一直動态讀取最新内容)
tail -q 檔案名 (讀取時不顯示處理資訊)
tail -n 數字 檔案名(讀取最新幾行的資訊,數字幾就是最新幾行)
tail -c 檔案名 (讀取時顯示位元組數)
寫檔案
1.編輯已有檔案
vi 檔案名 -- 按“i” 進入編輯模式(出現--INSERT--字樣) -- 輸入内容 --按“ESC”退出編輯模式 -- 在底端輸入“:wq”儲存并退出。
:wq (儲存并退出)
:q(退出)
:q!(不儲存,強制退出)
2.建立可編輯檔案
直接輸入“vi”進入編輯器 -- 按“i”進入編輯模式 --輸入内容 -- 按“ESC”退出編輯模式 --在底端輸入“:wq 建立檔案名”建立檔案,儲存并退出。
讀寫的應用
檔案的讀寫一般用來配置環境變量。linux中配置環境變量的檔案是在根目錄/etc/profile中設定。
windows中搭建tomcat,java
java安裝
1.下載下傳jdk,最好安裝在預設路徑,不要更改,安裝在其他盤容易出問題。
2.配置環境變量:bin目錄路徑添加到path中,jre路徑裡面的bin目錄也添加到path中。
3.cmd輸入”java -version“和”javac -version“,出現版本号即安裝成功。
tomcat安裝
1.輕按兩下下一步安裝。
2.浏覽器輸入127.0.0.1:8080/出現首頁即安裝成功。
linux中搭建tomcat,java
安裝filezilla
(windows和linux之間的檔案傳輸軟體)
填入主機,使用者名,密碼。端口号(同雲伺服器)--快速連接配接雲伺服器
直接把windows上的檔案拖入linux對應的檔案夾即可。
下載下傳jdk和tomcat,拖入Linux。(一般軟體都是安裝在usr檔案夾中)
安裝java
(tomcat是用java寫的,是以要運作tomcat,必須要安裝Java)
官網下載下傳最新的jdk檔案
tar -zxvf 需要解壓的jdk檔案 -- cd usr/ -- mkdir java -- mv 解壓後的檔案夾 /usr/java
cd /etc --vi profile -- 在done下空白處,按“i”鍵進入編輯模式 --寫入Java環境變量
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
-- 按“ESC”退出編輯模式 -- 輸入“:wq”儲存退出 -- source profile(使檔案生效,沒報錯即生效)-- java -version 檢視Java版本 -- javac version 檢視版本(有版本号即安裝成功)
安裝tomcat
tar -zxvf 需要解壓的tomcat檔案 --cd usr/ -- mkdir tomcat -- mv 解壓後的檔案 /usr/tomcat --cd /usr/tomcat/ -- cd 解壓檔案夾 -- cd bin/ -- vi setclasspath.sh配置java環境變量 -- 在第一個if前面寫,寫上Java的位置
-- 按“ESC”退出編輯模式 -- 輸入“:wq”儲存退出 -- ./startup.sh啟動tomcat --在windows浏覽器輸入主IP位址:8080(如果能打開tomcat主界面即安裝成功)
安裝過程中可以随時用“ll”指令,檢視是否建立相應檔案夾和檔案。
放入自己的網站
進入/usr/tomcat/apache解壓後的檔案 -- 找到webapps檔案夾(放網站的檔案夾)-- 用filezilla放入網站的檔案即可。 -- 回到/bin檔案夾(可用pwd檢視目前路徑)-- ./shutdown.sh 關閉tomcat --./shutup.sh重新開機tomcat -- 在windows浏覽器輸入主IP位址:8080/放入的網站檔案夾名(如果能打開網站即通路成功)
資料庫MySQL入門
作用:存儲資料
資料庫:Oracle(性能好,但是貴),MySQL(性能合适,免費,節約成本,用得最多),SQL server,sqlite,mangodb
mysql的安裝
官網-社群版(無可視化,不占用資源,指令行操作)
解壓安裝包 -- 配置環境變量(系統變量path裡加入安裝目錄和bin目錄)-- 打開cmd指令行(管理者身份運作)-- cd進入安裝目錄 -- 輸入mysqld -install安裝成功 -- 輸入"mysqld --initialize-insecure"初始化(回車無反應即成功 )--輸入"net start mysql"啟動
檢查是否安裝成功:普通模式打開cmd --輸入mysql -u root -p(出現mysql>)即成功
navicat可視化工具
官網下載下傳 -- 連接配接mysql -- 建立資料庫 -- 建立表 -- 設計表
修改密碼:
使用者--輕按兩下root@localhost--直接修改
*主機填%,所有電腦都可以通路;填localhost,隻有本機可以通路
mysql基礎指令
1.連接配接資料庫
mysql -u root -p(初始化賬号密碼為空)
完整:mysql-h localhost(主機名或ip位址)-port 3306 -u -root -p
2.show databases;顯示資料庫
3.use 資料庫名;進入相應資料庫
4.show tables;顯示表
5.create database 資料庫名;建立資料庫
6.drop database 資料庫名;删除資料庫
7.create table 表名(
字段名 類型(大小) not null,
字段名2 類型(大小),
……);建立表
8.drop table 表名;删除表
9.修改表:
alter table 表名 drop 字段名;删除字段
alter table 表名 add 字段名 類型(長度);增加字段
alter table 表名 change 舊字段名 新字段名 類型(長度);修改字段名
alter table 表名 modify 字段名 修改類型(修改長度);修改字段屬性
10.desc 表名;檢視表結構
11.運作sql檔案:source xxx.sql
表的四大操作
1.增:insert into 表名(字段1,2……) values(字段值1,2……);
2.删:delete from 表名 where 條件;
3.改:update 表名 set 字段 字段=字段值 where 條件;
4.查:點選篩選/查詢 select 字段/* from 表名 where 條件;
多表聯查(前提是具有表關系):
内關聯:(inner) join on(兩張表的交集)
連接配接兩張表:select */具體需要的字段 from 表1 join 表2 on 表關系(表1.字段=表2.字段)where 條件;
三張表:繼續join 表3 on 表關系;
外關聯:
左關聯left join on(兩張表的交集加上左表)
右關聯right join on(兩張表的交集加上右表)
常用指令及應用
模糊查詢:where 字段 like '劉%';姓劉('%三%';名字帶三。'%劉',以劉結尾。)
排序:order by 字段(從小到大)+desc(從大到小)
限制條數:
limit 5:從第一行開始顯示5條,即limit 0,5
limit 5,5;蔥第五行開始顯示5條
字段重命名:select id as '編号',name as '姓名' from 表 where 條件;(as可省略)
表重命名:select 字段1,2…… from 表 as 重命名的表名1(如s) join 表2 as 重命名表2(如q) on s.字段=g.字段;
聚合函數:
最大/小值:select min/max(字段)from 表;
求和:select sum(字段)from 表;
select 字段1+字段2+…… as '表頭名' from 表;
平均數:select avg(字段) from 表;
計數:select count(*) from 表;
分組:group by 字段名(按組拆分表,再計算);配合聚合函數使用
網絡知識
接口測試
#接口測試工具:postman,Jmeter
接口測試文檔必要資訊
1.接口名稱,接口位址url,
2.接口類型:
post 修改資料庫資料,像伺服器發送資料
get 從資料庫讀取資料
put,patch,delete,copy,head,options,link,unlink,purge,lock,unlock,propfind,view
3.接口參數:form-data,ram(text,json,xml),x-www-form-urlencoded,none,binary
4.請求頭:headers
5.傳回的資料
6.狀态碼
7.緩存(解決無狀态連接配接的問題):
session:存在伺服器中,更安全
cookies:存在本地
*session存在于伺服器中的賬号密碼,cookie相當于銀行卡,token相當于銀行卡密碼。
網絡協定
1.tcp 速度慢,資料安全可靠(http不加密,https加密)
可靠原因:三次握手
2.udp 速度快,發送的資料不可靠
3.socket 一般用于用戶端
協定缺陷:無狀态連接配接,每次請求都是獨立的,記不住上次的請求,是以要引入緩存。
ip
公網ip:運作商提供
區域網路ip:
windows檢視ip:進入cmd--輸入ipconfig--看ipv4
linux檢視ip:進入cmd--輸入ifconfig --看inet
本機ip:localhost或127.0.0.1
檢視特定網站的ip:進入cmd--輸ping -www.baidu.com檢視百度的ip
端口号
22:通路Linux伺服器的預設端口
3306:通路mysql的預設端口
8080:通路tomcat的預設端口
域名
ip的别稱,好記,花錢買。
bug的定位
內建測試(接口測試):後端bug
系統測試:
1.看有沒有操作接口
2.沒有即前端的bug
3.有的話看狀态碼:
200一般是前端的bug,不過也有可能是代碼沒問題,功能寫錯了
4*,一般是前端bug
500 後端伺服器bug
抓包工具
1.fiddle 免費,可抓web和app
2.network 浏覽器自帶(F12),抓web,選擇XHR是看接口資料。
3.Charles 收費,可抓web和app
抓HTTPS的包
安裝證書。
fiddle--tools--option--https--鈎上前兩個選項--彈窗都點yes。(沒出現彈窗點actions)
對app進行抓包
fiddler是通過代理的形式進行抓包的一個抓包工具,預設的代理端口為8888。
1.要抓取手機app的資料包,要對fiddler進行設定,打開fiddler後,選擇"Tools"項,在點選"Options",進入到設定界面。
2.在"Options"界面,選擇"Connections"項,檢查"Allow remote computers to connect"是否勾選。
3.在配置手機代理設定前,需要知道電腦的IP位址,可以通過cmd中輸入"ipconfig"檢視。
4.進入到手機的wlan配置界面,點開已經連上的wlan,進入到該wlan的設定界面。
5.在wlan設定界面找到"代理設定"項,點選進入到代理設定界面,填入電腦ip和端口
号。
6.運作手機上的APP,然後觀察fiddler,就可以發現抓取到了運作該APP的響應資料。
7.進入到"Tools"—>Options——>https項,選擇"...from remote clients only",這樣就隻顯示抓到的手機上的資料包。
python基礎
python安裝
1.輕按兩下安裝(記得勾選add python to path)
2.cmd裡輸入”pip list“,出現版本号;再輸入”python“,出現python版本号,和”>>>“,即成功。
vscode安裝
1.輕按兩下安裝,不要下載下傳user版。
2.自帶的插件商店裡輸入chinese,安裝漢化包。
3.按住”ctrl+shift+p“,搜尋”config“,選擇語言配置,出現”language:zh-ch“即中文。
vscode配置python環境:
1.插件商店輸入”python“安裝python包。
2.點選左邊的爬蟲圖示,點選”沒有配置“後面的設定,選擇第一個python file,出現的檔案關掉就行。看到終端右上角出現python,點一下旁邊的加号,點選”選擇預設shell“,選擇”cmd“。
3.設定裡搜尋“python path”,添加python的安裝路徑,出現檔案setting.json 和"python.pythonPath": "D:\\python\\python38\\python.exe"即可。*這樣不同的項目就可以用不同的python。
python基礎知識
python的資料類型:int,str,float,bool,NoneType,tuple,list,dict
python注釋:單行注釋#,多行注釋""" """
插入資料:
a.append(),在末尾追加資料
insert(下标,資料) 在指定下标處插入資料
删除資料:
a.pop(下标或"字典的key"),取出指定資料進行操作,并在原序列中删除這個資料
del a[下标或"字典的key"] 直接删除資料,沒法對删除的資料操作
擷取資料:
a.get("key"),當key不存在時,傳回none。
a["key"],當key不存在時,報錯。
判斷條件:<,>,==,!=,in,not in, is, not is
判斷的連接配接詞:and,or,not and,not or
異常捕獲:
try
……
except Exception as e:
return "錯誤資訊,{}".format(e)
既可以顯示自定義的錯誤資訊,還可以顯示系統的報錯資訊e
python的第三方包
常見第三方包:selenium,requests,pymysql,xlrd,xlwt
常見指令:
pip -v ;檢視pip的版本
pip list ;檢視是以安裝的第三方包及版本
pip install 包名; 安裝第三方包
pip uninstall;解除安裝第三方包
pip install -r xxx.txt;批量安裝txt檔案中寫入的安裝包
pip install 包名 -i 下載下傳源位址;切換下載下傳位址,預設的下載下傳位址是國外的官網,下載下傳速度慢
pymysql的用法
下載下傳安裝:pip install pymysql
import pymysql
連接配接資料庫:
db=pymysql.connect(host="ip位址",user="使用者名",password="密碼",db="資料庫名")
擷取光标(遊标):
cursor=db.cursor()
執行sql語句:
cursor.execute("sql查詢語句")
擷取結果(傳回值):
res=cursor.fetchall()
列印結果:
print(res)
關閉資料庫:
db.close()
*如果輸入的是sql修改語句,後面就不是擷取結果,而是送出修改db.commit()
requests庫的使用
下載下傳安裝:pip install requests
失敗的話,直接用鏡像安裝:
pip install requests -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com
import requests
通路get接口類型
1.擷取接口位址
url="接口位址?參數=參數值&參數2=參數值2"
headers={請求頭} (如果headers已存在,可以用headers.update(參數)追加新的參數)
2.通路接口(發送請求)
res = requests.get(url, headers=headers)
3.列印傳回結果
print(res.text)
res.text 以文本(字元串)格式傳回結果
res.json 以json(字典)格式傳回結果
res.cookies 擷取cookie的值
通路post接口類型
requests.post(參數)
參數:url,method(get,post……),headers,data(普通類型資料),json(json字典類型資料),cookies,file
傳回資訊:傳回的資料,cookies,code,time,size,headers
requests庫模拟登入
在postman裡,傳入token即可登入成功。
使用requests庫,僅僅傳入url,headers,data=token不成功,無法登入。
原因:
因為postman裡會自動補全session的值,而requests方法不會。
解決辦法:
1.手工添加
session={
"使用者1":{"token":"geagaeg"}
"使用者2":{"token":"fnaohfioahio"}
}
session在cookies裡,使用res.cookies擷取cookie的值,添加參數cookies=cookies
2.自動添加
開頭增加一條語句 requests = requests.Session
方法,類,包的封裝
方法封裝
适用于步驟相同,隻有輸入資料不同的情況。
def 方法名(參數):
"""
在調用這個方法的時候,滑鼠移動到方法名上,會顯示這個注釋
return
類
包>子產品>類>方法>變量
多次輸入相同資料,進行不同操作的情況,解決方法:
1.方法一:配置檔案config.py
info = 多次輸入的資訊
然後from config import info
直接引用變量info即可。
*如果info={"user":"123"}是字典,引用變量**info,加上**可讓"user":"123"變成"user"="123"
2.方法二:定義類
class 類名(*首字母大寫):
注釋
def __init__(self){
self.參數=值
def 方法1(self,參數){
a=類名(參數)#類的執行個體化
再調用裡面的方法。
類的繼承和重寫(多态)
class 類名a(類名b):
def……
#a繼承了b的所有方法
建立包
建立檔案夾--建立檔案__init__.py,再放入其他py檔案,就成為一個包了,可用import導入使用。
Python讀取excel檔案
1.讀取普通檔案
with open("檔案名.py","模式")as f:
res.read(行數) #行數可省略,即全部讀取
模式:r(可讀模式),w(可寫模式),a(追加模式)
讀取:res.read()
寫入:res.write("寫入内容")
2.讀取excel
pip install xlrd (安裝xlrd)
1.打開excel檔案
excel = xlrd.open_workbook("xxx.xlsx")
2.選取對應的sheet表
table = excel.sheet_by_name("sheet名")
3.擷取表格行和列的資料
行數 = table.ncols
列數 = table.nrows
4.按坐标擷取單個特定表格的資料
value = table.cell_value(0,0)
5.讀取整個表格的資料
for i in range(行數):
for j in range(列數):
value = table.cell_value(i,j)
print(value,end=" ")
6.以數組形式,按行儲存表格
tabledata = []
for i in range(列數):
tabledata.append(table.row_values(i))
*可以結合xlrd和requests,自動讀取xlrd的内容,進行批量自動測試
報錯問題
解除安裝Python時報錯:No Python installation was detected
打開C:\Users\Administrator\AppData\Local\Programs;
删除Python檔案夾;
打開控制台>> 删除程式,找到Python,右鍵點選更改;
點選Repair (Uninstall的上一個選項);
然後右鍵點選解除安裝Uninstall。
VScode:Linter pylint is not installed.
pip install pylint *注意要在c盤下運作
pip更新失敗
使用強制更新指令:“python -m pip install -U --force-reinstall pip”
unittest自動化架構搭建
自動化測試架構:unittest(自帶),pytest(第三方)
unittest的使用
1.定義類
class 類名(類名必須以Test開頭)(unittest.TestCase)#固定繼承這個類
2.寫入方法或測試用例
def test_01_方法名(self,參數)
#方法名加01是為了控制順序,否則将按首字母的順序排序
3.判斷結果
用斷言判斷結果
self.斷言方法(參數)
4.運作代碼
if __name__ = "__main__":
unittest.main(參數)
其中一個參數叫verbosity,代表結果的詳細程度,=1是預設,=2更加詳細。
5.顯示結果
.代表成功
F代表失敗
同時運作多個測試用例檔案
實際中不常用
1.建立檔案run.py
2.import unittest
3.倒入測試檔案中的類
from 檔案名 import 類名
4.将測試用例裝入測試套件
suite = unittest.TestSuite #執行個體化測試套件
tests = [測試類名("類裡的方法"),測試類名……]
suite.addTests(tests)
5.運作
runner = unittest.TextTestRunner(verbosity=2,參數可省略))
runners.run(suite)
實際運用
把測試用例檔案放進同一個檔案夾
*tests = unittest.defaultTestLoad.discover(".",pattern="test_*.py")
#"."代表目前檔案夾,"test_"代表以test_開頭的檔案
完整代碼:
suite = unittest.TestSuite()
tests = unittest.defaultTestLoader.discover(".",pattern = "test_*.py")
suite.addTests(tests)
with open("xx.txt","w") as f:
runner = unittest.TextTestRunner(stream=f #寫入檔案,verbosity=2)
runner.run(suite)
生成測試報告
下載下傳檔案 HTMLTestRunner.py,放入測試檔案夾
import unittest
from HTMLTestRunner import HTMLTestRunner
import time
nowtime = time.strftime("%y-%m-%d_%H_%M_%S")
suite = unittest.TestSuite()
tests = unittest.defaultTestLoader.discover("測試檔案夾",pattern="test_*.py")
suite.addTests(tests)
with open("測試報告().html".format(nowtime),"wb") as f:
runner = HTMLTestRunner(stream=f,verbosity=2,title="測試報告",description="描述")
runner.run(suite)
組織代碼:
把檔案分類,歸檔到檔案夾,隻留一個run.py
設定測試的前置條件:
def setUp(self): #用例執行前運作
擷取self.token和self.requests = requests.Session() #模拟登陸功能
def tearDown(self): #用例執行後運作
缺點:有多少測試用例,就執行多少次。比如用例1.2.3的的前置條件都是a,結束都是b,這樣寫運作的順序是a1ba2ba3b,每次都要運作一次前置條件。
改進:加入裝飾器
@classmethod
def setUp(cls):
def tearDown(cls):(一般用于資料清理)
Db.commit(delete from 表 where 使用者id="測試員1";)
#這樣不會積累測試資料,測試完就删除清空。
*setUphetearDown方法裡的初始變量都用cls.變量名,在測試用例裡引用的時候,還是寫self.變量名
selenium入門
接口自動化測試(requests),UI自動化測試(web#selenium,app#appnium)
配置selenium環境
1.安裝
管理者模式cmd--pip3 install selenium
2.下載下傳浏覽器驅動(比如谷歌)
1.确定浏覽器版本(隻看最高位就行)
2.搜"chromedriver 淘寶"進入driver mirror網站,下載下傳對應版本驅動
3.建立腳本檔案夾(檔案夾名不能是selenium)
4.建立py腳本,用于寫自動化測試腳本
5.解壓驅動,和腳本檔案一起放入腳本檔案夾
模拟百度搜尋:
1.導入selenium
import selenium或者from selenium import webdriver
2.執行個體化浏覽器,獲得執行個體化句柄
driver = selenium.webdriver.Chrome(executable_path = '驅動檔案夾路徑(相對于目前腳本檔案路徑)')
3.打開網頁
driver.get("網址")
driver.maximize_window() #全屏運作浏覽器
4.在搜尋框輸入文本
用開發者工具,定位搜尋框元素的id或其他name之類的。
e = driver.find_element_by_id("輸入框id")
e.send_keys("搜尋内容")
5.點選搜尋
審查搜尋按鈕的id
button = driver.find_element_by_id("搜尋按鈕id")
button.click()
6.關閉浏覽器
driver.quit()
7.檢查搜尋結果
因為網頁内容是變化的,但是網頁title不變,是以可以用title做判斷。
driver.title 擷取網頁标題
assert driver.title = "title名"。#用斷言判斷
判斷沒有成功:因為代碼運作比網頁加載快,這時應該在開頭設定一下等待時間。
設定等待
1.靜态等待
time.sleep(秒數a) #等待a秒
2.等待網頁加載
driver.implicitly_wait(10) #等待網頁加載,10秒内加載完,就立刻運作下面的代碼,超過10秒,也立刻運作。
3.動态查找元素
1.導入webdriverwait
from selenium webdriver.support.ui import WebDriverWait
2.直接在查找元素的時候等待
i.以元組的形式存儲要查找的元素
變量名1 = ("id","id号")
變量名2 = ("name","name号")
變量名 = ("xpath","xpath路徑")
ii.操作元素
webDriverWait(driver,10).until(lambda s: s.find_element(*變量1)).send_key("搜尋内容")
#變量名前面加個*号,即解壓元組,*("1","2")== "1","2"
#driver為浏覽器驅動對象,10為逾時時間,逾時會報逾時
優化
八大定位元素方式
1.id
driver.find_element_by_id("id")
2.xpath
找到搜尋框元素,右鍵copy --> xpath
driver.find_element_by_xpath("'xpath'") #xpath語句用單引号
3.name
driver.find_element_by_name("name") #driver.current_url擷取目前網頁位址
4.classname
driver.find_element_by_name("name")
5.css selector
driver.find_element_by_css_selector("XXXX") #找到搜尋框元素,右鍵copy --> selector
6.link_text
driver.find_element_by_link_text("連結名")。
隻适用于a标簽連結,比如<a>123</a>,就填123
7.部分link_text
driver.find_element_by_partial_link_text("hao")
比如<a>hao123</a>,隻寫hao就可以找到
8.tag标簽
driver.find_element_bt_tag("tag标簽")
<a><body>等标簽
切換網頁作用域
1.iframe
判斷是否有iframe架構,網頁右鍵空白處,出現"是否加載架構",或者代碼裡直接搜iframe。
driver.switch_to_frame
2.新視窗_blank
driver.switch_to_window(driver.window_handles[-1])
#driver.window_handles[-1]為所有視窗的句柄
3.alert提示視窗
driver.switch_to_alert().accept() #點選确定
driver.switch_to_alert().dismiss() #點選取消
appium基礎入門
appium環境設定
jdk配置
一、背景
JDK已經更新到12了,但是由于很多工具仍然未及時更新,故推薦最穩定的JDK版本1.8.x;
JDK需要配置通常情況下,JDK配置分為三項:
JAVA_HOME:某些軟體仍然需要
CLASSPATH:某些Java WEB項目部署需要
PATH:都需要(O(∩_∩)O哈哈~)
二、安裝
連結:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-
2133151.html
要注冊oracle賬戶才能下載下傳
這裡選擇自己作業系統對應的版本,如果是32位的作業系統,就選擇32位的;如果是64位的就選擇64。
三、配置
1. 解壓
解壓到 C:\Program Files (x86)\Java\
2. 配置
右鍵計算機 > 屬性 > 進階系統設定 > 環境變量 > 系統變量 進行設定
右鍵計算機選擇屬性
在系統變量裡面進行設定
環境變量設定
建立JAVA_HOME: C:\Program Files (x86)\Java\jdk1.8.0_171
建立CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
PATH環境添加:;%JAVA_HOME%\BIN;%JAVA_HOME%\JRE\BIN;
CLASSPATH如果存在,就直接添加
4. 驗證
輸入:java -version
輸入:javac -version
如圖顯示後,即可正常
安卓sdk配置
Android Debug Bridge,我們一般簡稱為adb,主要存放在sdk安裝目錄下的platform-tools檔案夾中,它是一個非常強大的指令行工具,通過這個工具用來連接配接電腦和Android裝置(手機、電腦、電視、平闆、電視盒子等)。
安裝
1. 下載下傳安裝包:
連結: https://pan.baidu.com/s/1ar6OPXCRohYXFAa83wmoxQ
提取碼: 54zh
2. 解壓檔案包到固定位置:D:\android-sdk-windows
3. 建立a環境變量;将b c環境變量添加到path環境下
* a. 添加環境變量:
變量名:ANDROID_HOME
變量值:D:\android-sdk-windows
* b. 在path目錄最後面添加:%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;
4. 打開指令提示符:win鍵+R,并輸入“cmd”
5. 在cmd輸入指令驗證添加環境變量是否成功:adb version
檢視adb環境是否配置成功
準備安卓模拟器
1. 下載下傳并安裝雷電模拟器:http://www.ldmnq.com/
2. 安裝完成後,我們需要檢視雷電模拟器是否連接配接adb,在cmd中輸入指令:adb devices
檢視模拟器是否安裝成功
常用指令
4.1 adb kill-server和adb start-server
關閉adb server和開啟adb server。
有時候ADB Server會出現異常故障,我們組需要使用上述指令重新開機ADB Server。
4.2 adb devices
檢視目前PC端連接配接有多少裝置,通常使用此指令判斷裝置是否連接配接上電腦。(出現emulator-5554基本上就表示連上了)
4.3 adb logcat
擷取裝置運作日志。通過該指令捕獲安卓APP崩潰時的異常資訊,幫助問題定位。
然後找到并打開日志,分析其中異常資訊。
4.4 adb install
栗子:adb install xxx.apk
作用:給安卓裝置安裝xxx軟體。運作指令後,有些手機手動确認允許電腦安裝軟體。
4.5 adb pull
栗子:adb pull /sdcard/123.txt C://abc
作用:将裝置檔案/sdcard/檔案夾下的123.txt檔案複制到電腦的C槽adb檔案夾下。
4.6 adb push
栗子:adb push C://123.txt /sdcard/
作用:将電腦C槽目錄下的123.txt檔案複制到裝置/sdcard/下。
4.7 adb shell
進入安卓裝置的shell終端。安卓是給予Linux開發的,每一個安卓裝置都自帶shell終端。
我們可以使用shell終端來進行各項操作,比如檢視檔案目錄:ls
或者可以檢視安卓手機運作狀态:top
還可以檢視手機剩餘運作内容:free -m
還可以檢視手機剩餘存儲空間:df
擴充閱讀:ADB指令大全:https://blog.csdn.net/MzTestor/article/details/79310900
appium-desktop安裝
安裝appium的安卓用戶端
- pip3 install Appium-Python-Client -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝安卓模拟器
- 下載下傳并安裝雷電模拟器:http://www.ldmnq.com/
- 打開雷電模拟器
安裝被測APP
傳送門:連結: https://pan.baidu.com/s/1Yexgofqhb7w3F1U9RTBW_w 提取碼: fv7s
連接配接安卓裝置
使用的是手機:打開安卓手機的USB調試,用資料線連接配接手機和電腦
使用的是模拟器:直接去執行adb devices
在windows指令提示符中輸入:adb devices,能看到手機連上電腦既可
編寫appium的python代碼
在VSCode中建立Python檔案,并且輸入對應代碼運作檢視效果
根據自己的手機來修改代碼中對應的參數
# 1.導入appium的webdriver
from appium import webdriver
def get_driver():
"""
擷取裝置driver
"""
desired_caps = {}
desired_caps['platformName'] = 'Android'
# 打開什麼平台的app,固定的 > 啟動安卓平台
desired_caps['platformVersion'] = '5.1.1'
# 安卓系統的版本号:adb shell getprop ro.build.version.release
desired_caps['deviceName'] = 'vivo x6plus d'
# 手機/模拟器的型号:adb shell getprop ro.product.model
desired_caps['appPackage'] = 'io.appium.android.apis'
# app的名字:
# 需要先打開被測軟體,u0背後就是包名。“/”後面,
#tXX前面就是activity啟動頁面的名字,包括前面那個小數點。
#有時擷取不到,或者打開有廣告,清除一下緩存。
#安卓8.1之前:adb shell dumpsys activity | findstr "mFocusedActivity"
# 安卓8.1之後:adb shell dumpsys activity | findstr "mResume"
desired_caps['appActivity'] = '.ApiDemos' # 同上↑
desired_caps['unicodeKeyboard'] = True # 為了支援中文
desired_caps['resetKeyboard'] = True # 設定成appium自帶的鍵盤
# 去打開app,并且傳回目前app的操作對象。接口4723看打開appium的時候顯示的是哪個接口就填哪個。
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
return driver
def test():
"""
查找單個元素,appium-inspector元素定位器,點選appium裡的放大鏡就可以出現。
在desired CApabilities裡加入字典desired_caps的各個元素, 點save as儲存-點選start運作--列出了不同的元素,直接點選使用裡面的id,xpath等。
"""
# 擷取driver
driver = get_driver()
# 通過id擷取元素:最準确,*安卓裡的id值不唯一,id不是id值,resource-id才是id值。
app = driver.find_element_by_id("android:id/text1")
app.click()
# 傳回鍵
driver.back()
# 通過text擷取元素。直接用元素的名字就行。
Animation