[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錄製登入指令碼
![4866277-bf94779b72762306.png](https://i.iter01.com/images/8ab0c8963748dd67f2dde5ee310af50f4482a36f2d3ef8b24136384d15101080.png)
2.匯出指令碼新增到JMeter中
![4866277-294602d9e655d57c.png](https://i.iter01.com/images/d0e986626ff44a201140ebfbca27245f547be69d02f6979b7290862a075831c7.png)
![4866277-6f1f0db03125a26b.png](https://i.iter01.com/images/286f7063bba97d82da231520c70072490eca4c3ca6ff01680320c41af5ac1aa7.png)
![4866277-94cac8ecbdd85c88.png](https://i.iter01.com/images/6b736e916b629efdb00a4bcf7cb565f3bdeb06248c4f7b690095a183bd9e9b7f.png)
3.優化指令碼:設定對登入使用者名稱進行引數化,呼叫csv讀取登入資料
新增 CSV Data Set Config
![4866277-00fc7d5ec1aeaa91.png](https://i.iter01.com/images/cb4af86793c5a78295dc1e4ec6bd2be08a71b682b0c5892b7c1e0c5b9f81cde0.png)
![4866277-2fa35896e29b6637.png](https://i.iter01.com/images/d704c24574bb7682ab0e84164229f92f2a9d98e795419b7babf393fb9aa21afd.png)
登入資訊中設定使用者名稱為引數化對應的變數
![4866277-d835d2042abeb001.png](https://i.iter01.com/images/cbf96e0daa6922f6b9bf2c3cff28921ab626d25f799ee09ed63bc08b863a1065.png)
4.新增定時器(控制登入步驟的等待時間)
指令碼錄製過程中,使用者輸入帳號及密碼,大概需5s左右,其餘操作則不考慮等待時間(可根據具體需求確定),需新增3個計時器:
>> 使用者登入前等待資訊輸入:5s 計時器
>> 登入成功等待返回首頁:3s 計時器
>> 使用者退出等待返回首頁:3s 計時器
以上時間的設定是基於前文 [JPT_03]效能測試-測試模型構建 & 用例設計 中登入業務執行緒數確定時假定的模擬使用者的時間花費而定。
新增 Constant Timer(固定定時器):
![4866277-9aea5ee78073ab94.png](https://i.iter01.com/images/44041cb04d7b6db97b508192c072e0e4d739bace411c4c1bbca90577cbb69237.png)
![4866277-cdb0879c0b60297a.png](https://i.iter01.com/images/99c60c6c130780069407a58e2aedd80218901d0555b10051c78901b62c883776.png)
5.設定響應斷言,判斷登入是否成功
新增 Response Assertion(響應斷言):
![4866277-165488e752c555e6.png](https://i.iter01.com/images/aed9a75d19fcbc5f154ebbfd51d4a103719976796892a1cf29e935594b24c41d.png)
設定斷言內容為:"登入成功"
若Response資料中包含此字串,則代表登入成功
![4866277-9f914752b6d1f9f2.png](https://i.iter01.com/images/a912791fa5c817033c738eea1fdd9ca270e55e7d9267bdf90ce291d2494ccd10.png)
新增View Results Tree(檢視結果數)、Summary Report(聚合報告),用於統計測試指令碼執行過程中的資料表現
![4866277-e4b688fca0d72016.png](https://i.iter01.com/images/847be72eeba19430e18cbe1aca8eeef457263be2c615d112f68eb130300398c6.png)
6.執行1個執行緒1次迴圈,檢驗指令碼執行效果
![4866277-b543bb5d051d20f5.png](https://i.iter01.com/images/606d4c872b21f6bff9ba5ce7564e4a793621571324d2bbbd5308932c625922fc.png)
![4866277-cb87a4d7d244148e.png](https://i.iter01.com/images/7b34936ed1eb53d02ccb4756ff8e1531844b01d84cf5be10129223654ccbbfbf.png)
以上,本次ECShop站點登入業務的指令碼開發完成
二、隨機購買商品指令碼開發
測試要點:
1.用BadBoy錄製使用者登入、瀏覽商品、加入購物車、設定物流方式、支付方式及收貨資訊提交訂單等過程,生成JMeter指令碼
2.為了實現隨機選擇某種商品,然後進行購買的行為,需在頁面中隨機獲取商品的id。登入成功後,通過分析商品首頁的HTML原始碼,利用JMeter正規表示式提取器實現隨機獲取商品id
3.在實際測試中,可利用Regex Tester正規表示式測試器執行獲取指令碼所需的動態資料,當確定資料獲取正確後,再配置JMeter中的正規表示式提取器
4.引數化:登入使用者名稱、商品隨機瀏覽的id、商品隨機購買新增到購物車的id
具體操作過程:
1.用Badboy錄製商品購買業務的指令碼
![4866277-13e0a96dbba39ae1.png](https://i.iter01.com/images/1375fe90df23f90ba273ba85df3705eb88561c31c38589af95b7c04d29f71b88.png)
2.匯入指令碼到JMeter中,設定對登入使用者名稱進行引數化
![4866277-92e24e0b814bdbaf.png](https://i.iter01.com/images/0a1a8fb877b3ccd3ec85cc4a0e12a1ddc5350dc1f305c84554eb133f00fad207.png)
![4866277-2c2189a624487804.png](https://i.iter01.com/images/2d6f6733d67c52ee5dbf34a2d2295305a9aa2410a68d1d986227c1c7a2bfedd5.png)
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}
![4866277-10f2977e440d1898.png](https://i.iter01.com/images/a5d4cea79f14361d5acf06afa1ea0d0c2af7a71c6d50556412e640c1934b7106.png)
![4866277-962834efa3c2fc48.png](https://i.iter01.com/images/c8510e99f3a91d69a444fc58aa367f11bee247aae447fb8d925972eb790f74c6.png)
配置項 | 取值設定 | |
---|---|---|
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/
![4866277-79d5234198568d3b.png](https://i.iter01.com/images/b418eee90a4ca27bdcd12ea29cc06fbecb48449c862cb93e88eb3737386aa2dc.png)
利用Regex Tester正規表示式測試器對所設定的正規表示式進行測試驗證效果,源文字是從商品首頁對應的HTML原始碼獲取,執行匹配規則之後,從執行結果可以看出已經匹配獲取到商品的id編號(72,70,69,68,...)
5.配置JMeter中的正規表示式提取器,設定goods_id為隨機變數
2個地方對商品id引數化:根據goods_id進入商品詳細頁;新增對應goods_id的商品到購物車
對登入成功後的商品首頁,右鍵新增正規表示式提取器,以獲取商品的隨機id編號,用於後續步驟中
![4866277-88dc5de31783b9c8.png](https://i.iter01.com/images/002718eaaa9844b44db268591b1c8a315884918fd7adbc5db20a85064fdf5416.png)
![4866277-cff6f8bb8e063bf2.png](https://i.iter01.com/images/152b4b685646f3b98bf8ef6b3d7956dc9558cdd3d1143bd70eb66c4ab0b22fb3.png)
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,替換到後續請求中進行引用
![4866277-b69c3a87f0f30d26.png](https://i.iter01.com/images/2a0b7d836aeadb9773d7629339e4139c3b17e776c1c671c6eba2ea05fe6c51da.png)
![4866277-4d76f5cd35151c20.png](https://i.iter01.com/images/dd21fedd2c4261d9bdeb482c610ff12aca526b905fc87341de3f6442f798bf67.png)
6.新增定時器
指令碼錄製過程中,使用者輸入使用者名稱及密碼,需5s左右;使用者登入成功後,系統預設有3s左右的使用者選擇操作時間;使用者選擇某件商品,然後新增到購物車,這個過程可增加計時器5s;編寫收貨資訊5s;填寫快遞資訊及付款方式5s;使用者退出系統時,也存在同樣的選擇時間,大約3s。
>> 使用者登入前等待資訊輸入:5s 計時器
>> 登入成功等待返回首頁:3s 計時器
>> 選擇商品、新增到購物車:5s 計時器
>> 填寫收貨資訊:5s 計時器
>> 填寫物流資訊、支付方式選擇:5s 計時器
>> 使用者退出等待返回首頁:3s 計時器
![4866277-dfc2aa0f95cb0f1e.png](https://i.iter01.com/images/e9911cf7e832e9df3c9af694a1041a799bc345576f97bdd790f49ad81a6c8e7f.png)
7.設定響應斷言,判斷是否購買成功
Add-->Assertions-->Response Assertion
Add-->Listener-->Assertion Results
![4866277-63b3ee092e79824b.png](https://i.iter01.com/images/4f7b379eb92f41ce23bc5cc08ebca4248156a8907b3e8fb3de073844ad5cba86.png)
PS: 訂單是否成功,也可在ECShop後臺直接查詢
同時通過Fiddler抓包分析,發現"填寫收貨資訊進行提交"請求存在POST請求的302定向,此時為了確保前後頁面登入資訊的關聯性,需要勾選"Follow Redirects", 或者兩種定向方式都不勾選則預設"Follow Redirects"
![4866277-0680cd51c4f621d7.png](https://i.iter01.com/images/81d8ad86d6967b5fc0d7881fcce83d35a1c30c160b485a990ec0fd1a5d3c74ad.png)
![4866277-447c90002bbdf765.png](https://i.iter01.com/images/a5ebea24073a4e3ee9fc6b240c1825fcd2622918ff303d0c65a058db34a1f711.png)
8.新增檢視結果樹、聚合報告,統計指令碼執行的資料
新增View Results Tree、Summary Report,便於統計測試指令碼執行過程中的資料表現
9.執行檢驗指令碼執行效果
配置項 | 配置數值 |
---|---|
Thread Group | Number of Thread: 1 |
Step 1 | Loop Count: 1 |
按照1個執行緒迴圈1次進行檢驗效果,已執行成功提交訂單,如下:
![4866277-cd99afd53e5c9d17.png](https://i.iter01.com/images/270af6e3e3a53874eb43dbb88e85704b98d93b06083d0832bc7d089768052690.png)
![4866277-4d5b5946a69e1505.png](https://i.iter01.com/images/ed5aff8b47037ae82a9a2e526f5e16b68f83a5baab794a8b61fd4a9c30acccb8.png)
在本地資料庫中,也可查詢到剛才在JMeter中執行指令碼獲取到使用者的收穫地址資訊、訂單資訊的記錄,如下:
![4866277-853a2d74825659af.png](https://i.iter01.com/images/6e70dd988077d8b6fd6c8315cc3806978f10ffa9ee9da98e87987f0794f63ccf.png)
以上,本次ECShop站點隨機瀏覽購買商品業務的指令碼開發完成
相關文章
- 隨行付微服務測試之效能測試微服務
- iOS17 效能測試指令碼iOS指令碼
- .NetCore 登入(密碼鹽+隨機數)NetCore密碼隨機
- Appium iOS 測試指令碼開發實戰APPiOS指令碼
- [python] request 介面測試自動化指令碼轉化為 [locust] 效能測試指令碼Python指令碼
- 運維指令碼: 實時監測登入運維指令碼
- 搬瓦工 VPS 效能一鍵測試指令碼指令碼
- 如何用 JMeter 編寫效能測試指令碼?JMeter指令碼
- 效能測試——壓測工具locust——指令碼初步編寫指令碼
- 一場為企業服務開發的效能測試報告測試報告
- 測試開發之自動化篇-Appium指令碼開發APP指令碼
- 想要購買效能測試工具,如何計算自己需要多少併發使用者?
- 測試開發之效能篇-效能測試設計
- Shell指令碼 | 效能測試之啟動時間指令碼
- InDesign外掛--常規功能開發--隨機填充--js指令碼開發--ID外掛隨機JS指令碼
- 理解 Linux/Unix 登入指令碼Linux指令碼
- 一個註解搞定登入註冊、實名認證及購買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框架指令碼