• Jmeter——关联(正则表达式)


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

    Jmeter关联:

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

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

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

    正则表达式提取器:

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

    提取单个字符串

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

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

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

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

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

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

    提取多个字符串

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

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

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

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

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

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

    引用名称: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}进行使用。

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

    正则表达式提取器详解:

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

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

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

    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表示随机取匹配值, 负数取所有值。

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

    二次提取:

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

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

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

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

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

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

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

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

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

    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

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

  • 相关阅读:
    LinkedList源码浅析
    ArrayList/Vector/Stack底层分析
    遮罩层
    重写alert方法,去掉地址显示
    继承属性的函数
    为什么手机网页点击输入框的瞬间会出现灰色背景呢?怎么去掉灰色背景?
    伪类before和after
    五星好评
    String[]字符串数组,按字典顺序排列大小
    jquery ajax的load()方法和load()事件
  • 原文地址:https://www.cnblogs.com/hong-fithing/p/7650762.html
Copyright © 2020-2023  润新知