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

上一篇 / 下一篇  2013-08-14 15:22:33 / 个人分类:jmeter

先介绍一下这次要测试的业务吧,在测试的这个页面中
首先要输入一个"订单号"
按下回车后将会带出一组商品的"条码编号"
然后通过将这些"条码编号"复制到下面的条形码输入框中,按下回车,页面会再带出关于这个条码的一些信息,点击"核收"按钮,接着再输入下一个条码...直到该订单的所有条码全部完成, 点击完成订单.
这个订单的流程就算完成了

如果看明白上面的文字叙述,你因该已经明白如何对这个功能的页面做测试了...不管是性能还是自动化, 

测试脚本的结构如下:
参数化所有订单
然后从页面返回值读取订单返回的条形码, 并将结果存入结果集中
循环该结果集 ,请求所有条码 ,循环次数去结果集的总数
完成订单流程

先看下图

在第一个"正则表达式提取器-获取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的关联我的理解和实例就是这些. 知道如何识别页面的信息在对于我们更好完成性能测试自动化测试,会有很大的帮助和提高 不是吗!哈哈












TAG:

引用 删除 xiaoyongtao2014   /   2015-09-25 13:32:02
楼主,请问你个问题,我现在遇到的问题是,需要提取上一个请求A 的一个Id(一个顺序递增的三位正整数)返回值,并要实现把这个Id值作为下一个请求B的参数提交给服务器;现在我在A请求下插入和一个正则表达式提取器,并在引用名称处写**肭蠓祷刂担篒d,正则表达式:(\d+?),在B请求需要引用A请求返回值Id的地方写上了${Id
},我现在的问题是B请求怎么也不能引用到A请求的返回值Id,请帮我分析可能哪里出错了?谢谢
 

评分:0

我来说两句

日历

« 2024-05-10  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 79840
  • 日志数: 15
  • 建立时间: 2013-01-04
  • 更新时间: 2013-09-27

RSS订阅

Open Toolbar