JMeter接口测试-3.断言及参数化测试

1. 断言

JMeter官方断言(Assertion)的定义

  • 用于检查测试中得到的响应数据是否符合预期,用于保证测试过程中的数据交互与预期一致

断言的目的:

  • 一个取样器可以添加多个不同形式的断言,根据你的检查需求来添加相应的断言,当Sampler下所有的断言都通过了, 那才算取样器HTTP请求验证成功。

常用四种断言

一、Response Assertion(响应断言)
二、JSON Assertion(JSON断言)
三、Duration Assertion(持续时间断言)
四、beanshell 断言(自由断言)

1.1 Response Assertion(响应断言)

作用:判断响应的报文内容
作用对象包含: 响应文本、响应内容、响应状态码、响应信息等

案例

  • 登录用例结果验证

操作步骤:

1. 测试计划-线程组
2. 线程组-HTTP请求
3. HTTP请求->断言->响应断言
4. 测试计划->监听器->察看结果树
5. 测试计划->监听器->断言结果

响应断言详解

  1. Apply to:断言应用的范围

    • 通常发出一个请求只触发一个请求,所以勾选“main sampie only”就可以;若发一个请求可以触发多个服务器请求,就有main sample 和sub-sample之分了
    • Jmeter Variable Name to use
      • 作用于Jmeter变量(输入框中可输入Jmeter的变量名称)
  2. 测试字段:

  • 响应文本
    • 一般的http响应,都勾选“响应文本”
    • 匹配从服务器返回的响应文本(不包括Response Headers)
  • 响应代码
    • http响应代码,如101,200,302,404,501等
    • 当我们要验证404,501等http响应代码时,需要勾选“忽略状态”
    • 因为当http 响应代码为400,500时,jmeter默认这个请求时失败的
  • 响应信息
    • 响应代码对应得响应信息,例如“OK"
  • 响应头
    • 匹配响应头
  • 请求头
    • 匹配请求头
  • url样本
    • 对取样器的url进行断言,如果请求没有重定向,就请求url,如果有重定向,就请求url和重定向url
  • 文档(文本)
    • 匹配文档内容
  • 忽略状态
    • 一个请求多项响应断言时,忽略某一项断言的响应结果,而继续下一项断言
  • 请求数据
    • 匹配请求数据
  1. 模式匹配

    • 包括
      • 返回结果包括你指定的内容,支持正则匹配
    • 匹配
      • 相当于 相等 。当返回值固定时,可以返回值做断言,效果和相等相同
      • 正则匹配 。 用正则表达式匹配返回结果,但必须全部匹配。 即正则表达式必须能匹配整个返回值,而不是返回值的一部分
    • 相等
    • 返回值固定时,与返回值验证
    • 不支持正则匹配
    • 同时对大小写敏感
    • 字符串
      • 指返回结果包括你指定的内容,
      • 与包括类似,但是字符串不支持正则匹配
      • 同时对大小写敏感
      • 就相当于取反
      • 如果断言结果为true,勾选“否”后,断言结果为false
      • 如果断言结果为false,勾选“否”后,断言结果为 true
  2. 要测试的模式

    • 输入结果期望值(空格要去掉)

    • 需要匹配的正则表达式、字符串。可以添加多项,每一项会分开进行验证,若某一项验证失败,则其后的不会再进行验证。

    • 可配置多个验证内容,如下图显示

      在这里插入图片描述

  3. 自定义失败消息

    • 失败时,可自定义显示的信息
    • 例如:“失败了,看看日志吧”

1.2 JSON Assertion(JSON断言)

作用: 针对JSON文档的校验

在这里插入图片描述

JSON断言详解:

  • Assert JSON Path exists

    • Additionally assert value
      • 选中进行验证断言内容
    • Match as regular expression
      • 使用正则表达匹配
  • Expected Value

    • 期望结果内容
  • Expect null

    • 预期为null
  • Invert assertion(will fail if above conditions met)

    • 取反,上面的不符合pass,上面的有符合的fail

JSON断言规则

$ 根节点
@ 现行节点
. 子节点
…不管位置,选择所有符合条件的
* 匹配所有元素节点
[,] 支持迭代器中做多选
?() 支持过滤操作
[] 迭代器的标示,子元素操作符
() 支持表达式计算

案例:

  • 商品信息接口用例结果验证

实现步骤:

  • HTTP取样器-商品信息接口
  • 在HTTP取样器下面创建JSON断言
  • 配置JSON断言
  • 在这里插入图片描述

