JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器

有这样一个压力测试环境,有一个上传页面,上传成功之后服务器会返回一些上传信息(比如文件的 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 视图中右击 Thread Group 打开其右键菜单 -> 添加 -> 监听器 -> 察看结果树
        5. 执行线程组以调试验证正则提取器
        CTRL + R 执行线程组,察看结果树的相关报告如下。
        提参采样器 /upload/batchImport/merAdd/20141124/1 响应数据:

        用参采样器 /merServPlat/merInfo/import/add.json 的请求:

        Debug Sampler 的跟踪情况:

        证明我们的正则表达式提取参数成功。
        后记
        除了正则提取器,对于返回结果为 xml 或者 json 内容的请求,JMeter 分别有 XPath Extractor、JSON Path Extractor 等提取器进行提取。
        参考资料

时间: 2024-08-24 13:36:05

JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器的相关文章

正则表达式提取器--jmeter将上一个请求的结果作为下一个请求的入参

接口测试时需要将不同的接口串联起来,如将登录接口的出参UserStatusToken作为获取客户列表这个接口的入参,这样才能识别你是否是合法的用户. 1.创建一个线程组 选中测试计划-->右键-->添加-->Threads(Users)-->线程组 2.创建一个获取凭证的请求 在刚刚创建的线程组上右键-->添加-->Sampler-->HTTP请求 3.创建后置处理器 选中刚才添加的HTTP请求-->右键-->添加-->后置处理器-->正则

Jmeter 实现上步请求返回结果 用于下步请求参数

1.新建测试计划,测试计划下方新增:HTTP请求默认值.HTTP信息头管理器.HTTP cookie管理器,见图 2.新建线程组,线程组下方新建事务控制器,见图 每一个事务控制器下方新增http请求 3.计数器实现批量新增不重复数据 4.引用计数器,批量生成数据 5.使用正则表达式提取器,实现上步请求返回结果 用于下步请求参数

018给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点“(keep it up)

给定二叉查找树的一个结点, 写一个算法查找它的"下一个"结点(即中序遍历后它的后继结点), 其中每个结点都有指向其父亲的链接. 这个题本质就是线索化二叉树时找后继结点的题.找后继结点存在两种情况: 1 如果当前结点有右孩子,则后继结点为右孩子的最左结点 2 如果没有右孩子, A 当前结点为父结点的左孩子,则父结点就是后继结点 B 当前结点为父结点的右孩子,则向父结点找,直到当前结点不是父结点的右孩子终止,此时 父节点就是后继结点 代码: struct TreeNode { int da

点击上一个为上一张图片,点击下一个为下一张图片

如图效果 原理: 大体上还是一个简单的选项卡,但是由于上一个和下一个固定,点击第几下的时候,是第几张图片,所以,要对点击的次数做一个定义,即iNum;同时,点击“下一个”的时候,点击的次数要依次递增,如果点击的次数大于等于图片的个数的时候,要回归到第一张图片:点击“上一个”的时候,点击的次数要依次递减iNum可能会0:为0的时候,为第一张图片,那么在递减一下,iNum就为负数了,而这个负数其实就应该让图片回归到最后一张图片,最后一张图片的下标就是全部图片的个数-1 代码如下: 1 <!docty

一个js程序:离下一个圣诞节还有多少天?

话不多说上代码: //离下一个圣诞节还有多少天 var now=new Date(); var christ=new Date(); var year=now.getFullYear(); christ.setMonth(11); christ.setDate(25); var diff; var theTime; if(now.getTime()<=christ.getTime()) { diff=christ.getTime()-now.getTime(); theTime=parseInt

postman将上一个请求的值传给下一个请求的参数

原文地址:http://blog.51cto.com/3175096/2091958

jquery点击li标签之后在该li标签上添加一个class,点击下一个li时删除上一个li的class

思路:点击当前li元素后是用removeClass()删除所有兄弟元素(使用siblings()获取)的class样式,然后使用addClass()为当前li添加class 具体演示如下: 1.HTML结构:设计三个li元素 <ul id="test"> <li>Glen</li> <li>Tane</li> <li>John</li> </ul> 2.css样式:设计一个类selected

Postman 如何处理上一个接口返回值作为下一个接口入参?

今天做接口测试,有一个接口的参数是一个校验 token,会实时更新,开发提供了一个单独返回实时 token 的接口,所以就需要在功能接口使用时调用 token 接口的返回值,作为功能接口的参数来使用. 网上搜了一下,都没有现成的使用说明,刚才研究出来了,就记录下步骤,方便后面的同学. 如果返回 token 的接口的返回值,是标准的 JSON 格式的话,就很简单的两步就行了. 1.token 接口设置全局变量 第一步就是执行 token 接口,并把接口返回值里面的 token 值,赋值给一个全局变

jmeter正则提取器提取指定位置的字符串

1.需求:提取登录后的凭证ticket供系统其他接口调用 2.登录接口返回的格式如下: { "ret_code":0, "ret_msg":"login success", "data":"http://IP:port/authredirect?ticket=eyJhbGciOiJIUzUxMiJ9.eyJzY29wZXMiOjIxNzksImlzcyI6ImZ1cWluZ0B0cmF3ZS5jbiIsImlhdCI