天天看點

軟體測試精華總結,入門到精通全流程(必看,知識點很全)

軟體測試基礎

軟體測試精華總結,入門到精通全流程(必看,知識點很全)

軟體測試的概念

通過一系列手段去證明軟體是符合使用者需求的,滿足品質要求的。預期結果和實際結果的一個對比。

軟體測試分類

按方法分:黑盒測試、白盒測試、灰盒測試

黑盒測試:把軟體比作一個“黑匣子”,不考慮具體是内部是如何實作的,隻考慮外部功能的運作,檢查軟體的輸入和輸出是否比對。

白盒測試:檢查軟體的代碼、函數和方法等内部結構。

灰盒測試:介于白盒和灰盒測試之間,既可以根據外部暴露出的功能進行檢測,也可以參考内部的代碼結構。

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