Jmeter脚本调试——关联(正则表达式)

时间:2022-12-04 19:46:53

关联,在脚本中,是必应用到的一个设置方法,将脚本中,每次都会动态变化的特殊值进行关联。一个能正确执行的脚本,都需要进行关联(LR、jmeter)。

Jmeter关联:

在脚本回放过程中,客户端发出请求,通过Jmeter中的正则表达式提取器所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法称作关联。通俗点说,就是把脚本中某些写死的(hard-coded)数据,转变成撷取自服务器所送的、动态的、每次都不一样的数据。

关联分两种,提取单个字符串和多个字符串。

先添加正则表达式提取器,如下所示:

Jmeter脚本调试——关联(正则表达式)

正则表达式提取器:

允许用户从服务器的响应中通过使用perl的正则表达式提取值。该元素会作用在指定范围取样器,用正则表达式提取所需值,生成模板字符串,并将结果存储到给定的变量名中。

提取单个字符串

假如想匹配Web页面的如下部分:name="csrf_token" value="d574d4d2c0b9f499"/>并提取d574d4d2c0b9f499。

Jmeter脚本调试——关联(正则表达式)

提取该值,正则表达式写为:name="csrf_token" value="(.+?)"/>。

Jmeter脚本调试——关联(正则表达式)

将脚本中的相应值改为如下所示即可:

Jmeter脚本调试——关联(正则表达式)

可在正则下添加一个取样器,如下所示,可以清楚看到正则提取出来的值

Jmeter脚本调试——关联(正则表达式)

运行脚本,可以查看到如下结果:

token=59783be4af34337b
token_g=1
token_g0=name="csrf_token" value="59783be4af34337b"/>
token_g1=59783be4af34337b

Jmeter脚本调试——关联(正则表达式)

提取多个字符串

假如想匹配Web页面的如下部分:

name="csrf_token" value="d574d4d2c0b9f499"/>并提取csrf_token和d574d4d2c0b9f499。

添加正则提取器,写入正则表达式,如下所示,正则表达式为:name="(.+?)" value="(.+?)"/>。

Jmeter脚本调试——关联(正则表达式)

这样就会创建2个组,分别用于$1$和$2$

在参数值地方设置为如下:

Jmeter脚本调试——关联(正则表达式)

运行脚本,查看到的结果如下所示:

Jmeter脚本调试——关联(正则表达式)

引用名称:token

模板:$1$$2$

如下变量的值将会被设定:

token=csrf_tokenc8cd334fb5197a2a

token_g=2

token_g0=name="csrf_token" value="c8cd334fb5197a2a"/>

token_g1=csrf_token

token_g2=c8cd334fb5197a2a

在需要引用地方可以通过:${ token_g1}, ${ token_g2}进行使用。

说了这么多操作,可能看起来有些地方不明白,也不知道意思,那现在就来点理论补充。

正则表达式提取器详解:

先看一张图,就是正则提取器的面板,如下所示:

Jmeter脚本调试——关联(正则表达式)

名称: 随意设置, 最好具有业务上的意义, 方便区分

注释: 随意设置, 一般不填写

Apply to: 应用范围, 包含4个选项。

  Main sample and sub-samples: 匹配范围包括当前父取样器并覆盖子取样器。

  Main sample only: 匹配范围是当前父取样器(一般默认选择这个) 。

  Sub-samples only: 仅匹配子取样器。

  Jmeter Variable: 支持对Jmeter变量值进行匹配。

要检查的响应字段: 针对响应数据的不同部分进行匹配, 共七个选项。

  主体: 响应数据的主体部分, 排除Header部分; Http协议返回请求的主体部分就是

  Body:(一般默认选择这个)

  Body(unescaped) : 针对替换了转义码的Body部分。

  Body as a Document: 返回内容作为一个文档进行匹配。

  信息头: 只匹配信息头部分的内容。

  URL: 只匹配URL链接。

  响应代码: 匹配响应代码, 比如状态码200代表成功等。

  响应信息: 匹配响应信息, 比如”成功” “OK”等。

  引用名称: 即下一个请求要引用的参数名称, 如填写token, 则可用${token}引用它。

正则表达式: 正则表达式提取器根据该处的设置进行信息匹配

模板: 用$$引用起来, 如果在正则表达式中有多个正则表达式, 则可以是$1$, $2$等等, 表示解析到的第几个值给token, $1$表示第一个模板, $0$表示全文匹配。

匹配数字: 用正则表达式匹配的时候, 可能出现多个值的情况, 为正数用来确定取一组值中的第几个, 为0表示随机取匹配值, 负数取所有值。

默认值: 如果没有匹配到可以指定一个默认值。

二次提取:

大家可能对二次提取不理解,看个例子就明白,以百度一下,你就知道举例:

先获取到百度首页的标题,如下所示:

Jmeter脚本调试——关联(正则表达式)

然后再添加一个提取器,如下:

Jmeter脚本调试——关联(正则表达式)

运行脚本,查看结果,如下所示:

Jmeter脚本调试——关联(正则表达式)

这样就取出百度一下,你就知道,以及一下,你就。

正则表达式匹配注意事项:

  如果不能匹配,那么显示变量名称,如  ${token}

正则的操作符与含义如下所示:

Jmeter脚本调试——关联(正则表达式)

在提取字符中的正则表达式详解:

Jmeter脚本调试——关联(正则表达式)

1、引用名称:下一个请求要引用的参数名称,如填写token,则可用${token}引用它。

2、正则表达式:

    ():括起来的部分就是要提取的。

    .:匹配任何字符串。

    +:一次或多次。

    ?:不要太贪婪,在找到第一个匹配项后停止。

