Jmeter常用断言之BeanShell断言详解

简介: BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本。在这里主要通过 Failure 和 FailureMessage来设置断言结果。Failure = false;-----表示断言成功FailureMessage = “......";---自定义的成功信息Failure = true;----表示断言失败FailureMessage="=".....";---自定义的失败信息

BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本
在这里除了可以使用beanshell的内置变量外,主要通过 Failure 和 FailureMessage来设置断言结果。

Failure = false;-----表示断言成功
FailureMessage = “......";---自定义的成功信息
Failure = true;----表示断言失败
FailureMessage="......";------自定义的失败信息

一、添加断言方式

根据需要可在【测试计划】、【线程组】、【线程请求】下添加断言,一般在对应的【线程请求】下添加,如下图所示,即本文所介绍的。
添加路径:【线程请求-点击右键-添加-断言-最后一个BeanShell断言】
在这里插入图片描述

二、BeanShell断言

响应断言界面设置,如下图:
在这里插入图片描述

2.1.BeanShell断言界面详解

名称】BeanShell断言组件的自定义名称,见名知意最好。
注释】即添加一些备注信息,对该BeanShell断言组件的简短说明,以便后期回顾时查看。
Reset bsh.Interpreter before each call】每个BeanShell测试元素都有自己的解释器副本(对于每个线程)。
如果重复调用测试元素,例如:在循环内,除非选择在每次调用之前重置bsh.Interpreter选项,否则解释器将保留在调用之间。一些长时间运行的测试可能会导致解释器使用大量内存。
由于BeanShell的bsh.Interpreter存在内存泄露,常规方法无法支持长时间的压力测试
JMeter官网推荐,在使用BeanShell进行长时间测试时,打开选项【每次调用前置 bsh.Interpreter】=【Reset bsh.Interpreter before each call**】,则在每次调用BeanShell程序前,都把解释器重置,以释放解释器之前占用的内存。
参数 (-> String Parameters和String[]bsh.args)】输入String参数。String[]bsh.args是主类main函数的形式参数,是一个String 对象数组,可以用来获取命令行用户输入进去的参数。
脚本文件】脚本文件(可以填入脚本文件路径),可以点击后边的浏览选择脚本文件。
脚本】:编写脚本,参照下文定义的变量(使脚本文件参照定义的变量来运行)

2.2.断言源码

状态码断言-源码信息,如下:

//状态码断言
log.info("状态码:" + ResponseCode);
if(ResponseCode.equals("200")){ 
    Failure=false;    // 表示断言成功
}
else{
    Failure=true;    // 表示断言失败
    FailureMessage="响应状态码非200";  // 自定义的失败信息
}
注:字符串只能使用双引号,字符串相等要使用" “.equals(” ")表达式。

响应数据断言-源码信息,如下:

//获取响应数据
String response = prev.getResponseDataAsString();
log.info("响应体:" + response);
//响应数据包含
if(response.contains("token")){
    Failure=false;    // 表示断言成功
}
else{
    Failure=true;    // 表示断言失败
    FailureMessage="响应数据不包含token";
}

三、断言结果查看

3.1.【断言结果】组件

添加路径:【测试计划-点击右键-添加-监听器-断言结果】
在这里插入图片描述
整个测试计划下所有请求所有断言结果报错信息均会在此显示,如下图所示,将所有断言结果的报错信息直接展示出来。
在这里插入图片描述

3.2.【察看结果树】组件

添加路径:【测试计划-点击右键-添加-监听器-查看结果树】,整个测试计划下所有请求所有断言结果报错信息均会在此显示,如下图的形式,切换查看。
在这里插入图片描述

四、实例演示

已知请求的接口,响应状态码:200,响应结果包含:token字段,如下图,按照【2.2.断言源码】设置脚本,断言成功通过
在这里插入图片描述
修改断言脚本如下图所示:
在这里插入图片描述
在这里插入图片描述
查看断言结果:2个断言均不通过,如下图所示
1、【察看结果树】组件,查看断言结果
在这里插入图片描述
2、【断言结果】组件,查看断言结果
在这里插入图片描述

五、BeanShell简介

Beanshell是一种类似JAVA的脚本语言,通过BeanShell可以对请求数据、响应数据或环境变量进行更加灵活的处理和判断。还可以直接调用外部的JAR包,例如:可以直接引入现成的第三方JSON解析包来使用。
在JMeter的多种组件中都有BeanShell的身影,如下:

定时器:BeanShell Timer
前置处理器:BeanShell PreProcessor
采样器:BeanShell Sampler
后置处理器:BeanShell PostProcessor
断言:BeanShell Assert
监听器:BeanShell Listener