1.3 Duration Assertion(持续时间断言)

判断是否在给定的时间内返回响应结果

作用: 断言服务器响应请求的时间是否小于指定值;
在这里插入图片描述

  • 持续时间(毫秒):
    • 这里的持续时间为毫秒,比如:10 毫秒。
  • 断言响应时间是否超过设置的值(10),如果超过则断言失败,反之成功

2. 接口参数化

2.1 介绍

参数化使用场景

1. 多个请求都是同一个ip地址,若服务器地址更换了,则脚本需要更改每个请求的ip
2. 注册账号,不允许账号重复;想批量注册用户时
3. 模拟多个用户登录,需要用到不同用户信息登录时

JMeter参数化的概念

  • 进行测试时,若要求每次迭代的数据不一样时,则需进行参数化,然后从参数化的文件中来读取测试数据。
  • 自动化测试脚本的一种常用技巧,可将脚本中的某些输入使用参数来代替,如登录时利用GET/POST请求方式传递参数的场景,在脚本运行时指定参数的取值范围和规则
  • 脚本在运行时,根据需要选取不同的参数值作为输入

参数化的四种方式及使用场景对比

参数化使用场景
1CSV Data Set Config适用于参数取值范围较大的时候使用,该方法具有更大的灵活性
2User Parameters适用于参数取值范围很小的时候使用
3User Defined Variables一般用于Test Plan中不需要随请求迭代的参数设置,如:Host、Port Number
4函数可作为其他参数化方式的补充项,如:随机数生成的函数${__Random(,)}

上述四种方案是互补的,我们可以根据参数化具体场景,选择合适方案

2.2 用户定义的变量

应用场景:

  • 用户可根据需求自定义相应的变量,一般做全局变量使用。

介绍:

​ 用户自定义变量中的定义的所有参数的值在测试计划的执行过程中不能发生取值的改变,因此一般仅将测试计划中不需要随迭代发生改变的参数(只取一次值的参数)设置在此处

案例:

​ 使用定义的变量替换Http请求对应参数值,变量使用格式为:${变量}

步骤:

  • 1.测试计划->线程组->配置元件->用户定义的变量

总结:

  • 测试计划下方也有用户定义变量,用法同上
  • 每一个变量分为变量名称和变量值
  • 同一个变量只能有一个变量值。

2.3 用户参数

使用场景

  • 适合少量参数化需求场景使用

操作步骤:

  1. 添加->前置处理器->用户参数
  2. 设置参数项、参数值
  3. 配置HTTP取样器界面的请求参数

在这里插入图片描述

2.4 CSV Data Set Config

使用场景:

  • 适用于各种复杂场景
  • 参数化用的最多的元件

介绍

  • 按照规定的格式读取并将文本解析成对应的变量,可以供其它模块使用。

案例

  • 登录测试用例

操作步骤

1、创建参数化文件:CSV

2、线程组中添加并配置CSV Data Set Config

3、引用csv文件中的数据

4、设置执行次数运行并查看结果

2.4.1 CSV介绍

  • 英文全称:Comma-Separated Values

  • 以纯文本的形式存储表格数据逗号分隔值,是一种简洁且常见的数据存储格式

  • 用文本文件、Excel都可以打开CSV文件

  • 参数文件格式:无BOM的UTF-8格式

在这里插入图片描述

2.4.2 配置CSV Data Set Config

官网:https://jmeter.apache.org/usermanual/component_reference.html#CSV_Data_Set_Config

