【转】jmeter关联的经典应用, 如何将页面返回值作为下次请求的参数

声明:转发自 https://www.cnblogs.com/scarlett-hy/articles/4244055.html

【解决问题:响应报文返回多个key值,需要将所有key值的value取出,并且,循环用于下一个请求】

先介绍一下这次要测试的业务吧,在测试的这个页面中

首先要输入一个"订单号"
按下回车后将会带出一组商品的"条码编号"
然后通过将这些"条码编号"复制到下面的条形码输入框中,按下回车,页面会再带出关于这个条码的一些信息,点击"核收"按钮,接着再输入下一个条码...直到该订单的所有条码全部完成, 点击完成订单.
这个订单的流程就算完成了
 
如果看明白上面的文字叙述,你因该已经明白如何对这个功能的页面做测试了...不管是性能还是自动化, 
 
测试脚本的结构如下:
参数化所有订单
然后从页面返回值读取订单返回的条形码, 并将结果存入结果集中
循环该结果集 ,请求所有条码 ,循环次数去结果集的总数
完成订单流程
 
先看下图
 
在第一个"正则表达式提取器-获取asnid"中, 这个正则的提取还是比较典型的.
    引用名称: 说明了 在一下脚本中所引用的名称
    正则表达式: ()中是你需要提取的信息 . 页面返回的信息是[123] 所有正则写成[(d+?)] 因为[]是元字符所有需要反义一下 , jmeter的正则引擎直接是用perl的语法 所有d就是表示的数字 +表示匹配1个和多个 ?表示非贪婪匹配 . 当然这里的正则也可以写成[(.*?)]这个意思就是获取()中的所有东西
    模板 : $$中的数字表示给匹配的信息加上组号以便后续可以调用, 这里对模板的用法不是很明显, 下面的正则可以很明显看到模板多组号的用途
    匹配数字 : 一个正整数代表需要匹配几次 0代表随机匹配  -1代表全部匹配. 这里就写1只要成功匹配一次就可以了
 
 
稍微复杂一点的正则请看下图
选中的这个http请求 在返回的页面中有这么几行
<td>TX12312</td>
<td>TX12314</td>
<td>TX12315</td>
....
这些代表了订单号下的不同条码,而页面上就需要将这些条码一个一个输入进,条码输入框
对于这个页面的 "匹配数字" 我们就需要设置成-1,意思就是将页面中所有匹配的信息抓取下来, 正则<td>(TM.*?)</td>, 匹配下来后全部存进自定义的列表名barcode_arr 这样的抓取通常会跟着循环控制的使用, 接着就看下图
 
循环控制器
这个不难理解
输入变量前缀: 就是先前抓取的barcode_arr这个列表名
start index for loop : 列表的哪个下标开始
end index for loop : 在哪个下标结束
输出变量名 : 循环到的每个元素存入哪个变量
我这里遍历整个barcode_arr,遍历到的每个元素存进barcode 以供后面的测试元件调用 . 接着在看下图
 
 
多次匹配后以不同的组号区分
我的理解就是:
正则中出现了3个括号() , 我需要分别提取3个括号中的所有东西
那就需要在模板中定义三个组号$1$$2$$3$ , 在匹配数字中配置-1
当后面页面调用这次匹配的内容时就可以这样区别
${return_1_g1}第一组中的第一个内容
${return_1_g2}第二组中的第一个内容
${return_2_g1}第一组中的第二个内容
${return_2_g2}第二组中的第二个内容
 
总结:
jmeter的关联我的理解和实例就是这些. 知道如何识别页面的信息在对于我们更好完成性能测试自动化测试,会有很大的帮助和提高 不是吗!哈哈
原文地址:https://www.cnblogs.com/2019damojie/p/11076826.html