軟件測試入門全流程精華總結【必看!知識點很全】

軟件測試基礎

軟件測試的概念

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

 

軟件測試分類

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

 

黑盒測試:把軟件比作一個“黑匣子”,不考慮具體是內部是如何實現的,只考慮外部功能的運行,檢查軟件的輸入和輸出是否匹配。

 

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

 

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

 

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字型

image.png

 

測試和開發的工作一一對應。必須完成上一個步驟,才能開始下一個步驟,效率低。

 

W字型(用得最多)

 

image.png

 

每個階段測試和開發都有事做。第一個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%以上,四級隨緣

 

 

測試文檔的編寫

 

墨刀(畫產品原型) 凹腦圖

 

需求分析階段:

 

需求分析說明書

 

image.png

 

除了功能點,還要列出限制條件,比如字符串長度,數字範圍等。比如發紅包功能,還要列出成功、失敗場景。

 

測試計劃:時間、人員、資源的分配,流程的管理。

 

測試方案:對每一項測試內容應該用到的測試方法、測試工具、測試開始/結束的標準進行描述。

 

測試策略:規定測試的範圍,哪些階段需要測試,測試的粒度(要測試多詳細),測試順序(哪些功能先測試),風險分析(最大程度的減少不相干因素的干擾)

 

以上三個文檔經常合併,寫進測試計劃中。(多看模版)

 

測試用例:

5w1h

image.png

pdca(核心:不斷優化)

image.png

 

測試文檔:通過測試方法提取功能點,根據場景發提取測試點,根據季等價類、邊界值設計測試數據,編寫文檔。

(mooc網浪晉:如何學好測試用例) 萌芽羣裏有測試用例模版。

 

系統測試用例

image.png

 

接口測試用例

image.png

 

測試應用

 

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

 

瞭解一下五個等級(近兩年不是很流行了,傳統的還有保留)

 

一般會從第三級開始認證,前兩級沒什麼用

 

image.png

 

搭建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

 

image.png

 

-- 按“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的位置

 

image.png

 

-- 按“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更新失敗

image.png

使用強制更新命令:“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.斷言方法(參數)

 

image.png

image.png

 

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):

@classmethod

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爲超時時間,超時會報超時

image.png

優化

image.png

image.png

 

 

八大定位元素方式

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賬戶才能下載

image.png

 

 

這裏選擇自己操作系統對應的版本,如果是32位的操作系統,就選擇32位的;如果是64位的就選擇64。

 

三、配置

 

1. 解壓

解壓到 C:\Program Files (x86)\Java\

 

2. 配置

右鍵計算機 > 屬性 > 高級系統設置 > 環境變量 > 系統變量 進行設置

 

image.png

 

右鍵計算機選擇屬性

在系統變量裏面進行設置

 

image.png

 

環境變量設置

 

新建JAVA_HOME: C:\Program Files (x86)\Java\jdk1.8.0_171

image.png

 

 

新建CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

image.png

 

PATH環境添加:;%JAVA_HOME%\BIN;%JAVA_HOME%\JRE\BIN;

 

image.png

 

CLASSPATH如果存在,就直接添加

 

4. 驗證

輸入:java -version

輸入:javac -version

如圖顯示後,即可正常

 

image.png

 

安卓sdk配置

 

Android Debug Bridge,我們一般簡稱爲adb,主要存放在sdk安裝目錄下的platform-tools文件夾中,它是一個非常強大的命令行工具,通過這個工具用來連接電腦和Android設備(手機、電腦、電視、平板、電視盒子等)。

 

安裝

   1. 下載安裝包:

   鏈接: https://pan.baidu.com/s/1ar6OPXCRohYXFAa83wmoxQ

   提取碼: 54zh

 

   2. 解壓文件包到固定位置:D:\android-sdk-windows

 

image.png

 

   3. 新建a環境變量;將b c環境變量添加到path環境下

 

               * a. 添加環境變量:

                           變量名:ANDROID_HOME

                           變量值:D:\android-sdk-windows

               * b.  在path目錄最後面添加:%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;

 

