美文网首页
Jmeter常用组件——断言

Jmeter常用组件——断言

作者: moutory | 来源:发表于2024-02-04 20:13 被阅读0次

前言

本文主要讲jmeter中关于断言组件的使用,适合已经对Jmeter有基本的使用经验的人阅读。如果还是jmeter的小白用户,建议先去看一下我的同系列入门文章,再来阅读本文。

如果对Jmeter的其他知识感兴趣,可以看我其他的相关文章:
压测工具Jmeter的安装和快速上手
JMeter进阶技巧介绍

说在前面

在使用Jmeter的过程中,我们会关心接口的调用结果是否正确,但默认情况下Jmeter只会对HTTP状态码不是200的请求标记为失败,如果相关接口的错误信息是放在响应体中的话,那么Jmeter就不能正确地将这部分没调用成功的请求给显示出来,当数据量比较大的情况下,人工去筛选出调用失败的接口很明显不太可能,所以我们需要借助Jmeter中的断言工具来协助我们定位到不符合预期的响应。
需要注意的是,Jmeter针对断言提供了类型相当丰富的断言工具,本文只会讲比较常见的断言组件。

一、响应断言

响应断言可以用响应信息的响应头、响应文本、响应代码等所有报文内容来进行判断(事实上,响应断言还可以用来检测请求的报文是否有误)

步骤1:新增响应断言

选择一个线程组新增响应断言,这里需要注意,我们也可以单独针对某个http请求来进行断言,配置在线程组的断言会对组内所有接口生效。


新增响应断言
步骤2:新增查看结果树组件

断言的使用需要配合结果树组件来进行观察


新增结果树组件
步骤3:配置响应断言

响应断言支持我们配置的条件有很多,我们可以根据需要来设置需要判断的内容,以及判断的条件

模式匹配规则
  • 包括:可以指定测试字段的值是否包含指定文本
  • 匹配:其实就是正则匹配,我们可以通过定义正则表达式来定义符合要求的响应
  • 相等:相当于是完整匹配,测试字段的文本必须和给定的文本完全一致
  • 字符串:这个和包含比较类型,用来判断测试字段的值是否包含指定文本
  • 否:用于逻辑取反
  • 或者:用于逻辑取或


    image.png
步骤4:进行验证(略)

我们执行相关的测试用例即可验证

二、JSON断言

JSON断言只能针对响应结果是applicaton/json格式的请求进行断言。虽然作用的范围相比于响应断言来说要小很多,但是JSON断言要更加灵活,它可以实现单独对某个json字段的值来进行判断。在JSON断言中,可以使用$.字段名的方式来引用响应体的字段内容。

步骤1:新增JSON断言
image.png
步骤2:配置JSON断言
  • Assert Json path exists:json提取表达式,即表达式提取到的内容为断言内容。支持$.字段名来进行匹配
  • Additionally assert value:勾选后方可填写断言内容
  • Match as regular expression:勾选后表示断言内容支持正则表达式
  • Expected Value:断言内容
  • Except null:勾选后表示断言内容为空,也就说断言的内容不会再生效了
  • Invert assertion(wiil fail if above condition met):断言取反,即如果断言结果为true,则勾选后断言结果为false;如果断言结果为false,则勾选后断言结果为true


    image.png
步骤3:配置查看结果树

这一步和上一小节的一样,就不再复述了。

步骤4:进行验证

我们希望正确的返回结果中的responseMessage字段包含“已存在外部订单号”字眼的内容,下面我们就来通过JSON断言配置实现对应的效果。
通过配置$.responseMessage我们获取到了想要判断的字段,勾选Additionally assert valueMatch as regular expression表示我们需要开启正则表达式来进行断言判断。在Expected Value字段中我们填写了对应的正则表达式。由于不使用取反操作,所以我们的Invert assertion配置不进行勾选。
最后的配置如下图所示:

image.png
分别造出不同出参的数据,可以看到断言已经正常生效了。
image.png

三、BeanShell断言

BeanShell算是个性化程度最高的一类断言了,这个组件支持我们通过写脚本的方式来自定义断言校验的字段,以及相关的输出内容

(一)断言的内置变量和方法

