框架介紹
1、HttpRunner
是一款面向 HTTP(S) 協議的通用測試框架,只需編寫維護一份YAML/JSON腳本,即可實現自動化測試、性能測試、線上監控、持續集成等多種測試需求。
2、Locust
Locust是一款易於使用的分布式用戶負載測試工具。它用於對網站(或其他系統)進行負載測試,並確定系統可以處理多少並發用戶。HttpRunner 通過復用Locust ,可以在無需對 YAML/JSON 進行任何修改的情況下,直接運行性能測試。
3、 httprunner使用手冊
附httprunner中文使用文檔地址:https://cn.httprunner.org/
環境安裝
1、安裝httprunner: pip install httprunner==2.2.5
2、安裝har2case: pip install har2case
3、檢查安裝是否成功:hrun -h/-v;har2case -h/-v
4、安裝locust: pip install locustio
新增命令
在 HttpRunner 安裝成功后,系統中會新增如下 5 個命令:
1、httprunner: 核心命令
2、hrun: httprunner 的縮寫,功能與 httprunner 完全相同
3、locusts: 基於 Locust 實現性能測試
4、har2case: 輔助工具,可將標准通用的 HAR 格式(HTTP Archive)轉換為YAML/JSON格式的測試用例
用例生成
(1)利用fiddler/charles對接口數據進行抓包,將結果導出為XX.har文件
(2)將導出的XX.har文件轉化為json文件/yaml文件
轉化為json文件:har2case xx.har
轉化為yaml文件:har2case xx.har -2y/--to-yml
(3) 轉化成功后的yaml文件如下:
status_code: 請求的狀態碼
headers.Content-Type: 將響應頭的內容格式做驗證
content.msg: 響應內容的關鍵字作為驗證
config: 作為整個測試用例集的全局配置項,包括變量(variables,name)
test: 對應單個測試用例
name 這個test的名字(用例的名稱)
request 這個test具體發送http請求的各種信息, 如下:
url 請求的路徑 (若config中有定義base_url, 則完整路徑是用 base_url + url )
method 請求方法 POST, GET等等
headers:請求頭
請求體: json格式的數據
validate(斷言): 完成請求后, 所要進行的驗證內容. 所有驗證內容均通過該test才算通過,否則失敗.
參數化:
testcases:
-
name: call demo_testcase with data 1
testcase: testcases/test_login.yml
parameters:
# username: ["admin1","admin"]
-username:
- ["admin1"]
- ["admin"]
測試用例(testcase)嵌套testcases
測試用例集是測試用例的無序集合,集合中的測試用例應該都是相互獨立,不存在先后依賴關系的。
如果確實存在先后依賴關系怎么辦,例如登錄功能和下單功能。正確的做法應該是,在下單測試用例的前置步驟中執行登錄操作。
- config:
name:order product
- test:
name:login
testcase:testcases/login.yml
- test:
name:add to cart
api:api/add_cart.yml
- test:
name:make order
api:api/make_order.yml
變量取值:
在測試用例內部,HttpRunner划分了兩層變量空間作用域context。
- config:作為整個測試用例的全局配置項,作用域為整個測試用例;
- test:測試步驟的變量空間context會繼承或覆蓋config中的定義的內容;
若某變量在config中定義了,在某test中沒有定義,則該test會繼承該變量
若某變量在config中和某test中都定義了,則該test中使用自己定義的變量值
- 各個測試步驟test的變量空間相互獨立,互不影響;
- 如需在多個測試步驟test中傳遞參數值,則需要使用extract關鍵字,並且只能從前往后傳遞
響應頭和響應體的提取:
//response headers: { “Content - Type”:"application/json", “Content - Length”:69 } //response body: { “success”:false, “person”:{ "name":{ “first_name”:"cs", “last_name”:"css", }, “age”:29, “cities”:["Guangzhou","Shenzhen"] } }
那么對應的字段提取方式就為:
“headers.content-type”=>"application/json"
“headers.content-length”=>69
“body.success"/"content.success"/"text.success=>false
"content.person.name.first_name"=>"cs"
"content.person.age"=>29
"content.person.cities"=>["Guangzhou","Shenzhen"]
"content.person.cities.0"=>"Guangzhou"
"content.person.cities.1"=>"Shenzhen"
可以看出,通過點( . )運算符,我們可以從上往下逐級定位到具體的字段:
- 當下一級為字典時,通過.key來指定下一級的節點,例如.person,指定了content下的person節點;
- 當下一級為列表時,通過.index來指定下一級的節點,例如.0,指定了cities下的第一個元素。
提取HTML的內容(正則表達式)
上傳文件場景
生成項目文檔
1、進入D盤
2、輸入命令:hrun --startproject 項目名稱
testcases:存放用例
testsuites:存放套件
reports:自動生成報告並放到該目錄
3、 進入到目錄,查看對應的文件和目錄
可以看到生成的3個目錄和一個py文件,api debugtalk.py testcases suite
4、將轉化好的XX.har文件放置在項目文件夾testcases目錄中
5、運行用例
(1) 運行單個用例:指定具體的xx.yml或xx.json文件
hrun 文件路徑/hrun 文件路徑 --log-level info
(2) 運行多個用例:hrun 文件的testcases目錄
(3) 運行testsuites目錄:運行testsuites目錄中所有的yml用例
參數化:多個參數三種類型參數化
查看報告
在項目文件夾report中,生成了html格式的測試報告,包括log日志記錄(包含request and response data)
注意事項:
(1) 對於依賴性強的測試用例,當前測試用例執行失敗后,之后用例都將失敗,因此無執行必要,遇到失敗時不再繼續運行后續用例命令
如下:
$ hrun filepath/testcase.yml --failfast
(2) 運行日志中查看更詳細的響應內容
$ hrun docs/data/demo-quickstart-6.json --log-level debug
hrun xx.yaml --log-level debug
(3) 將運行過程中的中間數據作為日志保存:hrun xx.yaml --log-file xx.log
在這里插入圖片描述
接口的性能測試—locusts
1、執行性能測試用例:locusts -f 文件路徑(相對路徑) --processes
(在 Locust 中需使用多核處理器的能力,–processes 參數,可以一次性啟動 1 個 master 和多個 salve。若在 --processes 參數后沒有指定具體的數值,則啟動的 slave 個數與機器的 CPU 核數相同。)
2、用例運行完成后,在瀏覽器中輸入地址 http://localhost:8089/,可查看到locust頁面
- Number of total users to simulate:並發用戶數
- Hatch rate (users spawned/second):多少秒啟動這些並發
- Host:接口的主機地址
locustos在執行請求動作
3、查看性能測試報告:
(1)每秒完成的請求數(RPS:Requests Per Second)
(2)響應時間(Response Times),單位ms
(3)不同時間的虛擬用戶數:穩定值(一定時間后)
(4)查看cpu並發壓力:類似負載均衡–CPU usage(cpu的使用率)
(5)參數說明
host:http://10.0.10.27:10080
請求路徑(name):/api/login
(6)腳本執行結果
從測試結果可以看出,實際上每秒並沒有觸發10個請求(RPS值不到10),因為在locustfile.py文件里面有個等待機制
min_wait = 1000 最小等待時間1秒
max_wait = 5000 最大等待時間5秒
把max_wait改成1000就可以達到 10 RPS了
locustfile.py
當啟動locusts的時候,會在當前目錄自動生成一個locustfile.py文件。這個才是locust的腳本文件
使用locust執行locustfile.py腳本文件
locust -f locustfile.py
測試結果 RPS=9.9 接近10