image.png

 

      4. 打開命令提示符:win鍵+R,並輸入“cmd”

     5. 在cmd輸入命令驗證添加環境變量是否成功:adb version

 

image.png

 

查看adb環境是否配置成功

 

準備安卓模擬器

 

1. 下載並安裝雷電模擬器:http://www.ldmnq.com/

2. 安裝完成後,我們需要查看雷電模擬器是否連接adb,在cmd中輸入命令:adb devices

 

image.png

查看模擬器是否安裝成功

 

常用命令

   4.1 adb kill-server和adb start-server

      關閉adb server和開啓adb server。

 

       有時候ADB Server會出現異常故障,我們組需要使用上述命令重啓ADB Server。

 

image.png

 

4.2 adb devices

           查看當前PC端連接有多少設備,通常使用此命令判斷設備是否連接上電腦。(出現emulator-5554基本上就表示連上了)

 

image.png    

 

  4.3 adb logcat

           

獲取設備運行日誌。通過該命令捕獲安卓APP崩潰時的異常信息,幫助問題定位。

image.png

         

然後找到並打開日誌,分析其中異常信息。

 

image.png

 

   4.4 adb install

           栗子:adb install xxx.apk

 

           作用:給安卓設備安裝xxx軟件。運行命令後,有些手機手動確認允許電腦安裝軟件。

image.png

 

   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終端。

image.png

       

我們可以使用shell終端來進行各項操作,比如查看文件目錄:ls

image.png

 

       或者可以查看安卓手機運行狀態:top

image.png

 

        還可以查看手機剩餘運行內容:free -m

image.png

         

還可以查看手機剩餘存儲空間:df

image.png

 

 

擴展閱讀: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,能看到手機連上電腦既可

 

image.png

 

編寫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 = driver.find_element_by_android_uiautomator('new UiSelector().text("Animation")')
Animation.click()

# 返回鍵
driver.back()

# 通過content-desc來獲取元素
app = driver.find_element_by_accessibility_id("App")
app.click()

# 返回鍵
driver.back()

# 通過xpath獲取:使用最多
media = driver.find_element_by_xpath("//android.widget.TextView[@text='Media' and @content-desc='Media']")
media.click()

if __name__ == "__main__":
test()

 

常用方法

.click() #點擊元素

.text #獲取文本

.send_keys() #輸入文本

.clear() #刪除輸入

quit() #退出

等待和selenium一樣。

 

實際使用步驟

 

appium 開源的app自動化測試工具

支持安卓/ios/wp/黑莓...

 

windows上不能做ios的自動化測試,需要蘋果系統

 

啓動環境

啓動appium-desktop的服務(打開qppium,點一下start)

連接安卓設備:

1.模擬器

2.手機:在開發者模式中開啓usb調試,數據線連接電腦,adb命令驗證手機和電腦是否連接

*手機和模擬器不要同時連接

安裝被測app(修改py腳本)

 

appium的按鍵操作

實體按鍵: home鍵:driver.press_keycode(3)

返回鍵:driver.back()

滑動:

模擬器上如何打開滑動的座標,設置--開發者選項--指針位置

drive.swipe(x,y,滑動後的x,滑動後的y)

*appium只能定位到模擬器當前頁面的元素,有些頁面比較長,就需要先進行滑動操作,再定位元素。

 

作用域

原生app,混合型app(原生+網頁)

 

切換webview並識別H5

 

1. 背景

對於某些混合型app大多采用原生+H5的方式進行驅動,在做appium測試性此類app需要注意原生app和H5的context切換工作,如appium官方文檔:

地址: http://appium.io/docs/cn/advanced-concepts/hybrid/

 

2. 如何正常切換Webview和原生app的context

 

