11.JMeter关联初识


目录

0、JMeter关联

1、正则表达式提取器

2、json提取器

3、匹配到多个值这种可以如何使用?

4、跨线程组做关联


0、JMeter关联

  • 关联

    • 关联是通过JMeter元件从服务器的响应数据中提取动态数据的过程
      • 动态数据可以应用于后续的取样器请求等

        • 比如sessionid,token等
        • 你想象一下,你的业务接口,比如获取订单,你是不是每次都得带上你的登录信息(一般是在header里面设置的)

        • 但是每次登陆的token是不是不一样,难道你每次手动去调用一下登录接口,拿到token,然后再手动copy进去获取订单的header里面去修改吗

        • 肯定麻烦呀,所以就有了动态获取到登录接口返回的token值,再动态的设置到你的后续接口中去使用的这样一种场景

  • 关联类型:

    • 1)cookie的关联,可以用cookie管理器<这种方式现在基本很少用,知道有这种就ok了>
    • 2)比如token这种,就是通过后置处理器如json提取器、正则表达式提取器、xpath提取器等将返回值提取出来,作为后续接口使用

  • 后置处理器

    • 是JMeter的关联元件
    • 可以从服务器响应数据中查找需要的数据

  • 诸多的后续处理器元件可以适用于不同的关联和信息抽取场景

  • 关联只需要会正则表达式提取器和json提取器,一般就够用了,不够用再去研究,大同小异!


1、正则表达式提取器

  • 说明:

    • 引用名称
      • 请求要引用的变量名称,如填写numer,可以使用${number}来引用
    • 正则表达式

      • 匹配需要的内容
    • 模板

      • 用$num$引用起来
      • 如果在正则表达式中有多个匹配数据,num表示匹配到的第几个值给变量

      • 如$1$表示匹配到的第1个值存储在变量中

      • 比如正则表达式有3个小括号【这就表示有3组值咯】,而上面的定义的变量只有一个,这个时候,你取哪个呢?

        • $1$表示取的是第1个小括号里面匹配到的值赋值给变量
        • $2$表示取的是第2个小括号里面匹配到的值赋值给变量

        • $3$表示取的是第3个小括号里面匹配到的值赋值给变量

      • 匹配数字(0代表随机)

        • 0代表随机取值,-1代表全部取值
        • 【如果你不确定,就不填】

      • 缺省值

        • 如果参数没有取到值,那默认给一个值让它取
  • 示例1:

    • 单个值提取
    • 第一个get请求的返回数据里面取一个值,作为我第二个post请求的body里面的参数

  • 示例2:

    • 通过正则表达式提取器一次提取多个值
    • 使用的语法是,${变量名_g数字} # 数字就是你要取第几个匹配到的值

    • 这种不知道怎么写的话,是可以通过加一个调试取样器来帮助查看的


2、json提取器

  • json提取器的语法:

  • $
    • 表示根节点下的所有数据
  • .或者[]

    • 表示子节点,如$.store表示根节点下的store节点下的所有数据, $[store]一样,常用"."的方式
  • ..

    • 可以实现递归搜索【说白了,就是任意节点】,如 $..title表示搜索json中所有key为title属性的值
  • *

    • 通配符,表示任何元素,如$.*.book表示根节点下所有节点的book节点数据
  • @

    • 在表达式中使用,表示当前节点对象
  • ['<name1>','<name2>']

    • 如$..['author','price']表示所有节点中author和price的值

  • [<number1>,<number2>]

    • 如$..[1,2] 表示所有节点中下标为1和2的节点的值,常用于数组
  • $..book[2]

    • 表示取json中book数组的索引为2的值
  • $..book[0:2]

    • 表示取json中book数组的索引为0到2的值
  • [?(<expression>)]

    • 过滤器表达式,表达式结果必须为布尔值
  • $..book[?(@.isbn)]

    • 表示取book数组下有名为isbn属性的节点数据
  • $..book[?(@.isbn and @.price>10)]

    • 表示取book数组下有名为isbn属性且价格属性值大于10的节点数据
    • "and"如果报错,可以换用"&&"

    • 当然或者可以用"||"

  • 后置处理器的json提取器用于对返回结果【json形式的】进行提取

  • 必须作为取样器的子级添加,类似正则表达式提取器

  • 说明:

    • Apply to
      • 应用范围
    • Names of created variables

      • 自定义的变量名,如果要提取多个值,你需要定义多个变量,那么用分号";"进行分隔
    • JSON Path expressions

      • 自定义的json提取表达式,同样的,你需要定义多个提取的表达式,那么用分号";"进行分隔
      • 【tips】:如果你多个写出来有问题, ---> 变通下,用单个的不是一样的吗,只不过多加几个提取器而已呗

    • Match No.

      • 0 表示随机
      • n 数字表示匹配到的第n个值

      • -1 表示匹配所有

    • Compute concatenation var (suffix _ALL)

      • 如果提取到了多个值,会用", "相连,存储到 _ALL的变量中去
    • Default Values

      • 默认值,就是你提取不到值的时候【可能你写错了,也可能返回数据没有】,给个值
  • 基本使用:

    • ①、一个变量的情况:
      •         
    • ②、多个变量的情况 - 1:

      • 提取多个值:比如要title,folderid,要fullName
        • 如果有多个值,那么这些填写的值要一一对应,缺一不可!否则报错,包括:

        • 多个变量名
        • 多个json表达式

        • 多个匹配取值 - 如果你的json表达式提取到的只有1个值,就写0,这里很容易报错

        • 多个默认值

        • 【都要写,还要数量一致】

      • ③、多个变量提取 - 示例2

        •             


3、匹配到多个值这种可以如何使用?

  • 1)可以获取到一个计数器,拿来做循环

    • 比如你用json提取器获取title【这个title可能有多个值】,会生成一个叫title_matchNr的值,这里就是8
  • 2)起一个循环控制器,多少次呢,就是用这个${title_matchNr}来做循环次数

  • 3)里面写调试代码,这里用java请求,打印出值

  • 4)注意,这里这个变量是 "title_数字" 的形式,又需要做处理

    • 结合JMeter内置的计数器 ${__counter(,)}和变量组合的函数
    • 生成一个函数为,${__V(title_${__counter(,)},)}

  • 5)优化java的sampler,写入这个变量,然后调用即可


4、跨线程组做关联

  • 案例说明:

    • 首先,有两个线程组,一个是请求天气接口的,一个是请求百度接口的
    • 然后请求百度接口的线程组需要用到上一个线程组的响应数据

    • 这个时候,就相当于跨线程组这样的数据共享了

  • 解决方式:

    • 1)测试方案那里,需要设置线程组执行的一个串行方式
    • 2)线程组的天气接口,配置好了

      • http://www.weather.com.cn/data/sk/101010100.html
      • 配置json提取器

      • 还可以配一个调试取样器【这个主要就是看下json提取器有没有提取到值的,作为一个调试作用】

    • 3)线程组里面需要用到Bean Shell取样器或者JSR取样器,这样将变量设置为JMeter的属性,这样才能跨线程组共享

      • 需要用到函数__setProperty()
      • ${__setProperty(cityid_P,${cityid},)}

      • 里面的cityid_P 这个是设置到JMeter属性里面的自定义的值

      • ${cityid}这个是json提取器里面提取到的值存放的变量

    • 4)做第二个线程

      • 使用我们在第一个线程里面做的JMeter属性
      • 但是需要注意,我们需要使用property函数或者P来获取

      • ${__property(cityid_P,,)}
    • 5)添加查看结果树,调试代码

      • 整个步骤:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值