在JMeter运行的流程控制中,BeanShell出现的位置,如下图所示:
在这里插入图片描述
Beanshell的内置变量和方法
Beanshell有一些默认的内置变量和方法,用户可以通过这些变量与JMeter进行交互,例如:
1、prInt:非GUI模式下打印信息(输出信息到stdout,标准输出控制台)。
2、log:输出信息到日志(文件)

  • log.debu(“调试信息”)
  • log.info(“响应状态码” + ResponseCode)
  • log.warn(“警告信息”)
    log.error(“出错信息”)

3、ResponseCode:响应状态码(String类型)。
4、ResponseHeaders:响应头(String类型)。
5、prev:获取当前请求结果

  • prew.getResponseDataAsString():获取响应体数据(String类型)。
  • prew.getResponseCode():获取状态码(同ResponseCode,String类型)。

6、vars:操作JMeter变量

  • String var1 = vars.get(“变量名”):获取变量的值(假设为String类型)。
  • vars.put(“变量名”, 变量值):设置变量值。

7、props:操作JMeter属性

  • props.get(String,String) 可以获取JMeter中已经生成的属性。
  • props.put(String,String)可以创建和更新JMeter属性。

8、ctx:获取当前线程上下文数据(可获取所有信息)

  • ctx.getVariables(“变量名”):获取变量值(同vars.get())
  • ctx.setVariables(“变量名”,“变量值”):设置变量(同vars.put())
  • ctx.getProperties(“属性名”):获取属性值(同props.get())。
  • ctx.setProperties(“属性名”,“属性值”):设置属性(同props.put()
  • ctx.getPreviousResult():获取当前请求结果同(prev)
  • ctx.getCurrentSampler():获取当前采样器。
  • ctx.getPreviousSampler():获取前一采样器。
  • ctx.getThreadNum():获取线程数。
  • ctx.getThreadGroup():获取线程组。
  • ctx. getThread():获取当前线程。
  • ctx.getEngine():获取引擎。
  • ctx.isSamplingStarted():判断采样器是否启动。
  • ctx.isRecording():判断是否开启录制。
  • ctx.getSamplerContext():获取采样器山下文数据。
目录
相关文章
jmeter:利用beanshell进行多重断言
在接口测试中,我们对返回结果的正确性判断一般是基于响应报文的返回内容进行断言。但有些时候,按照正常的业务逻辑来说,一个请求返回的内容是多种不同的。
jmeter:利用beanshell进行多重断言
|
5月前
|
Java 测试技术 数据处理
JMeter前置处理器-Beanshell前置处理器详解
JMeter的Beanshell前置处理器允许用Java-like语法执行测试前的自定义逻辑,如参数化和数据处理。要添加它,右键点击HTTP请求,选择“添加”->“前置处理器”->“Beanshell前置处理器”。内置变量如`vars`, `ctx`, `log`和`props`提供与JMeter变量、上下文、日志和属性的交互。例如,`vars.get("key")`用于获取变量,`log.info()`用于记录日志。使用这些工具,测试者能增强性能测试的复杂性和准确性。
94 3
|
5月前
|
Java
Jmeter 的 Beanshell基本用法
Jmeter 的 Beanshell基本用法
EMQ
|
Java 测试技术 Linux
JMeter 扩展开发:BeanShell 数据模拟实现及性能探讨
本文是开源测试工具JMeter扩展性开发教程第三期,讲解如何采用JMeter内置功能BeanShell实现动态生成测试数据,并探讨其与Java扩展JMeter的实现方式对比。
EMQ
189 0
JMeter 扩展开发:BeanShell 数据模拟实现及性能探讨
|
API Apache
Jmeter系列(65)- BeanShell 内置变量 ctx
Jmeter系列(65)- BeanShell 内置变量 ctx
174 1
Jmeter系列(65)- BeanShell 内置变量 ctx
|
安全 Java
Jmeter系列(67)- BeanShell 内置变量 props
Jmeter系列(67)- BeanShell 内置变量 props
192 0
Jmeter系列(67)- BeanShell 内置变量 props
|
Java API Apache
Jmeter系列(66)- BeanShell 内置变量 vars
Jmeter系列(66)- BeanShell 内置变量 vars
255 0
Jmeter系列(66)- BeanShell 内置变量 vars
|
存储
Jmeter 常用函数(19)- 详解 __BeanShell
Jmeter 常用函数(19)- 详解 __BeanShell
283 0
Jmeter 常用函数(19)- 详解 __BeanShell
|
API Apache
Jmeter系列(68)- BeanShell 内置变量 prev
Jmeter系列(68)- BeanShell 内置变量 prev
230 0
|
JavaScript Java Shell
Jmeter系列(63)- Beanshell 入门
Jmeter系列(63)- Beanshell 入门
215 0