一、前言
周計划上安排了個接口性能測試的任務,便開始了職業生涯的第一個接口性能測試。。。
接口進行壓測之前,首先需要調通腳本。有兩種方式,一種是通過抓包工具(如fiddler)抓取業務接口;另一種是通過jmeter進行腳本錄制。
兩者分別有各種的優缺點:
(1)Fiddler手工抓包:【優點】直接抓取業務接口;【缺點】對於性能測試小白可能比較困難(比如筆者自身,很難找到業務接口間的關聯關系);
(2)Jmeter錄制腳本:【優點】各業務接口間的關聯關系可以從腳本中體現;【缺點】需要自己過濾無關緊要的相關接口(如下圖中圈出部分已禁用的接口);

因筆者還是性能測試小白,所以選擇了用jmeter進行腳本錄制這種方式。
二、腳本錄制
根據性能測試要求,對所需要測的業務系統進行分析大概有多少個事務。如上圖,分析得出業務系統有信息自檢、填寫信息、填寫表單、上傳材料、提交辦件這5個事務。在測試計划下添加HTTP請求默認值、察看結果樹、聚合報告,接下來添加線程組。
(1)測試計划右鍵添加線程組

(2)線程組右鍵新增事務控制器


添加事務控制器后,在錄制腳本時,可以在“目標控制器”中選擇對應的事務。
Generate parent sample:是否生成一個父取樣,即將事務控制器下的請求看成一個整體(一般勾選該選項)。勾選后,在察看結果樹和聚合報告中,只顯示事務名稱,不顯示事務下具體的請求。


(3)工作台右鍵添加HTTP代理服務器,(對應瀏覽器設置代理后)選擇對應的目標控制器,並啟動錄制。

啟動錄制后,可去業務系統進行相關操作,此時jmeter會錄制相關的腳本,產生的腳本就會顯示在對應事務下,如圖中“信息自檢”下的很多接口,就是錄制產生的。事務操作結束后,記得回到jmeter代理服務器頁面停止錄制,此時該事物的腳本錄制結束。
PS:上圖中,事務“基本信息”、“填寫表單”、“上傳材料”、“完成”的錄制步驟同上,此處不過多描述。
三、關聯參數
存在這樣場景:上一個接口產生的數據,是下一個接口的入參。因此,可以用正則表達式提取器,提取上一個接口產生的數據,在下一個接口的傳入參數中進行引用。

(1)通過正則表達式提取響應參數
選擇對應接口>右鍵,添加>后置處理器>正則表達式提取器。以提取userCode為例。在正則表達式中填寫引用名稱、正則表達式以及匹配規則,在接口執行后即可提取對應參數;可通過添加Debug PostProcessor驗證提取的參數值是否正確。



-------------------------------------------------------------------
正則表達式提取器相關說明:
Apply to:應用范圍;
要檢查的響應字段:數據源;
引用名稱:其他地方引用時的變量名稱,可自定義設置。引用方法為:${引用名稱}
正則表達式:正則提取器,()括號里為要獲取的的值。"userCode":"為左邊界 ,"為右邊界。括號里為正則表達式,用來匹配所需要獲取的數據;
".":匹配除了換行符以外的任何字符;
"+":重復一次或更多次;
"?":重復零次或一次;
模板:$$對應正則表達式提取器類型。-1全部,0 隨機,1第一個2第二個,以此類推,若只有一個正則一般就填寫$1$;
匹配數字:匹配數據的所有結果。-1表示全部,0隨機,1第一個,2第二個,以此類推。若只要獲取到匹配的第一個值,則填寫1;
缺省值:匹配失敗時的默認值。可以不寫。
---------------------------------------------------------------------
(2)引用參數
在對應的接口對應的入參的值中進行引用,引用方法:${引用名稱}。這樣提取的參數值就會變成下一個接口的入參值,接口參數實現關聯。


四、讀取CSV文件
腳本基本跑通之后,為了可以進行多用戶的並發,可以通過讀取CSV文件引用多個用戶變量(userCode)。上篇文章中有提及jmeter如何讀取CSV文件,這里不過多描述。
(上篇博文傳送門:https://www.cnblogs.com/dnjiang/p/11290521.html#4349303)
五、設置集合點
在進行接口性能測試(多用戶並發)時,為了對一些接口施加壓力,可以在對應的地方設置集合點(添加Synchronizing Timer)。根據Synchronizing Timer設置的集合點【一般小於或等於線程數】,當請求沒有達到集合點時,會處於等待狀態;當請求達到集合點時,會一起執行,從而實現並發的效果。


執行腳本,可在察看結果樹中查看同時提交的請求效果。同時可在聚合報告中查看各事務的性能測試結果分析。


六、自定義變量
日常接口壓測過程中,存在每個接口請求頭中都有帶token的情況,當token過期后,執行腳本異常;因此我們需要替換接口請求頭中的token信息,一個一個替換的話麻煩費時,因此我們可通過自定義變量並在對應位置引用;替換token時,只需改變量值即可。


七、番外話
性能測試還可能存在對接口進行持續施壓的要求,可在線程組中進行設置。

