JMeter 如何把上一个请求的结果作为下一个请求的参数

上一篇 / 下一篇  2016-11-02 15:02:37 / 个人分类:软件测试

  有这样一个压力测试环境,有一个上传页面,上传成功之后服务器会返回一些上传信息(比如文件的 id 或者保存路径之类的信息),然后压力机会继续下一个请求,比如调整 id 为 xx 的文件的一些信息等等。问题来了:JMeter 是不知道上传后文件的 id 的,第二个请求势必从第一个请求的返回结果中提取出文件 id,然后依此为参数发起第二次请求。那么 JMeter 如何把上一个请求的结果作为下一个请求的参数呢?本文将介绍如何使用正则提取器解决这个问题。
  1. 提参采样器添加正则表达式提取器
  比如上传采样器是/upload/batchImport/merAdd/20141124/1(因为我们需要从其返回数据中提取我们需要的参数,本文我们称之为"提参采样器"),文件修改请求采样器是 /merServPlat/merInfo/import/add.json(因为它将要使用我们提取的参数,即参数化,本文我们称之为"用参采样器")。
  /upload/batchImport/merAdd/20141124/1上传文件成功之后,服务器会返回 /batchImport/merAdd/20141124/1/201411201455.xls:
  JMeter GUI 视图中右击该采样器打开右键菜单 -> 添加 -> 后置处理器 -> 正则表达式提取器,打开"正则表达式提取器"会话页面并编辑其内容如下:
  • 引用名称是/merServPlat/merInfo/import/add.json 请求将要引用到的变量名;
  • 正则表达式是提取你想要内容的正则表达式,小括号()表示提取,也就是说对于你想要提取的内容需要用它括起来;
  • 模板是使用提取到的第几个值。因为可能有多个值匹配,所以要使用模板。从 1 开始匹配,依次类推。这里只有一个,所以填写 $1$ 即可;
  • 匹配数字表示如何取值。0 代表随机取值,1 代表全部取值。这里只有一个,填 1 即可;
  • 缺省值表示参数没有取到值的话,默认给它的值。一般不填。
  2. 用参采样器的参数化
  比如文件修改请求采样器 /merServPlat/merInfo/import/add.json 的请求是:
  /merServPlat/merInfo/import/add.json?file=%2FbatchImport%2FmerAdd%2F20141124%2F1%2F0000000.xls
  中间带有的 %2F 是将 / 转义处理。我们只需要把第一步提取到的参数放进去即可:
  /merServPlat/merInfo/import/add.json?file=%2FbatchImport%2FmerAdd%2F20141124%2F1%2F${anycall}.xls
  3. 添加 Debug Sampler 以对正则提取器进行调试
  JMeter GUI 视图中右击 Thread Group 打开其右键菜单 -> 添加 -> Sampler -> Debug Sampler。
  4. 添加察看结果树以监听观测执行情况
  JMeter GUI 视图中右击 ThreadGroup 打开其右键菜单 -> 添加 -> 监听器 -> 察看结果树
  5. 执行线程组以调试验证正则提取器
  CTRL + R 执行线程组,察看结果树的相关报告如下。
  提参采样器 /upload/batchImport/merAdd/20141124/1 响应数据:
  用参采样器/merServPlat/merInfo/import/add.json 的请求:
  Debug Sampler 的跟踪情况:
  证明我们的正则表达式提取参数成功。
  后记
  除了正则提取器,对于返回结果为 xml 或者 json 内容的请求,JMeter分别有 XPath Extractor、JSON PathExtractor 等提取器进行提取。
  博为峰网校推出Jmeter基础通关课程,2016年11月16日开课,限时优惠,上课便捷,10堂课就能变身Jmeter性能测试大咖!快联系客服预约吧!QQ 3456844001  


TAG: 性能测试 Jmeter jmeter

 

评分:0

我来说两句

Open Toolbar