1. 開啓app webview的debug模式 (https://developer.chrome.com/devtools/docs/remote-debugging#configure-webview)

2. 查看安卓端 Android System WebViewapp的版本號,並使用對應版本的chromdriver驅動它。

版本對應表:https://npm.taobao.org/mirrors/chromedriver

進入淘寶chromdriver源的某個具體版本,然後查看notes.txt

查看安卓端webview的版本號

 

 

3. 啓動appium時添加參數

--chromedriver-executable /path/to/my/chromedrive

 

4. 在代碼中切換到H5(記得切換回來)

# switch to webview
webview = driver.contexts[-1]
driver.switch_to.context(webview)

# do some webby stuff
driver.find_element(:css, ".green_button").click

# switch back to native view
driver.switch_to.context(driver.contexts.first)

# do more native testing if we want
driver.quit()
```

 

PS: 我注意到某些國產ROM死活都切換不過來

比如vivo oppo。遇到這種問題不用糾結了,換手機吧。

 

adb的使用

安卓app的調試工具。

前提:appium配置環境都打開

常用命令:

adb devices 檢查手機是否連上電腦

adb kill-server 關閉adb服務

adb  start-server 開啓adb服務

adb install 軟件安裝包直接拖進來 安裝app,apk格式

 

adb pull 複製的文件路徑 電腦路徑  #從手機上覆制文件到電腦

adb push 複製的文件路徑 要移動的路徑/命名  #把文件複製到手機

*用adb shell找到手機文件的路徑

 

*日誌(面試重點)

adb logcat > aa.txt 後面保存爲文件不需要的話可以不寫

如何定位app崩潰原因:1.看狀態碼

2.看日誌:查找exception,裏面有很at的地方,通常就有報錯原因。

 

jmeter環境配置及入門

 

開源接口/性能測試工具

 

啓動jmeter的兩種方式

 

環境搭建

1、配置JDK1.8環境變量

鏈接:https://www.jianshu.com/p/47c14a9a2003

 

2、解壓Jmeter的到目錄

C:\DevTools\apache-jmeter-3.1

 

3、新增系統變量

變量名:JMETER_HOME

變量值:C:\DevTools\apache-jmeter-3.1

 

4、添加或新增變量

變量名:CLASSPATH

變量值:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;

 

5、在path變量上追加變量值

%JMETER_HOME%\bin;

 

6、配置完成後輸入在cmd中測試

jmeter -v

 

jmeter-v

7、jmeter 命令行:

非GUI命令:jmeter -n -t xxx.jmx -l xxx.jtl

GUI命令:jmeter(打開後,運行jmeter的時候不能關)

 

直接運行

1、配置JDK1.8環境變量

鏈接:https://www.jianshu.com/p/47c14a9a2003

 

2、解壓Jmeter的到目錄

C:\DevTools\apache-jmeter-3.1

 

3.找到bin目錄下的jmeter.bat批處理文件,雙擊運行

 

jmeter基本使用流程

1.修改語言:options--choose laguage

2.保存腳本

3.測試計劃取個名稱,右鍵添加線程組(相當於測試用例)--右鍵線程組添加查看結果樹和http請求(body data裏添加字典參數)--右鍵http請求---上級,可以添加請求頭等信息(不用加上雙引號)。--保存--運行(紅色失敗,綠色通過)

4.亂碼:後置處理器 -pre.setDataEncoding('utf-8')

5.斷言:右鍵http請求--添加響應斷言,模式匹配規則裏選第一個包括,再點擊添加,複製響應數據裏要判斷的內容,比如“status:200”(最好不要自己寫,就用複製粘貼)

6.集合點(模擬真實的用戶場景,使請求的併發可控:一批一批發送請求),併發(服務器同時接到的請求數)

線程組--number of threads(線程數)

同步定時器:右鍵線程組--添加定時器--synchronizing Timer--改名爲(登錄)集合點--grouping裏,第一個參數設置每次運行多少個用戶,第二個設置超時時間(單位毫秒)

*線程數設置多少,一般集合點就設置多少(線程數不多的情況下)

 

*一個http請求對應一個測試用例查看結果樹和http請求同級,對整個線程組有效。

*輸入的時候最好用自帶的輸入法,搜狗輸入法容易崩潰

 

參數化

比如你輸入賬號和密碼,線程數設成10,同樣的賬號密碼登錄10遍,顯然不合理,可以用參數化解決 ->用戶參數唯一限制。

 

參數化的作用

每個線程數(用戶)有獨立的賬號。

 

參數化步驟

 

(以註冊爲例):

 

1.準備參數化數據文件

1.新建txt文件

2.輸入十組數據

賬號,密碼

賬號,密碼

賬號,密碼

……

3.把數據文件和jmeter的jmx腳本文件放在同一個文件夾(保持同級關係)

 

2.引用csv數據文件設置

右鍵線程組,添加配置元件csv數據文件設置

文件名:./文件名(使用瀏覽添加絕對路徑也行,但是移動文件夾就要重新設置,相對路徑移動文件夾的話則不需要更改。)

 

3.設置變量名:username,password

在HTTP請求的body data中替換: {"username":"${username}","password":"${password}"}

 

關聯

前面接口的返回值,用於後面請求的參數。比如登錄成功之後,需要把token值作爲後面發表文章等功能的請求使用。

 

正則表達式提取器提取token:

右鍵http請求--添加後置處理器--正則表達式提取器

正則表達式:  “token”:“(.*?)”     #“(.*?)”是萬能匹配符,不管是什麼字符都行。

引用名稱:tt

模板:$1$

匹配數字:1

 

更改登錄用例的http信息頭管理器:

token   ${tt}

添加cookie:

右鍵線程組--添加配置元件HTTP Cookie管理器。

 

事務

作用:收集性能指標用於性能測試。可以是單個步驟,也可以是多個步驟。

右鍵線程組--添加邏輯控制器中的事務控制器--然後把該線程組中的所有http請求都拉到事務中。

再次運行的時候,就會出現一個事務控制器值。事務控制器的狀態:一錯就錯,全對才通過。

 

全局變量

把很多共同用到的變量進行公共抽取。比如協議,端口號,ip地址等。

右鍵線程組--添加配置元件--用戶自定義變量。然後把相同的變量添加進去,比如ip:xxxxx。

其他地方要填ip的時候,寫${ip}引用就行。

 

爲什麼要這樣做?

下次換測試環境的時候,只要更改全局變量就可以了。

 

運行順序和作用域

 

從上往下運行,所以用例注意順序。

每次創建的http請求,結果樹等,都只對他的父級裏的所有用例有效。

 

腳本錄製(生成)方法

 

手寫(推薦)

 

*jmeter測網頁,一般用badboy代理錄製。

點擊紅色圓圈開始錄製,填入網站地址,然後再badboy裏操作網頁--操作完點擊停止--點擊file裏的export to jmeter--保存jmx文件。

打開jmeter--文件--打開

 

缺陷:可能會錄製重複的步驟,參數化和關聯不會自動加上。

 

loadrunner安裝及入門

 

win10安裝loadrunner

 

一、下載loadrunner安裝包和QA

QA作用:繞過win10 UAC權限確認,方便loadrunner安裝

 

二、安裝安裝QA權限工具

解壓並運行QA權限工具

 

image.png

 

三、安裝

1. 解壓loadrunner.rar

2. 安裝loadrunner

進入:loadrunner[性能測試工具LR11.00].loadrunner-11文件夾下,右鍵選擇 使用管理員權限運行(QA)運行 setup.exe

 

image.png

 

如果沒有報錯,則無腦下一步就可以完成安裝了

 

如果有權限確認,就選擇允許訪問

 

image.png

 

 

3. 如果出現vsc++ 2005錯誤

 

image.png

 

解決問題鏈接:https://jingyan.baidu.com/article/2f9b480dea9f4b41cb6cc298.html

 

  1. 我們進入loadrunner安裝目錄,並找到lrunner文件,然後點擊打開lrunner文件

image.png

2

2.進入lrunner文件之後,我們找到目錄下的En文件,然後點擊打開En文件

image.png

3

3.進入En文件之後,我們再找到prerequisites文件並且點擊打開。

image.png

4

4.進入prerequisites文件之後,我們找到vc2005_sp1_redist文件,然後點擊打開

image.png

5

5.進入vc2005_sp1_redist文件之後,我們點擊vcredist_x86文件,然後彈出框點擊yes按鈕即可

image.png

6

6.最後我們退出安裝,重新點擊loadrunner進行安裝即可。

image.png

 

再次使用QA權限運行setup.exe就行了

 

四、破解

1. 安裝完成後,LR會自動打開,不管他,直接關掉

2. 替換lm70.dll和mlr5lprg.dll文件

 

將破解文件夾下的lm70.dll和mlr5lprg.dll放到LR的bin目錄下,替換掉原有的問題。

如果默認錄路徑是:C:\Program Files (x86)\HP\LoadRunner\bin

 

3. 刪掉LR註冊碼

運行破解文件夾下的deletelicense文件

image.png

選擇 是:

image.png

 

 

結果是failed不影響

 

image.png

 

4. QA權限運行Loadrunner

搜索loadrunner啓動文件的位置

image.png

 

 

再QA權限運行啓動文件,在configration菜單中選擇loadrunner license

image.png

點擊new license

 

輸入支持6.5w併發的超級license:

AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB

 

點擊ok

 

 

image.png

 

最後點擊close,安裝和破解LR工作就完成了

 

loadrunner入門

 

loadrunner:商業版的性能測試工具,根據線程數收費

(QA破解,用的是羣裏的老版,新版不好破解)

基於c語言開發。

寫代碼之前先保存,容易崩。

 

三個組件

1.vuser(create/edit script) 腳本編輯器,(支持錄製,但是需要ie8,基本不用,還是使用控件編寫腳本)

2.controller(run load tests) 運行負載

3.analysis(analyze test result) 分析器

 

運行

找到loadrunner啓動器,以管理員模式運行。

新建腳本:點擊create/edit script--new scripts圖標--選擇http協議--create--出現錄製框--點擊取消--點擊工具欄裏的script圖標--出現腳本編輯窗口。

 

註釋://或者new step

body裏面的字符串參數的引號,前面要加上轉移的反斜槓。

 

性能測試理論基礎

 

服務器

軟件和硬件的整體。

硬件(物理元件):

cpu(最重要):

判斷cpu好不好的兩個主要指標:

1.主頻(速度):越大越好

2.核心數:越多越好

cpu使用率:服務器硬件的繁忙程度

內存:越大越好,讀寫速度快

IO:硬盤,越快越好(ssd固態硬盤比hhd機械硬盤快很多)

帶寬:下載速度一般是1/10帶寬,越大越好

 

 

web容器(應用服務器):

1.tomcat (java)

2.weblogic

3.apache

4.php

5.iis(微軟)

作用:開發的代碼必須通過應用服務器進行部署,供用戶訪問

 

網關服務器:

平均分發請求

常用的網關:nginx(可支持百萬級併發)

代理:

反向代理:不用關心過程(一般情況都使用反向代理)

正向代理:過程透明

緩存:

數據庫最終是存放在硬盤中的,硬盤的讀取速度慢。

優化:使用redis把數據庫中的數據緩存在內存中,讀取不到再去數據庫找。

內存:讀取速度快,斷電數據丟失(所以服務器數據存在硬盤中)

硬盤:讀取速度慢,斷電數據保存

 

性能測試

定義:通過各種工具模擬多用戶併發訪問服務器,來測試服務器的性能

基於這個性能的黑客攻擊:洪水攻擊

分類:

壓力測試:超出峯值的情況下的系統表現(大併發)

負載測試:逐步增加壓力來試探服務器的性能

強度測試:長時間在峯值情況下運行,看能持續多久

併發測試:同時發送用戶請求,強調功能性測試

(訂單/獎品超發,庫存和實際賣出不匹配)

目的:

性能拐點:服務器在什麼情況下性能跑得最快

最大容量:服務器在多少併發時能夠hold住

驗證問題:使用方法還原bug場景,解決bug

 

判斷性能拐點和最大容量

 

(軟件方面):

通過性能指標判斷:

1.響應時間:平均響應,90%line(有90%的請求在x秒內完成)

258原則:2秒內很快,2-5還行,5-8等一等可以加載出來,8秒以後,很爛。

2.tps

每秒事務數,服務器每秒返回的請求數

可以通過tps找性能拐點:隨着併發用戶數的增加,tps出現峯值

 

 

3.事務失敗率

失敗事務數/事務總數

一般來說是<5%

 

(硬件方面):

1.cpu使用率:長時間不能100%,持續小於85%

2.內存使用率:不同操作系統,內存調動機制不同。

linux/mac os機制:先把內存佔滿,再分配

Windows:要用的時候再分配內存

*所以linux直接看cpu使用率,要看單個進程(比如看tomcat,要看java程序,linux命令top可以看進程的佔用內存情況)

內存泄漏(通常是java出現的問題,即tomcat要考慮的問題):

tomcat一直把內存佔着,越來越大,沒有釋放內存資源--發生內存泄漏。

判斷內存是否足夠:看虛擬內存是否足夠,看IO使用率是否非常大。

 

性能測試開展步驟

1.需求分析:

對業務模型(多場景)有深入瞭解,瞭解用戶使用場景:單場景(單個測試用例)、多場景(集合多個測試用例)

2.設計場景:

先考慮單場景的情況,然後組合在一起,考慮多/混合場景的情況。

3.編寫腳本:

jmeter

loadrunner

接口和網頁:app項目直接用接口,web項目要考慮靜態資源:

1.靜態資源(網頁、圖片、視頻):

靜態資源不佔cpu,即不需要進行計算,靜態資源一般和帶寬有關。所以不考慮帶寬的話,一般不考慮靜態資源。

2.服務器接口

4.執行測試:

loadrunner

jmeter(在cmd裏輸入jmeter,會出現提示:不要使用GUI模式做負載測試)

jmeter -n -t [jmx file] -l [result file] -e -o [Path to web report folder]

 

5,監控指標:

軟件用工具監控

硬件:windows:任務管理器裏有自帶的性能資源監視器

linux :系統自帶的top命令,nmod,zabbix(後兩個有權限的話可以試試),jmeter監控linux,loadrunner監控linux。

 

6.生成測試報告,分析結果

常見分析方法(控制變量法):

1.性能拐點

2.服務是否崩潰:事務失敗率,http狀態碼出現大量500+

3.最大容量:cpu使用率上限,響應時間,失敗率(缺一不可)

4.內存泄漏:看jvm/java內存泄漏--查看java進程的內存大小,對比每一次的數據。在性能測試結束後,觀察內存是否被釋放。

 

pytest入門

 

安裝

pip命令安裝pytest:pip install -U pytest

檢查是否安裝成功:pytest --version

 

新建一個文件夾,不要叫pytest,會和原有的文件夾衝突。

 

文件命名:

1.py文件命名:test_XXX.py

2.方法命名:test_01_xxx.py(必須)

加上test可以自動識別文件。

 

pytest+requests

 

1.導入:import pytest

import requests

2.構造請求:

res = requests.post(url=,json=)

3,判斷http狀態碼

assert res.status_code == 200 #第一次判斷運行是否通過(服務器是否可用),可能功能不對,但是運行沒問題。

assert res.json()["status"] == 200 #判斷接口功能是否正常

print(res.text)

4.運行

不用py命令運行,用pytest運行。

新建終端:終端--新建終端

輸入pytest運行。

 

*unitest要手動查找文件,pytest如果不寫路徑的話,自動查找test開頭的文件。

 

pytest+selenium

1打開瀏覽器,實例化瀏覽器,獲得實例化句柄

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名"。#用斷言判斷

 

8.運行

新建終端:終端--新建終端

輸入pytest運行。

*直接就打開瀏覽器了

運行結果分析:

collected 3 items #執行了三個測試用例

test_demo1.py ..  #兩個測試用例成功

test_demo2.py .   #一個測試用例成功

*unitest裏報錯是e,運行失敗是F,pytest都是F

 

生成測試報告(allure)

 

1.裝好allure插件。

下載並解壓allure-commandline--配置環境變量:bin目錄添加到path變量中(上下都添加)--cmd裏輸入allure驗證。--安裝allure-pytest插件:管理員身份運行cmd,pip3 install allure pytest -i

2.執行測試腳本並生成測試報告

運行代碼改成 pytest ./ --alluredir=result

生成了result文件夾

3.把測試結果編譯成網頁測試報告

終端輸入命令 allure generate result -o report --clean

生成report文件夾,裏面有個html報告。

4.打開測試報告

終端輸入allure open -h127.0.0.1 -p 10886 report

 

monkey和monkeyrunner

 

monkey

安卓app的壓力測試工具

 

作用:通過對安卓app輸入大量的隨機事件(點擊/滑動/按鍵)來檢測app是否存在崩潰、閃退和無響應等問題。

定位bug:

adb logcat看bug描述:

at XXX at xxx ..

ANR  #無響應問題

存在位置:

/system/framework/monkey.jar

應用場景:

兼容性測試:安卓手機不同的版本和華爲、oppo、小米等多種操作系統上測試。

使用:

1.首先安卓手機連上電腦。

2.adb shell monkey -p 軟件包名 運行次數

 

monkeyrunner

安卓app自動化測試工具

 

使用環境:java的python開發的,jpython,所有腳本要用java來實現。

運行方式:直接在shell執行,或者py文件運行。

 

官網例子:

 

 

# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()

# Installs the Android package. Notice that this method returns a boolean, so you can test
# to see if the installation worked.
device.installPackage('myproject/bin/MyApplication.apk')

# sets a variable with the package's internal name
package = 'com.example.android.myapplication'

# sets a variable with the name of an Activity in the package
activity = 'com.example.android.myapplication.MainActivity'

# sets the name of the component to start
runComponent = package + '/' + activity

# Runs the component
device.startActivity(component=runComponent)

# Presses the Menu button
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)

# Takes a screenshot
result = device.takeSnapshot()

# Writes the screenshot to a file
result.writeToFile('myproject/shot1.png','png')

 

flask入門

 

python的web開發框架:flask,django

 

1.安裝:pip install flask

2.導入:from flask import Flask

3.app = Flask(__name__)

4.#定義路由(接口地址),用裝飾器

@app.route("/")  #根目錄,只要輸入ip和端口就行了,根目錄一般不要出寫。
def index():
return render_template("index.html") #讀取網站首頁
@app.route("/login")
def login():
return render_template("login.html") #讀取登陸頁面
if __name__ == "__main__"
app.run(debug=True) #加上debug這個參數,每次修改都會自動運行代碼。否則需要手動重新運行。

 

5.終端運行。

*不需要配置服務器,flask自帶一個WSGI服務器。本地環境http://127.0.0.1:5000/,ctrl+單擊打開網站,就可以訪問我們前面第四步寫的網站。(終端運行的時候有寫)

 

放入網站:

新建文件夾,名字必須叫”templates“,放html文件。

創建文件夾”static“,放靜態資源:css、文件、圖片等。*記得改鏈接

 

 

 

學習路線補充

app埋點測試

 

1.自動化測試路線

python基礎

自動化工具:selenium,appium,monkeyrunner,requests,robotframework……

然後瞭解原理,仿造自動化工具,實現一套自己的工具。

2.性能測試

初級性能測試:熟練使用工具,掌握常用的分析方法,會用工具分析出系統的瓶頸。

中級性能測試:對系統的熟練程度高,熟悉各個組件,能夠分析問題原因

高級性能測試:對系統的各個組件瞭如指掌,給出具體的調優方案。

 

深入瞭解:應用服務器,網關,緩存,前端,數據庫(瞭解哪種查詢語句快)

開發知識:java,企業的java開發框架,運維

管理方向:流程管理,QA

如果對軟件測試有興趣,想了解更多的測試知識,解決測試問題,以及入門指導,幫你解決測試中遇到的困惑,我們這裏有技術高手。如果你正在找工作或者剛剛學校出來,又或者已經工作但是經常覺得難點很多,覺得自己測試方面學的不夠精想要繼續學習的,想轉行怕學不會的, 都可以加入我們1079636098,羣內可領取最新軟件測試大廠面試資料和Python自動化、接口、框架搭建學習資料!

每一個成功的人,在前進的路上都會收到很多的鼓勵,也會願意鼓勵他人,我深深感受到鼓勵帶給我的幫助,你們的每一次點贊,就是對我最大的支持,讓我一直堅持的做出更好的內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章