3、模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给token。如:$1$表示解析到的第1个值

4、匹配数字:0代表随机取值,1代表全部取值,通常情况下填0

5、缺省值:如果参数没有取得到值,那默认给一个值让它取。

在正则表达式中加问号?与不加的区别:

<img src="test.jpg" width="60px" height="80px"/>

正则表达式:<img src="(.+?)"

提取到的值为:test.jpg

正则表达式:<img src="(.+)"

提取到的值为:test.jpg" width="60px" height="80px

这样一说应该就全明白,希望对大家有所帮助。

Jmeter脚本调试——关联(正则表达式)的更多相关文章

  1. Jmeter脚本调试之关联----(正则表达式)

    脚本调试 关联,在脚本中,是必应用到的一个设置方法,将脚本中,每次都会动态变化的特殊值进行关联.一个能正确执行的脚本,都需要进行关联(LR.jmeter). Jmeter关联: 在脚本回放过程中,客户 ...

  2. JMeter中的关联-正则表达式提取&lpar;2&rpar;

    JMeter获取正则表达式中的提取的所有关联值的解决方法: 需求如下: { : ", : "results": : [ : : { : : : "total_e ...

  3. JMeter中的关联-正则表达式提取&lpar;1&rpar;

    运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联. jmeter之关联 的个人理解: 关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数 ...

  4. jmeter脚本调试过程

    1.添加监听器:查看结果树,再回放脚本 2.权限验证,例如:cookies a.谷歌浏览器F12获取session

  5. 调试JMETER脚本的5种方法

    如果你曾经设计过JMeter脚本,我敢打赌你至少有一次弄清楚Json Extractor无法正常工作的原因.你猜怎么着?我去过那儿! 你知道为什么最好的JMeter Performance Engin ...

  6. Jmeter调试脚本之关联

    前言: Jmeter关联和loadrunner关联的区别: 1.在loadrunner中,关联函数是写在要获取变量值的页面的前面,而在就Jmeter中关联函数是要写在获取变量函数值的页面的后面 2.在 ...

  7. Jmeter关联&comma;正则表达式提取器使用1

    Jmeter关联,正则表达式提取器使用    一.Jmeter关联的方式: Jmeter中关联可以在需要获取数据的请求上 右键-->后置处理器 选择需要的关联方式,如下图有很多种方法可以提取动态 ...

  8. jmeter的关联-正则表达式的应用

    LoadRunnner中的关联为web_reg_save_param,查找左右边界,下次请求的时候会用到上次请求服务器返回的数据,那么我们把符合左右边界的数据保存下来,以便下次请求的时候用到. jme ...

  9. jmeter实现接口关联的两种方式:正则表达式提取器和json提取器看这篇就够了

    一.前言在开展接口测试或者是接口面试的过程中,我们会发现很多接口需要依赖前面的接口,需要我们动态从前面的接口返回中提取数据,也就是我们通常说的关联. 关联通俗来讲就是把上一次请求的返回内容中的部分截取 ...

随机推荐

  1. 解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错

    前言:在空间里回顾了我的2014,从生活.技术.家庭等各方面对自己进行总结剖析,也是给自己一个交代.也想在博客上专门写一篇2014年度菜鸟的技术路回忆录,但是因为各种事一再耽搁了,现在来写也就更显得不 ...

  2. perl reverse 函数

    参考 http://www.perlcn.com/perlbc/perljc/315.html 使用reverse操作符时,perl会先计算变量的值,也就是=右边的值,然后再进行复制,如果revers ...

  3. 为什么接口类型可以直接new&quest;

    Runnable rn = new Runnable() { public void run() { } }; 实际相当于,jdk会自动生成一个匿名内部类,完成职责: class Anomymous ...

  4. Qt使用默认浏览器打开网页

    #include <QDesktopServices> #include <QUrl> QDesktopServices::openUrl(QUrl("http:// ...

  5. &lt&semi;c&colon;if&gt&semi;判断两个&lt&semi;c&colon;forEach&gt&semi;里的数据是否相等

    问题:两个<c:forEach>嵌套,里面循环的值和外面的值进行比较(里层里的PARENTID是否等于外层的ID),如果相等就显示. <c:forEach items="$ ...

  6. thinkphp5源码解析&lpar;1&rpar;数据库

    前言 tp5的数据库操作全部通过Db类完成,比较符合国人的习惯,比如简单的Db::query().Db::execute(),还有复杂的链式操作Db::where('id=1')->select ...

  7. HBase源代码分析之HRegion上MemStore的flsuh流程(一)

    了解HBase架构的用户应该知道,HBase是一种基于LSM模型的分布式数据库.LSM的全称是Log-Structured Merge-Trees.即日志-结构化合并-树. 相比于Oracle普通索引 ...

  8. 偶遇vue-awesome-swiper的坑

    最近用vue重构一个移动端的项目,碰到了不少坑,今天拿移动端最著名的轮播插件swiper为例来说,由于这个项目没用UI库,纯手写的样式,沿用老的插件,自然而然的选择了vue-awesome-swipe ...

  9. python数据类型分类以及运算类型

    一.python数据类型 目录: 1.数字(整数.小数) 2.字符串(单引号.双引号.三引号) 3.元组 #元素确定之后不能修改 4.列表 #元素可以修改 5.集合  #不讲顺序,得到的结果没有重复元 ...

  10. js auto hover button &amp&semi; html5 button autofocus

    js auto hover button & html5 button autofocus input // html 5 <input name="myinput" ...