jmeter巧用ForEach控制器

前段時間做接口自動化的時候遇到很多查詢接口,接口出參會隨着入參type的變化,得到不同type下的數據。
interface
如上圖,是接口query_financial_stock的說明。測試時候對入參financial_type分別傳入值100301、100302、100303、100304、100305、100306進行驗證。
上述入參得到的結果,對應的sql如下:
SELECT
jfp.stock_code,
jfp.stock_name,
jfp.financial_ranking,
jfp.industry_code,
jfp.innercode
FROM
jy_financial_performance jfp
WHERE
jfp.financial_type = 「 financialtypeANDjfp.industryname= {industry_name}」
ORDER BY
jfp.financial_ranking ASC
LIMIT 5
不借助jmeter,修改where條件語句,在數據庫執行也能很快驗證完畢。但當類似接口有七八個的時候,每個接口類似的type有6~10個不等的時候,你有沒有想過「偷懶」的方法。
藉助jemeter的ForEach控制器,三個步驟可以快速實現。
1、 定義financial_type值
在jmeter「用戶定義的變量」中定義financial_type各個值
financial_type_1 = 100301
financial_type_2 = 100302
financial_type_3 = 100303
financial_type_4 = 100304
financial_type_5 = 100305
financial_type_6 = 100306
如下圖:
define
2、 添加ForEach控制器
foreach
如上圖,輸入前綴是financial_type, 左下角勾選「Add _ before number」,與輸入前綴拼接後爲「financial_type_」。start index for loop爲0,end index for loop爲6,是「左開右閉」,即(0,6]。ForEach控制器會依次取financial_type_1、financial_type_2、financial_type_3、financial_type_4、financial_type_5、financial_type_6 的值,並賦值給 financial_type。
3、 請求接口
接口請求時,將設置入參financial_type=${financial_type},每次ForEach控制器更新financial_type字段值時,接口請求入參都會相應變化。如下圖:
types
此外,還需添加一個後置控制器JDBC PostProcessor(前置控制器PreProcessor也可以),這個是爲更準確的斷言做數據準備。將需要做斷言進行校驗的字段(stock_code,stock_name,financial_ranking,industry_code, innercode),sql選出並輸出(stock_code,stock_name,financial_ranking,industry_code,id)。如下圖:
post
4、 斷言
設置合適的斷言,會提高很大接口自動化的效率。如上面這個接口,主要需要關注輸出參數stock_code,stock_name,financial_ranking,industry_code,id的數據。如下圖,對這些數據做斷言。
assetion 響應斷言的「模式匹配規則」建議選擇「包括」,對於有一些無關緊要的輸出字段可以用正則匹配的方法。「包括」只要斷言數據包含在響應數據裏,同時還可以用正則進行匹配。「匹配」是需與響應數據完全一致,支持正則匹配,但需全部匹配。「Equals」是完全相同。「Substring」是隻要斷言數據在響應數據裏即可,是包含關係,不支持正則。「否」是沒有斷言的數據。