在这里插入图片描述

  1. 文件名
  • 配置数据源: 文件路径+文件名+后缀名 如:d:/a.txt;

    • 建议使用相对路径,路径一般对当前项目同级目录

      • 目录结构

        在这里插入图片描述

      • 相对路径

        在这里插入图片描述

      • jmeter默认先去bin目录下查找,然后去脚本目录下查找

  1. 文件编码

    • 默认使用当前操作系统的编码格式
    • 如果文件中包含中文乱码时,可尝试utf-8、gbk等
      • 解决1:修改文件格式属性为utf8
      • 解决2:设置文件编码格式为gb2312
    • 变量名称
      • csv文件中各列的名字(有多列时,用英文逗号隔开列名)
      • 名字顺序要与内容对应,这个变量名称是在其他处被引用的,所以为必填项。
  2. 忽略首行

    • 第1行可以不是测试数据
  3. 分隔符:隔开变量的分隔符

    • 一般情况下,分隔符为英文逗号,保持默认就行
  4. 是否允许带引号

    • 测试数据中有引号操作
    • 此项实际是控制csv文件中的双引号是否为有效字符
    • 如果数据带有双引号且此项设置TRUE,则会自动去掉数据中的引号使能够正常读取数据,且即使引号之间的内容包含有分隔符时,仍作为一个整体而不进行分隔;
    • 如果数据带有引号且此项设置为FALSE,则读取数据报错;
    • 如果希望双引号字段中间再包含双引号,则需要加两个双引号来代表单个双引号。
    • 此项设置为true时,“2,3”–>2,3;"4"“5”–>4"5
  5. 结束符再次循环

    • 到了文件尾是否循环,True—继续从文件第一行开始读取,False—不再循环;
  6. 结束符停止

    • 到了文件尾是否停止线程,True—停止,False—不停止
    • 注意:当Recycle on EOF设置为True时,此项设置无效
  7. 共享模式

    • All threads –所有线程,此元件作用范围内的所有线程共享csv数据,每个线程依次读取csv数据,互不重复

      • 假如说有线程1到线程n (n>1),线程1取了一次值后,线程2取值时,取到的是csv文件中的下一行,即与线程1取的不是同一行。

      • 不管是单个线程组还是多个线程组,每个线程都是依次取下一行。

      • 当一个线程组中有多个请求时,对于每个线程来说,在一次循环中每个请求的取值是一样的。

      备注:

      • 怎么区分不同线程呢?

        • 使用一个函数来判断
          • ${__BeanShell(ctx.getThread().getThreadName().toString())}
            • 输出结果类似线程组1 1-2
            • 前面是当前线程组的名称-线程组1,后面是线程组id,然后是线程id
      • 在All Threads模式下,并发数和循环数都会读取不同的csv数据,但是同一线程组内的多个sampler总是取相同的值。

    • Current thread group—当前线程组,在此元件作用范围内,以线程组为单位,每个线程组内的线程共享csv数据,依次读取数据,互不重复;

      • 以线程组为单位,每个线程组内的线程都会从第1行开始取值并依次往下进行取值
    • Current thread—当前线程,在此元件作用范围内,每次循环中所有线程取值一样

      • 每个线程都会从第1行开始取值并依次往下进行取值,在同一次循环中所有的线程取值一样。

参考:

  • 怎么区分不同线程呢?
    • 使用一个函数来判断
      • ${__BeanShell(ctx.getThread().getThreadName().toString())}
        • 输出结果类似线程组1 1-2
        • 前面是当前线程组的名称-线程组1,后面是线程组id,然后是线程id

在这里插入图片描述

2.4.3 引用csv文件中的数据

  • 将具体值改为变量引用,引用变量:${变量名}
  • 在这里插入图片描述

在这里插入图片描述

2.4.4 设置执行次数

  1. 直接指定线程组的循环次数与CSV文件行数一致(灵活性差,了解即可)

  2. 动态的循环读取文件数据(更灵活)

动态循环读取文件数据

  • 线程组的循环次数设置为永远

  • 修改CSV数据文件设置

在这里插入图片描述

2.5 函数助手

启动jmeter后,可以在JMeter的选项菜单中tools->函数助手对话框

在这里插入图片描述

  • 打开函数助手,可以从下拉列表中选择一个函数,并为其参数设定值,

  • 不同函数要求的参数也不同

  • 表格的左边一列是函数参数的简要描述,右边一列是供用户填充参数的值

详细见jmeter帮助文档

在这里插入图片描述

选择Functions reference

在这里插入图片描述

查看20.4 The Function Helper Dialog

在这里插入图片描述

2.5.1 __CSVRead

在这里插入图片描述

作用:

  • 从一个 CSV 文件中返回一个字符串,支持多个文件名
  • 如果测试用例较多,建议使用 CSV Data Set Config
  • 当第一次调用该函数时,文件将被打开并读取到一个内部数组中。如果检测到空行,这将被视为文件的末尾。
  • 所有对同一文件名的后续引用都使用相同的内部数组,文件名区分大小写。
  • 每个线程都有自己的指向文件数组中当前行的内部指针。
  • 当线程首先引用文件时,它将在数组中分配下一个空闲行,因此每个线程将访问与所有其他线程不同的行(除非数组中的线程多于行)

使用:

  • http请求时参数化username和password
    • 帐号的value为${__CSVRead(./logins.txt,0)}
    • 密码的value值替换为${__CSVRead(./logins.txt,1)}

2.5.2 __Random

随机函数返回位于给定最小值和最大值之间的随机数,这是针对数值类型的(int)