Beanshell有一些默认的内置变量和方法,用户可以通过这些变量与JMeter进行交互,比如:

prInt:非GUI模式下打印信息(输出信息到stdout)
log:输出信息到日志(文件)

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

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

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

vars: 操作jmeter变量

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

props: 操作JMeter属性

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

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():获取采样器山下文数据

关于BeanShell断言的更多变量,可以从官方文档进行查阅:Jmeter 官方BeanShell断言讲解

(二)使用BeanShell来做一个案例
步骤1:定义一个BeanShell组件

在请求下面新建一个BeanShell断言组件

新建一个BeanShell断言
步骤2:定义断言内容
//获取响应内容
String response_value = prev.getResponseDataAsString();
//获取响应码
response_code = prev.getResponseCode();

// 输出一下日志
log.error("http响应码:"+response_code);
log.error("response响应体为:"+response_value);

//断言内容,如果是做接口自动化时,可以直接读取csv文件的断言内容
//这里只是单接口调试而已,因此,就自定义两个断言的变量来存放断言内容。
String assert1 = "\"responseCode\":\"00\"";
 
//Failure是jmeter内置的变量,为false时,表示断言成功,不会抛出错误,为true时,表示断言失败;
//FailureMessage是jmeter内置的变量,用来打印断言失败后,需要显示的内容。
 
if(response_value.contains(assert1)){
    Failure = false;
    return;
}else{
    Failure=true;
    String massage = "\n\t\t断言失败!" +"\n" + "断言1:"+assert1 +"\t";
    FailureMessage=massage+"响应码为:"+ response_code+"\n"+"响应内容为:"+response_value;
    return ;
}
步骤3:定义查看结果树组件

和原先的步骤一致,此处略

步骤4:造数据进行验证

我们可以看到,结果树中已经正常将结果输出出来了。


image.png
小细节:如何查看BeanShell中的log日志

我们可以通过点击右上角的感叹号来打开日志面板


image.png
image.png

剩下的个人觉得在某些场景下比较有用的断言组件有:大小断言断言持续时间,前者可以针对响应的内容大小进行判断,后者可以根据接口的响应时间来进行判断,这个在压测或者其他特殊的场景下也有使用的场景。

参考文章
【Jmeter】断言 https://www.cnblogs.com/mumuluo/p/13960905.html

相关文章

  • 【JMeter】JSON断言中的JSON Path

    【JSON Assertion】就是JMeter断言中的JSON断言。此组件允许对JSON文档执行验证。它在使用过...

  • jmeter(十三) jmeter常用断言

    响应体 响应头 1、响应断言 ✓ 常⻅的校验信息检查点:➢ 响应码 Response Code➢ 响应⽂本 Tex...

  • Jmeter基本介绍

    组件介绍: 推荐一篇组件见关系和作用的详细讲解:jmeter常用组件_jmeter组件介绍_果果文本库 1.线程组...

  • 【第八天】jmeter元件详解之断言

    断言组件用来对服务器的响应数据做验证。常用的断言是响应断言,支持正则表达式 1、BeanShell Asserti...

  • JMeter断言07

    前言 在jmeter中断言用于验证服务器返回的数据是否满足我们的要求。 jmeter提供了以下断言类型: 下面我们...

  • Jmeter断言

    响应断言 apply to:适用范围与提取器一致,从左至右分别为:匹配当前父取样器及其子取样器、匹配当前父取样器(...

  • jmeter | 断言

    jmeter | 断言 之前我们讲了参数化和集合点,这些都是取样器并发之前执行的操作,接下来我们一起看一下并发开始...

  • Jmeter常用组件篇

    Jmeter配置安装成功后进入就可以看到以下页面 a、测试计划: 名称与注释就是相对于这个测试计划的一些备注信...

  • 【Jmeter断言】:Json断言

    Additionally assert value:按匹配值Match as regular expression...

  • Jmeter(六)Jmeter脚本包含要素及书写习惯

    Jmeter有丰富的组件,逻辑控制器、配置原件、Sampler、定时器、前置处理器、后置处理器、断言、监听器;而编...

网友评论

      本文标题:Jmeter常用组件——断言

      本文链接:https://www.haomeiwen.com/subject/ewrfadtx.html