[JPT_05] 效能測試-指令碼開發(登入&隨機購買業務)
目錄結構
一、使用者登入指令碼開發
1.用Badboy錄製登入指令碼
2.匯出指令碼新增到JMeter中
3.優化指令碼:設定對登入使用者名稱進行引數化,呼叫csv讀取登入資料
4.新增定時器(控制登入步驟的等待時間)
5.設定響應斷言,判斷登入是否成功
6.執行1個執行緒1次迴圈,檢驗指令碼執行效果
二、隨機購買商品指令碼開發
1.用Badboy錄製商品購買業務的指令碼
2.匯入指令碼到JMeter中,設定對登入使用者名稱進行引數化
3.利用Fiddler抓包獲取新增商品到購物車的請求資料,補充新增到JMeter
4.利用Regex Tester正規表示式測試器,檢驗獲取隨機商品id的正規表示式效果
5.配置JMeter中的正規表示式提取器,設定goods_id為隨機變數
6.新增定時器
7.設定響應斷言,判斷是否購買成功
8.新增檢視結果樹、聚合報告,統計指令碼執行的資料
9.執行檢驗指令碼執行效果
本次ECShop測試站點:http://localhost/ecshop36/ecshop/
一、使用者登入指令碼開發
測試要點:
1.利用BadBoy錄製使用者登入ECShop站點的過程,生成JMeter指令碼
2.在JMeter中對登入使用者名稱進行引數化。為模擬不同使用者登入,更符合實際業務場景,因此需要針對使用者名稱進行引數化
具體操作過程如下:
1.用Badboy錄製登入指令碼
2.匯出指令碼新增到JMeter中
3.優化指令碼:設定對登入使用者名稱進行引數化,呼叫csv讀取登入資料
新增 CSV Data Set Config
登入資訊中設定使用者名稱為引數化對應的變數
4.新增定時器(控制登入步驟的等待時間)
指令碼錄製過程中,使用者輸入帳號及密碼,大概需5s左右,其餘操作則不考慮等待時間(可根據具體需求確定),需新增3個計時器:
>> 使用者登入前等待資訊輸入:5s 計時器
>> 登入成功等待返回首頁:3s 計時器
>> 使用者退出等待返回首頁:3s 計時器
以上時間的設定是基於前文 [JPT_03]效能測試-測試模型構建 & 用例設計 中登入業務執行緒數確定時假定的模擬使用者的時間花費而定。
新增 Constant Timer(固定定時器):
5.設定響應斷言,判斷登入是否成功
新增 Response Assertion(響應斷言):
設定斷言內容為:"登入成功"
若Response資料中包含此字串,則代表登入成功
新增View Results Tree(檢視結果數)、Summary Report(聚合報告),用於統計測試指令碼執行過程中的資料表現
6.執行1個執行緒1次迴圈,檢驗指令碼執行效果
以上,本次ECShop站點登入業務的指令碼開發完成
二、隨機購買商品指令碼開發
測試要點:
1.用BadBoy錄製使用者登入、瀏覽商品、加入購物車、設定物流方式、支付方式及收貨資訊提交訂單等過程,生成JMeter指令碼
2.為了實現隨機選擇某種商品,然後進行購買的行為,需在頁面中隨機獲取商品的id。登入成功後,通過分析商品首頁的HTML原始碼,利用JMeter正規表示式提取器實現隨機獲取商品id
3.在實際測試中,可利用Regex Tester正規表示式測試器執行獲取指令碼所需的動態資料,當確定資料獲取正確後,再配置JMeter中的正規表示式提取器
4.引數化:登入使用者名稱、商品隨機瀏覽的id、商品隨機購買新增到購物車的id
具體操作過程:
1.用Badboy錄製商品購買業務的指令碼
2.匯入指令碼到JMeter中,設定對登入使用者名稱進行引數化
3.利用Fiddler抓包獲取新增商品到購物車的請求資料,補充新增到JMeter
分析指令碼請求,發現Badboy並未錄製到將所選商品具體屬性新增到購物車的請求,因此需要手動新增補充才能完整執行指令碼。此時利用Fiddler工具抓包分析,可找出對應請求,包括:Request url、Body Data資料...
Request url:http://.../ecshop/flow.php?step=add_to_cart
POST Data:goods={"quick":1,"spec":[],"goods_id":72,"number":"1","parent":0}
配置項 | 取值設定 | |
---|---|---|
1 | Name | 自定義的名稱,如:新增商品到購物車 |
2 | Server Name or IP | 伺服器域名或IP |
3 | Port Number | 設定伺服器提供服務的埠號,ECShop使用的Apache+PHP模式,常規情況埠號為80 |
4 | Implementation | 客戶端執行語言。與其他請求一樣,選擇Java即可 |
5 | Protocol | HTTP協議 |
6 | Method | Fidller抓包分析,為POST請求 |
7 | Path | 傳送請求的路徑,Fiddler抓包獲取新增購物車請求的路徑:.../ecshop/flow.php?step=add_to_cart
|
8 | Body Data | 利用Fiddler抓包,Body Data:goods={"quick":1,"spec":[],"goods_id":72,"number":"1","parent":0} 設定“goods_id”為隨機引數 |
PS:BadBoy錄製過程中,①若使用的帳號是已經購買過商品的帳號,且收貨資訊已經存在於資料庫中,則錄製不到新新增收貨地址的操作,此時亦可利用Fidller抓包獲取相應請求資料,手動新增到JMeter中;②當然也可以用全新未購買過商品的賬號進行錄製,就不需要單獨去抓取新增收穫地址的操作請求
4.利用Regex Tester正規表示式測試器,檢驗獲取隨機商品id的正規表示式效果
Regex Tester工具下載傳送門:https://www.jb51.net/tools/regex_tester/
利用Regex Tester正規表示式測試器對所設定的正規表示式進行測試驗證效果,源文字是從商品首頁對應的HTML原始碼獲取,執行匹配規則之後,從執行結果可以看出已經匹配獲取到商品的id編號(72,70,69,68,...)
5.配置JMeter中的正規表示式提取器,設定goods_id為隨機變數
2個地方對商品id引數化:根據goods_id進入商品詳細頁;新增對應goods_id的商品到購物車
對登入成功後的商品首頁,右鍵新增正規表示式提取器,以獲取商品的隨機id編號,用於後續步驟中
JMeter中正規表示式提取器的用法:
配置項 | 取值設定 | |
---|---|---|
1 | Name | 便於識別元件,可將名稱改為直觀的文字。如:“獲取商品id編號” |
2 | Name of created variable | 表示JMeter其他元件呼叫該變數時的名稱。此處設定為"goods_id",表示商品id |
3 | Regular Expression | 設定為goods.php\?id=(.*)\"> <div ,注意需對問號? 、雙引號" 進行轉義。(.*) :表示在id= 及"> 之間取任意長度的任意字元
|
4 | Template | 表示取哪個匹配值,本處只有一個,故設定為“$1$” |
5 | Match No. | 表示獲取資料的方式,0代表隨機獲取 |
6 | Default Value | 當沒有獲取到匹配的資料時,可取此處的預設值(id=72,即首頁預設的第一個商品) |
將獲取到的隨機商品id,替換到後續請求中進行引用
6.新增定時器
指令碼錄製過程中,使用者輸入使用者名稱及密碼,需5s左右;使用者登入成功後,系統預設有3s左右的使用者選擇操作時間;使用者選擇某件商品,然後新增到購物車,這個過程可增加計時器5s;編寫收貨資訊5s;填寫快遞資訊及付款方式5s;使用者退出系統時,也存在同樣的選擇時間,大約3s。
>> 使用者登入前等待資訊輸入:5s 計時器
>> 登入成功等待返回首頁:3s 計時器
>> 選擇商品、新增到購物車:5s 計時器
>> 填寫收貨資訊:5s 計時器
>> 填寫物流資訊、支付方式選擇:5s 計時器
>> 使用者退出等待返回首頁:3s 計時器
7.設定響應斷言,判斷是否購買成功
Add-->Assertions-->Response Assertion
Add-->Listener-->Assertion Results
PS: 訂單是否成功,也可在ECShop後臺直接查詢
同時通過Fiddler抓包分析,發現"填寫收貨資訊進行提交"請求存在POST請求的302定向,此時為了確保前後頁面登入資訊的關聯性,需要勾選"Follow Redirects", 或者兩種定向方式都不勾選則預設"Follow Redirects"
8.新增檢視結果樹、聚合報告,統計指令碼執行的資料
新增View Results Tree、Summary Report,便於統計測試指令碼執行過程中的資料表現
9.執行檢驗指令碼執行效果
配置項 | 配置數值 |
---|---|
Thread Group | Number of Thread: 1 |
Step 1 | Loop Count: 1 |
按照1個執行緒迴圈1次進行檢驗效果,已執行成功提交訂單,如下:
在本地資料庫中,也可查詢到剛才在JMeter中執行指令碼獲取到使用者的收穫地址資訊、訂單資訊的記錄,如下:
以上,本次ECShop站點隨機瀏覽購買商品業務的指令碼開發完成
相關文章
- 隨行付微服務測試之效能測試微服務
- iOS17 效能測試指令碼iOS指令碼
- .NetCore 登入(密碼鹽+隨機數)NetCore密碼隨機
- Appium iOS 測試指令碼開發實戰APPiOS指令碼
- [python] request 介面測試自動化指令碼轉化為 [locust] 效能測試指令碼Python指令碼
- 運維指令碼: 實時監測登入運維指令碼
- 搬瓦工 VPS 效能一鍵測試指令碼指令碼
- 如何用 JMeter 編寫效能測試指令碼?JMeter指令碼
- 效能測試——壓測工具locust——指令碼初步編寫指令碼
- 一場為企業服務開發的效能測試報告測試報告
- 測試開發之自動化篇-Appium指令碼開發APP指令碼
- 想要購買效能測試工具,如何計算自己需要多少併發使用者?
- 測試開發之效能篇-效能測試設計
- Shell指令碼 | 效能測試之啟動時間指令碼
- 理解 Linux/Unix 登入指令碼Linux指令碼
- InDesign外掛--常規功能開發--隨機填充--js指令碼開發--ID外掛隨機JS指令碼
- 一個註解搞定登入註冊、實名認證及購買vip等業務流程
- 登入測試點
- 測試開發之效能篇-JMeter介面測試JMeter
- JMeter做效能測試(1)-效能壓測指令碼的生成以及完善和增強JMeter指令碼
- PYTHON測試指令碼Python指令碼
- 整車電效能裝置開發及測試服務
- 微服務測試之效能測試微服務
- 活動 | 美團買菜業務,首次開放專項測試!
- java視窗登入介面實現隨機驗證碼Java隨機
- 開發?測試?新人入IT行業如何選擇?行業
- 案例四:Shell指令碼生成隨機密碼指令碼隨機密碼
- 阿里雲伺服器購買及SSH免密登入阿里伺服器
- 理解 Linux/Unix 登入指令碼的技巧Linux指令碼
- vultr購買主機前的測速地址
- 軟體測試之登入測試詳解
- 六,業務功能:登入
- Jmeter效能測試:高併發分散式效能測試JMeter分散式
- Python_服務端效能高併發測試Python服務端
- 發現深層次的bug——業務測試 1、業務測試簡介
- 濤思資料 TDengine 徵稿— 利用python指令碼做TDengine效能測試Python指令碼
- 效能測試必知必會:Shell指令碼設計實踐指南指令碼
- web自動化測試框架-02 快速開發用例文件指令碼Web框架指令碼