在这里插入图片描述

  • 存储结果的变量名(可选):这个填写了,到时候调用是就用这个做变量名调用

2.5.3 __counter

在这里插入图片描述

  • 每次调用该计数器函数都会产生一个新值,从1开始每次加1。

  • 计数器既可以被配置成针对每个虚拟用户是独立的,也可以被配置成所有虚拟用户公用的。

  • 如果每个虚拟用户的计数器是独立增长的,那么通常被用于记录测试计划运行了多少遍。全局计数器通常被用于记录发送了多少次请求。

  • 计数器使用一个整数值来记录,允许的最大值为 2,147,483,647。

  • 目前计数器函数实例是独立实现的

  • 该函数也有对应的配置元件:计数器,功能类似。

2.5.3 __time

时间函数以各种格式返回当前时间。

1、如果参数为时间戳,那公式为:
${__time(,)} : 默认该公式精确到毫秒级别, 13位数
${__time(/1000,)} : 该公式精确到秒级别, 10位数
2、 如果参数需要为当前日期,那公式为:
${__time(yyyy-MM-dd,)}
${__time(YMDHMS,)}

2.5.5 __property

使用__property__BeanShell配合使用实现跨线程组变量的使用

等讲到关联功能一起给大家进行讲解

2.5.6 __BeanShell

${__BeanShell(vars.put("name"\,"value"))}

3. 关联

什么是关联?

  • 一个请求响应的结果要作为另一个请求提交的数据

注意: 由第一个请求响应的结果,我们在第二次请求中使用, 我们会发现,关联是后置处理器的一部分.

Jmeter关联中常用的两种方式

案例:

  • 个人信息接口用例

实现步骤:

  • 登录接口获取token

  • 个人信息接口HTTP请求头中添加token

  • 发送个人信息接口请求

实现登录接口获取token

  • 正则表达式提取器

3.1 正则表达式提取器

3.1.1 正则表达式提取器配置

