自從學了這套框架,自動化+性能都搞定了
框架介紹
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
??交流學習
最后,為大家奉上我整理的一份包含測驗開發入門,基礎到進階自動化的全部系列知識點PDF,還有測驗開發學習筆記、面試真題匯總檔案、測驗求職精選簡歷的學習資源包,希望對大家有所幫助…… 關注微信公眾號【程式員一凡】,獲取更多資訊~也可加我好友,大家一起學習交流??,
??推薦閱讀:
??軟體測驗人員必讀的經典書籍(附電子書),前阿里大佬給我推薦...
??一文了解MySQL性能測驗及調優中的死鎖處理方法,你還看不明白?
??阿里大牛純手碼數十萬字,自動化測驗成神之路電子版教程已問世,開放下載
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325298.html
標籤:其他
