本篇介绍Jmter在发送请求时,经常会遇到的一种情况:
假如我们需要发送一个请求,这个请求里需要一个参数,但是这个参数并不是固定的,他是上一个请求返回的,而且每次返回都不一样,这时候我们要怎么处理呢?
首先,我们创建一个HTTP的请求,也就是前置请求,方法同上一篇介绍的一样,添加线程组,创建HTTP请求,添加查看结果树,然后启动
如图,这是我们前置请求的结果,例如我们下个请求需要用到红框中标注的这个ID:13010051
首先我们在这个请求中创建一个正则表达式提取器
然后返回刚才的结果树,左侧选择为RegExp Tester,这样右侧看的更有条理,然后,像Loadrunner左右边界值那样,把我们需要的参数左侧和右侧连带一起粘贴到下面的文本框中,然后我们需要的部分用(.*?)代替
注意:并不是所有的都要用(.*?)代替,这里讲一下规则:
如何检测我们这样写是否能取到对的值呢? 在文本框的右边有一个test按钮,点击可以查看取样结果:
这和我们的预期一样,取到了13010051,然后我们把文本框的内容粘贴到正则表达式取样器中。
这里有一个坑,就是模板,一定不要瞎写,也不要不写,这里将以下规则:
例如我们要在以下响应中取值:
"HeatPowerPlantID":"A","HeatPowerPlantName":"jmeter测试"."HeatPowerPlantID":"B","HeatPowerPlantName":"jmeter测试".
正则表达式提取器模板,样式为:$n$。
若模板为:$0$,则为整个表达式匹配到的内容,就是包括小括号内跟小括号外的内容,取到的值为整个内容,即:
"HeatPowerPlantID":"A","HeatPowerPlantName":"jmeter测试"."HeatPowerPlantID":"B","HeatPowerPlantName":"jmeter测试".
若模板为:$1$,则对应正则表达式中的第一个(.*?)所匹配的内容,即 A
若模板为:$2$,则对应正则表达式中的第二个(.*?)所匹配的内容,即 B
若模板为$1$$2$,则把2个(.*?)所匹配的内容拼接起来,即 AB。
模板是可以自由组合的,后续案例中再介绍。
现在我们的正则表达式已经做完了,如何用到下一个请求呢,我们创建下一个HTTP请求,并添加参数:
我们取到的参数a ,作为下一个请求发送的参数,这个参数的名称为heatPowerPlantIDs,他的值为我们正则表达式中的a,在这里写法为:${a}
至此参数化完成,PS:相比loadrunner的参数化关联,Jmeter的感觉稍微麻烦一点,但是原理都是一样的,都是通过左右边界值来确定参数位置,然后取值。
然后我们点击运行,可以在结果树看到,请求成功,我们成功删除了ID为13010051的数据