实现步骤:

  • 添加元件,添加—后置处理器—正则表达式提取器
  • 配置元件
    • 引用名称:token
    • 正则表达式:{“token”:“(.*?)”,
    • 模板:$1$
    • 匹配数字:1
    • 缺省值:为空或为Not Found
  • 增加调试取样器,用于查看提取变量的内容
  • 运行及调试

在这里插入图片描述

小技巧:

  • 可使用察看结果树:RegExp Tester进行正则表达式的验证

在这里插入图片描述

参数解释:

**Apply to:**应用范围

**要检查的响应字段:**样本数据源。

引用名称:

  • Jmeter变量的名称,存储提取的结果

  • 其他地方引用时的变量名称,如填写title,可自定义设置,引用方法:${引用名称}

  • 例如${title}

正则表达式:

  • 用来匹配服务器响应的数据,()括号里为你要获取的的值。
  • 一般值的名称(键)是不会发生改变的。要获取特定的数据,都会结合不变的内容(左右边界),然后
    将需要提取的服务器数据替换为(.*?)即可
  • 建议在查看结果树中,切换到regexp tester模式,对所写的正则表达式进行测试

模板:

  • 模板:$$格式,属性的作用是用来指定最终存储到参数中的值
  • $1$表示解析到的第1个值,可以理解为将正则表达式中的第一对括号所对应匹配到的值赋值给参数。
  • 如果匹配有2个值,第二个值$2$,以此例推

匹配数字:

  • 正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。
  • -1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1
  • 数字0:就表示将所匹配到的值随机提取一个赋值给参数。
  • 负数:通常是-1,就表示将所有匹配到的值以类似于数组的方式存入参数数组
    • 如果匹配数字为-1,就表示希望对所有数据进行遍历操作
    • 此时需要结合Jmeter的逻辑控制器, -foreach 控制器来实现遍历操作

缺省值:

  • 匹配失败时的默认值。可以不写,如果写通常ERROR

正则表达式

  1. .

    • 匹配任意单个字符
  2. *

  • 匹配前面的子表达式(也可以是一个字符)任意次。
  • 例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于o{0,}
  1. +
  • 匹配前面的子表达式一次或多次(大于等于1次)。
  • 例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
  1. ?
  • 匹配前面的子表达式零次或一次。
  • 例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
  1. \d数字

  2. \w 数字或者字母

  3. {n} 表示n个字符

  4. {n,m} 表示n-m个字符

  5. \s 表示空白符

  6. 括号[] 表示范围,比如:

    [0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线

  7. ^ 表示行的开头,^\d表示必须以数字开头

  8. $ 表示行的结束,\d$表示必须以数字结束

  9. A|B  `可以匹配A或B,如`(P|p)ython`可以匹配`'Python'`或者`'python'
    
  10. () 表示的就是要提取的分组

组合:

  • .* 具有贪婪的性质,匹配到不能匹配为止,最大匹配原则。

  • +或*后跟?表示非贪婪匹配,即尽可能少的匹配,最小匹配原则。

  • .*? 表示在能匹配成功的前提下尽可能少的匹配,最小匹配原则。

  • 安装Dummy插件

    • 这个插件可以模拟服务器返回,相当于一个mockserver了

    • 选项–插件管理–可选插件–Dummy

    • 勾选后,点击Apply Changes and Restart JMeter即可

      在这里插入图片描述

  • Dummy插件使用

    在这里插入图片描述

    • 查看dummy元件

      • 在线程组下添加Dummy取样器(在Dummy取样器的响应数据中填入模拟返回数据)、查看结果树监听器,在Dummy下添加正则表达式提取器、调试后置处理程序(用于查看提取结果的)

      在这里插入图片描述

  • 提取多个内容

    • 以登录接口返回内容为例

    • {"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Ijk1MjY3MzYzOEBxcS5jb20iLCJleHAiOjE1ODEwNDEyOTEsInVzZXJuYW1lIjoicHl0aG9uIiwidXNlcl9pZCI6MX0.Xh1AdjG_a5o9Sg02YnEkpOEpnpr8ZbPF7efImyHaxHM","username":"python","user_id":1}
      
    • 想获取username和user_id拼接成新的字符串

    •  - username_user_id
       - "username":"(.*?)","user_id":(.*?)}
       - $1$_$2$
       - 1
      

      在这里插入图片描述

3.1.2 HTTP信息头管理器

实现:个人信息接口HTTP请求头中添加token

步骤:

  • 查看接口文档:HTTP信息头中添加内容

  • 使用JWT ${token}进行字符器的拼接

    • JWT  ${token}
      #注意JWT与token连接有空格 
      

在这里插入图片描述

备注:

  • 也可以使用函数助手__property来调用token
    • ${__property(token)}

3.1.3 扩展: dummy插件讲解正则表达式:

  • Jmeter插件

  • 下载地址:https://jmeter-plugins.org/downloads/

    • 在这里插入图片描述

    • 安装: 下载后文件为plugins-manager.jar格式,将其放入jmeter安装目录下的lib/ext目录,然后重启jmeter,即可。

    • 启动:启动jemter,点击选项,最下面的一栏,Plugins Manager

      • 在这里插入图片描述

      • Installed Plugins(已安装的插件):即插件jar包中已经包含的插件,可以通过选中勾选框,来使用这些插件

      • Available Plugins(可下载的插件):即该插件扩展的一些插件,可以通过选中勾选框,来下载你所需要的插件

      • Upgrades(可更新的插件):即可以更新到最新版本的一些插件,一般显示为加粗斜体,可以通过点击截图右下角的Apply Changes and Restart Jmeter按钮来下载更新;

      • http://www.jmeter-plugins.org/wiki/Start/,有对应插件的使用说明

  • 安装Dummy插件

    • 这个插件可以模拟服务器返回,相当于一个mockserver了

    • 选项–插件管理–可选插件–Dummy

    • 勾选后,点击Apply Changes and Restart JMeter即可
      在这里插入图片描述

  • Dummy插件使用

    在这里插入图片描述

    • 查看dummy元件

      • 在线程组下添加Dummy取样器(在Dummy取样器的响应数据中填入模拟返回数据)、查看结果树监听器,在Dummy下添加正则表达式提取器、调试后置处理程序(用于查看提取结果的)

      在这里插入图片描述

  • 提取多个内容为一个字符串

    • 以登录接口返回内容为例

    • {"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Ijk1MjY3MzYzOEBxcS5jb20iLCJleHAiOjE1ODEwNDEyOTEsInVzZXJuYW1lIjoicHl0aG9uIiwidXNlcl9pZCI6MX0.Xh1AdjG_a5o9Sg02YnEkpOEpnpr8ZbPF7efImyHaxHM","username":"python","user_id":1}
      
    • 想获取username和user_id拼接成新的字符串

    •  - username_user_id
       - "username":"(.*?)","user_id":(.*?)}
       - $1$_$2$
       - 1
      

      在这里插入图片描述

  • 提取多个内容为多个字符串

    • 单独提取

      在这里插入图片描述

      • 建立2个正则表达式提取器
      • 分别进行正则匹配
        • 在这里插入图片描述

        • 在这里插入图片描述

    • 根据模板$1$$2$进行获取

      • 在这里插入图片描述

      • 在这里插入图片描述

