重定向時(shí)會(huì)產(chǎn)生主請(qǐng)求和子請(qǐng)求贸宏,主請(qǐng)求和最后一個(gè)子請(qǐng)求的值是一樣的拳昌。
Jmeter Variable Name to use,有時(shí)候有些變量需要使用多次正則提取才能獲取对省,下面舉例說明:
新創(chuàng)建一個(gè)test plan,添加一個(gè)線程組晾捏,在線程組下面添加一個(gè)Java request:
將下面的Json數(shù)據(jù)添加到j(luò)ava request的ResultData中:
{"name":"yangyang",
"data":
{"student":[ {
? ? "name":"明",
? ? "sex":"男",
? ? "email":"zhangguoli@123.com",
? ? "url":"./img/1.jpg"
? },
? {
? ? "name":"鐵林",
? ? "sex":"男",
? ? "email":"zhangtieli@123.com",
? ? "url":"./img/2.jpg"
? }],
"teacher":[{
? ? "name":"鄧",
? ? "sex":"女",
? ? "email":"zhenjie@123.com",
? ? "url":"./img/3.jpg"
? },
? {
? ? "name":"默",
? ? "sex":"男",
? ? "email":"zhangguoli@123.com",
? ? "url":"./img/4.jpg"
? }]
}}
在線程組下面添加Debug Sampler和View Results Tree:
運(yùn)行request蒿涎,可以在View Result Tree中看到返回的json字符串:
在Java request下面添加2個(gè)正則表達(dá)式提取器,來提取student的名字列表:
第一個(gè)regular expression extractor用于提取student的所有信息的字符串:
可以在View Results Tree中調(diào)試正則表達(dá)式惦辛,看是否能匹配到想要的字符串:
第二個(gè)regular expression extractor用于提取student名字劳秋,這里要用到第一個(gè)正則提取器的結(jié)果變量student_info_list:
再次運(yùn)行request,在debug sampler中能看到提取的學(xué)生名字:
正則提取器的結(jié)果是這3個(gè)參數(shù)共同決定的:正則去找胖齐,模版去拼接玻淑,匹配數(shù)字去指定要哪些數(shù)據(jù)。
當(dāng)需要從返回值中一次提取多個(gè)參數(shù)時(shí)呀伙,可以參看下列例子:
添加線程組补履,2個(gè)java request,第一個(gè)request下添加regular expression extractor剿另,Debug sampler箫锤, View Results tree贬蛙。
第一個(gè)Java request中添加ResultData:a1b甲c a2b乙c a3b丙c a4b丁c。regular expression extractor中的正則表達(dá)式為a(.*?)b(.*?)c谚攒,template為$1$阳准,Match NO為默認(rèn)值0,會(huì)隨機(jī)從匹配結(jié)果中挑選一個(gè)值賦值給變量:
運(yùn)行request五鲫,可以在debug sampler中看到匹配的結(jié)果溺职,
param=3? ? ?//匹配結(jié)果 $1$
param_g=2? ? //匹配參數(shù)的個(gè)數(shù)
param_g0=a3b丙c? ? ? ? //符合正則的字符串
param_g1=3? ? ? ? ?//第一個(gè)匹配結(jié)果$1$,也就是第一個(gè)小號(hào)中的值
param_g2=丙? ? ? ? //第二個(gè)匹配結(jié)果$2$位喂,也就是第二個(gè)小號(hào)中的值
修改第二個(gè)java request的Name為:
Java Request {"name":"${param_g2}", "value":"${param_g1}"}
多次運(yùn)行request浪耘,可在View Results Tree中看到第二個(gè)java request
的name是用前一個(gè)java request中提取的變量隨機(jī)組成的:
也可在正則提取器中先使用{"name":"$1$", "value":"$2$}"}拼接好后面需要的參數(shù),第二個(gè)request直接寫成Java Request ${param}使用這個(gè)參數(shù)即可塑崖。
當(dāng)匹配次數(shù)填寫-1時(shí)七冲,會(huì)返回一個(gè)list,可以添加foreach來遍歷返回結(jié)果中的所有值:
如果查看debug sampler规婆,可以看到返回的數(shù)組:
還可以使用計(jì)數(shù)器來獲取變量澜躺,在foreach下面添加計(jì)數(shù)器元件:
這樣我們想獲取的變量就可以寫成{"name":"${param_${index}_g1}", "value":"${param_${index}_g2}"},但是${param_${index}_g1}是變量名中含有變量名抒蚜,需要用到函數(shù)生成器V:
將函數(shù)表達(dá)式替換到第二個(gè)request的Nmae字段:
Java Request {"name":"${__V(param_${index}_g2,)}", "value":"${__V(param_${index}_g1,)"}
也可以得到相同的效果掘鄙!