一. Jmeter做接口測(cè)試的常用元件介紹
測(cè)試計(jì)劃:測(cè)試計(jì)劃是Jmeter測(cè)試的起點(diǎn),是其他Jmeter測(cè)試元件的容器。包含一個(gè)功能模塊測(cè)試的所有內(nèi)容蝙茶,包含所有的控件,屬性诸老,變量隆夯。所以,一個(gè).Jmx文件中只有一個(gè)測(cè)試計(jì)劃别伏。測(cè)試計(jì)劃中可以定義變量蹄衷,引入jar包等。
線程組:線程組可以理解為一個(gè)虛擬用戶組厘肮,線程間變量相互獨(dú)立宦芦,一個(gè)測(cè)試計(jì)劃內(nèi)可以包含多個(gè)線程組;線程屬性有:線程數(shù)量轴脐,線程啟動(dòng)間隔時(shí)間(0位立刻啟動(dòng)所有線程)调卑,單線程循環(huán)次數(shù),線程執(zhí)行順序大咱,是否使用調(diào)度器恬涧。
Sampler取樣器:模擬請(qǐng)求,如HTTP碴巾,F(xiàn)TP請(qǐng)求等溯捆。在Jmeter中承擔(dān)測(cè)試任務(wù)。
監(jiān)聽器:對(duì)取樣器請(qǐng)求的結(jié)果進(jìn)行顯示厦瓢,統(tǒng)計(jì)數(shù)據(jù)(接口請(qǐng)求的錯(cuò)誤率提揍,常用的性能指標(biāo)如吞吐量等)負(fù)責(zé)收集和顯示測(cè)試結(jié)果。
斷言:一種驗(yàn)證響應(yīng)結(jié)果是否和期望相符的方法煮仇。
邏輯控制器:控制發(fā)送請(qǐng)求時(shí)的邏輯行為劳跃,常與Sampler取樣器結(jié)合模擬請(qǐng)求,如if控制器
前置處理器:在發(fā)送請(qǐng)求之前需要完成的工作浙垫。常常被用來(lái)修改請(qǐng)求的相關(guān)設(shè)置刨仑。如:URL重寫修飾符,
后置處理器:在發(fā)送請(qǐng)求之后需要完成的工作郑诺。常常被用來(lái)處理響應(yīng)結(jié)果。如:正則表達(dá)式處理器,Bean Shell PostProcessor,
配置元件:用來(lái)初始化默認(rèn)值和變量杉武,以便后續(xù)采樣器使用辙诞。將在其作用域的初始化階段處理,Jmeter常用的配置元件包括:HTTP Cookie管理器轻抱,HTTP Cache Manager飞涂,HTTP信息頭管理器,CSV數(shù)據(jù)文件設(shè)置祈搜,用戶自定義變量等较店。
二、部分舉例
我們以抽獎(jiǎng)活動(dòng)為例夭问,顯示抽獎(jiǎng)10次時(shí)泽西,每次抽中的具體獎(jiǎng)品以及該獎(jiǎng)品出現(xiàn)的概率,假設(shè)有三種獎(jiǎng)品
2.1缰趋、測(cè)試過(guò)程
添加測(cè)試計(jì)劃:抽獎(jiǎng)活動(dòng)捧杉;
添加Sampler:用戶登錄(login接口),并在請(qǐng)求上插入上級(jí)僅一次邏輯控制器秘血,控制同一用戶僅登錄一次味抖;
添加HTTP Cookie管理器:用來(lái)獲取用戶登錄的token;
添加HTTP Cache Manager灰粮;
添加HTTP信息頭管理器:添加HTTP請(qǐng)求頭參數(shù)仔涩;
HTTP URL重寫修飾符;
添加Sampler:抽獎(jiǎng)粘舟,該接口可用于獲取用戶所抽到的獎(jiǎng)品信息熔脂;
對(duì)抽獎(jiǎng)接口,添加后置管理器-正則表達(dá)式提取器:用于獲取響應(yīng)結(jié)果中prizeName的值柑肴;(正則表達(dá)式的匹配規(guī)則可自行學(xué)習(xí))
如:
對(duì)抽獎(jiǎng)接口霞揉,添加后置處理器-Bean Shell PostProcessor:用來(lái)處理抽獎(jiǎng)接口的返回?cái)?shù)據(jù),得到抽獎(jiǎng)總次數(shù)晰骑,每次所抽獎(jiǎng)品和抽到某種獎(jiǎng)品的次數(shù)适秩。值得注意的是,如果直接在beanshell腳本里定義變量硕舆,則每次請(qǐng)求接口變量都會(huì)被重新初始化秽荞,所以,我們需要針對(duì)抽獎(jiǎng)接口添加配置元件-用戶自定義變量抚官,以此保存每次抽獎(jiǎng)的結(jié)果和次數(shù)扬跋。具體方法為:
除此之外,用戶自定義變量中的value參數(shù)為String類型耗式,如果想對(duì)此變量進(jìn)行數(shù)值運(yùn)算胁住,需要將其轉(zhuǎn)化為int類型趁猴,存儲(chǔ)運(yùn)算后的值時(shí)再將其轉(zhuǎn)化為String類型刊咳。
附上BeanShell腳本彪见,
{
? ? ? String prizeName = vars.get("prizeName");
//抽中獎(jiǎng)品一的次數(shù)
int c1 = Integer.parseInt(vars.get("count1"));
//抽中獎(jiǎng)品二次數(shù)
int c2 = Integer.parseInt(vars.get("count2"));
//抽獎(jiǎng)總次數(shù)
int summ= Integer.parseInt(vars.get("sum"));
summ = summ+1;
vars.put("sum",summ.toString());
System.out.print("第"+summ+"次抽獎(jiǎng):");
//c1 = c1+1;
if(prizeName.startsWith("獎(jiǎng)品一")){
//System.out.println(vars.get("prizeName"));
c1 = c1+1;
? ? ? ? ? vars.put("count1",c1.toString());
// System.out.println("獎(jiǎng)品一:"+c1+"次");
}else if(prizeName.startsWith("獎(jiǎng)品二")){
//獎(jiǎng)品二
c2 = c2+1;
? ? ? ? ? vars.put("count2",c2.toString());
//System.out.println("抽中獎(jiǎng)品二的次數(shù)為:"+c2+"次");
}else{
? ? ? ? ? ? ? ? ? ? ? //System.out.println(vars.get("prizeName"));
}
System.out.println(vars.get("prizeName"));
if(summ == 10){
? ? ? System.out.println("-------------------------------------------");
System.out.println("抽獎(jiǎng)總次數(shù)為:"+summ);
System.out.println("抽中獎(jiǎng)品一次數(shù)為:"+c1+"次");
System.out.println("抽中獎(jiǎng)品二次數(shù)為:"+c2+"次");
}
System.out.println("-------------------------------------------");
}
其中,count1娱挨,count2余指,sum為添加的用戶自定義變量,用于保存每次請(qǐng)求變量的結(jié)果跷坝。(添加-配置原件-用戶自定義變量)
設(shè)置線程組數(shù)為1酵镜,循環(huán)次數(shù)為10,及單用戶登錄柴钻,抽獎(jiǎng)十次的結(jié)果淮韭,顯示如圖:
2.2兩個(gè)接口之間有邏輯關(guān)系
概述:測(cè)試修改密碼接口,但需要先校驗(yàn)驗(yàn)證碼正確(校驗(yàn)驗(yàn)證碼接口)贴届。
測(cè)試過(guò)程:
1. 校驗(yàn)驗(yàn)證碼接口加后置正則表達(dá)式提取器靠粪,提取該接口返回結(jié)果(成功),我提取的是返回的msg的成功信息
在修改密碼接口上添加邏輯控制器(if控制器)毫蚓,寫入if控制條件占键,顯示如圖:
結(jié)果:驗(yàn)證碼通過(guò)后才會(huì)請(qǐng)求修改密碼接口