备注:

  • 访问linux,插件jmeter-ssh-sampler
    • https://github.com/yciabaud/jmeter-ssh-sampler/releases

3.2 JSON提取器

用处:
当前接口响应返回的json中提取内容,作为变量可以在不同的请求中传递。如下,从登陆接口返回的json中提取user id,变量名设置为id,在其他请求中可以直接调用这个变量,或者作为post参数。此插件对于restful接口非常好用。

json串 []表示对象组成的数组,{}表示对象。

对象里包含多个 “属性”:属性值。属性值可以是值,或数组,或对象。

官网链接:

  • http://jmeter.apache.org/usermanual/component_reference.html#JSON_Extractor

在这里插入图片描述

步骤:

  • 配置json提取器

参数解释:

  • Names of created variable :保存的变量名,后面使用${Variable names}引用
  • JSON Path expressions:json path表达式
  • Match Numbers:匹配数字(0代表随机,1代表第一个,-1代表所有),后续引用用 变量名_N 取第N个值
  • Compute concatenation var(suffix_ALL):是否统计所有,即将匹配到的所有值保存,名为“变量名_ALL”,使用场景需要获取的值有多个,后面需要对这一组数据进行操作
  • Default Values:找不到时默认值,一般设置为NOT FOUND

备注:

  • $表示接口的返回值
  • 如果取字典key的value,用
  • 如果是取列表的某个值,用索引

名称:json后置表达式的名称,标识作用,建议使用有意义的名字

步骤:

  • 配置json提取器

在这里插入图片描述

备注:

  • 多个数据json表达式为:$.userSession[0].sessionId,提取第一个值。

  • dummy请求结果:多个数据json

  • [{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Ijk1MjY3MzYzOEBxcS5jb20iLCJleHAiOjE1ODEwNDEyOTEsInVzZXJuYW1lIjoicHl0aG9uIiwidXNlcl9pZCI6MX0.Xh1AdjG_a5o9Sg02YnEkpOEpnpr8ZbPF7efImyHaxHM",
    "username":"python","user_id":1},{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Ijk1MjY3MzYzOEBxcS5jb20iLCJleHAiOjE1ODEwNDEyOTEsInVzZXJuYW1lIjoicHl0aG9uIiwidXNlcl9pZCI6MX0.Xh1AdjG_a5o9Sg02YnEkpOEpnpr8ZbPF7efImyHaxHM",
    "username":"python2","user_id":2},{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Ijk1MjY3MzYzOEBxcS5jb20iLCJleHAiOjE1ODEwNDEyOTEsInVzZXJuYW1lIjoicHl0aG9uIiwidXNlcl9pZCI6MX0.Xh1AdjG_a5o9Sg02YnEkpOEpnpr8ZbPF7efImyHaxHM",
    "username":"python3","user_id":3},]
    
  • 在这里插入图片描述

  • 按索引方式取值

    • 方法1:$[0].username 0表示第1个,如果是想选第2个,则$[1].username

    • 在这里插入图片描述

    • 方法2:$[*].username *表示全部数据,Match NO 添加为3,表示取数据中第3个数据

    • 在这里插入图片描述

  • 获取所有数据

    • 所有数据需要Match No添写为-1,sufiix_all需要选中
    • 在这里插入图片描述

扩展:

  • jsonpath在线分析:http://jsonpath.com/

3.3 边界提取器

不需要写复杂的正则表达式,只要填写左右边界即可,和Loadrunner中左右边界值获取值是一样

  • 右键HTTP请求,选择添加->后置处理器->边界提取器

  • 输入参数名称和左右边界(最好是通过JMeter的日志中获取的返回值输入左右边界)

    • 可通过察看结果树-边界提取器测试进行调试
    • 在这里插入图片描述
  • 具体内容如下图:

在这里插入图片描述

3.4 跨线程组的关联

需求:

  • 线程组1编写登录接口用例
  • 线程组2编写个人信息接口用例
  • 实现线程组2成功获取个人信息

实现步骤

  • 线程组1 登录接口添加BeanShell取样器

    ${__setProperty(authorizations,${token},)}
    

KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(au…{token},)}

在这里插入图片描述

  • 线程组2 个人信息接口,修改信息头管理器

    在这里插入图片描述

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值