干貨 | Jmeter 如何保證搶購、秒殺活動正常運行?
點擊上方“AirPython”,選擇“加為星標(biāo)”
第一時間關(guān)注 Python 原創(chuàng)干貨!

1. 前言
平常為了保證運營促銷、抽獎活動能正常運行,我們一般都需要使用 Jmeter、LoadRunner?對接口進行壓力測試
使用它可以模擬一定量的用戶同時去參與促銷抽獎活動,最后生成測試報告,以此判系統(tǒng)接口的穩(wěn)定性
本篇文章以搶購商品為例,包含:登錄、搶購 2 個接口;使用 Jmeter 模擬 20?個用戶同步完成搶購操作
2. 準(zhǔn)備
2-1??Mock 接口
為了方便文章講解,這里使用 VirAPI Mock 了兩個接口:登錄、搶購
https://virapi.com/
其中,
登錄接口如下:

搶購接口如下:

2-2??準(zhǔn)備用戶數(shù)據(jù)
我們使用 Jmeter 中的 CSV 數(shù)據(jù)文件設(shè)置為例,在本地創(chuàng)建文本文件,保存 30 個用戶數(shù)據(jù)
每一條用戶數(shù)據(jù)包含:用戶手機號碼、密碼、用戶 ID

3. 操作步驟
打開 Jmeter 軟件,我們完成下列操作
3-1??創(chuàng)建線程組,配置 CSV 數(shù)據(jù)文件
首先,選中測試計劃,右鍵 - 添加 - 線程(用戶),并對線程組重新進行命名
線程數(shù)為:模擬 30 個用戶
啟動時長:5 秒鐘創(chuàng)建 30 個線程
循環(huán)次數(shù):1 次

接著,在當(dāng)前線程組下創(chuàng)建一個 CSV?數(shù)據(jù)文件設(shè)置,用它導(dǎo)入本地用戶數(shù)據(jù)

在 CSV 文件配置設(shè)置中,關(guān)聯(lián)本地準(zhǔn)備好的用戶數(shù)據(jù),并定義關(guān)聯(lián)變量名,其他保持默認(rèn)即可
需要指出的是,這里指定了 3 個變量,分別是:user、pwd、id,和數(shù)據(jù)文件中的數(shù)據(jù)關(guān)聯(lián)上

3-2??HTTP 請求默認(rèn)值和 HTTP 信息頭管理器
在線程組下,添加 HTTP 請求默認(rèn)值,設(shè)置公共的服務(wù)器地址
步驟:線程組 - 右鍵 - 添加 -?配置元件 - HTTP 請求默認(rèn)值?

接著,添加 HTTP 信息頭管理器,用于設(shè)置公共的請求頭
步驟:線程組 - 右鍵 - 添加?-?配置元件 - HTTP 信息頭管理器
比如,這里可以添加?VirAPI 應(yīng)用的 app-token 及 content-type

3-3??登錄請求
在線程組下,添加一個 HTTP 請求:登錄

然后根據(jù) Mock 接口 -?登錄,設(shè)置請求的方式、路徑及請求體數(shù)據(jù)
PS:這里直接將第一步關(guān)聯(lián)的變量設(shè)置進去即可

3-4? 同步定時器
為了真實地模擬并發(fā)去調(diào)用搶購接口,在搶購接口之前需要一個同步定時器
同步定時器,可以保證所有虛擬用戶相互等待,直到所有用戶集合之后,才開始后續(xù)的接口調(diào)用
步驟:線程組 - 右鍵 - 添加 -?定時器 - 固定定時器
這里,設(shè)置模擬用戶組的數(shù)目和線程數(shù)保持一致,這樣,如果虛擬用戶數(shù)達不到指定數(shù)目,則不會執(zhí)行后面的操作

3-5? 搶購請求
在線程組下,繼續(xù)添加一個搶購的 HTTP 請求
同樣根據(jù)接口 API,編輯 HTTP 請求的方式、路徑、請求體

3-6? 添加請求結(jié)果樹、匯總報告、聚合報告
選中線程組,添加請求的結(jié)果樹、匯總報告、聚合報告
步驟:線程組 - 右鍵 - 添加 -?監(jiān)聽器 -?察看結(jié)果樹/匯總報告/聚合報告
如此,Jmeter 的配置已完成!

4. 運行
4-1 ?直接運行
選中線程組,點擊菜單欄的啟動按鈕,即可以模擬并發(fā)調(diào)用搶購的接口
運行完成后,點擊察看結(jié)果樹,可以發(fā)現(xiàn) 30 個虛擬用戶調(diào)用搶購接口的開始時間是一致的
另外,在匯總報告和聚合報告中,可以展示平均響應(yīng)時間、最大/小響應(yīng)時間、異常比率、吞吐量等結(jié)果數(shù)據(jù)

4-2??生成測試報告
除了直接運行,也可以使用 Jmeter 命令在本地生成測試報告
#?-o?jmeter_report/?測試報告生成目錄
jmeter?-n?-t?搶購-并發(fā)測試.jmx?-l?test.jt1?-e?-o?jmeter_report/
其中
-n
以非 GUI 的形式運行
-t
指定 Jmeter?配置文件
-l
指定生成日志文件模板
-e
測試結(jié)束后,生成測試報告
-o
測試報告生成目錄
打開測試報告,發(fā)現(xiàn)測試結(jié)果數(shù)據(jù)通過圖表的形式詳細(xì)地展示出來了

5. 最后
通過上面的步驟,完成了對接口的壓力測試,以此判斷接口的性能及穩(wěn)定性!
實際項目中,由于單機的性能瓶頸,對于大量用戶的壓測,建議采用 分布式壓測 的方式來進行!
我已經(jīng)將文中的 jmx?配置文件傳到后臺,關(guān)注公眾號,后臺回復(fù)「 201224?」即可獲得
如果你覺得文章還不錯,請大家?點贊、分享、留言?下,因為這將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強動力!
