06、jmeter断言

常用的jmeter断言有json断言、正则表达式断言、beanshell断言

1、json断言

json断言一般用于返回体内容为json格式的接口,以访问我的博客为例:https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=20&businessType=blog&orderby=&noMore=false&year=&month=&username=weixin_43877527

 填写请求信息:

右键该请求添加,断言,添加json断言:

表达式的语法就是用$符号和 . 一直往json里面取数据

 断言成功:

断言失败:

 也可以添加多个断言,失败一个即请求断言失败

2、响应断言

右键添加,断言,响应断言

这个信息会比json断言的多一点,,

Main sample and sub-samples - 主样器或子样器
Main sample only - 主样器
Sub-samples only - 子样器
Jmeter Variable Name to use - 要使用的变量名

一般我们是默认Main sample only

要测试的响应字段 - 一般用最多的是:响应文本、响应头(Response headers)、请求头(request header)
模式匹配规则:这个字面意思可以理解

我们选取一个信息来断言:即判断响应的文本里面是否包含字符串"code":200

断言成功:

断言失败的表现跟上述json断言失败是一样的

3、BeanShell断言

beanshell断言就属于脚本断言了,跟postman里面的脚本断言类似,脚本语法跟java类似,熟悉java语法的同学可以快速应对,可见我专栏java了解 java专栏

选中“取样器”右键 —> 添加 —> 断言 —> BeanShell断言

解释如下: 

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

脚本框下面会提示:

为脚本定义了下列变量:

Read/Write: Failure, FailureMessage, SampleResult, vars, props, log.

ReadOnly: Response[Data|Code|Message|Headers], RequestHeaders, SampleLabel, SamplerData, ctx

这里用一个脚本来实例:

 // 获取响应体的文本
String response = prev.getResponseDataAsString();
// 设置期望值
String expect1 = "\"code\":500";

// 如果符合条件则失败为false,即断言成功了
if (response.contains(expect1)){
	Failure = false;
}

// 否则断言失败
else{
	Failure = true;
 	// 断言信息会显示
	FailureMessage = "响应码为:" + prev.getResponseCode() + "\n"+"响应内容为:" + prev.getResponseDataAsString();
}

 脚本的意思就是获取响应体的文本,然后判断是否包含某个文本

断言成功:

上述脚本有两个对象Failure, FailureMessage,一个用来表示断言成功与否(true或者false),一个用来自定义断言失败的信息提示,其实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():获取采样器上下文数据。

4、总结

常用断言有json断言、响应断言、beanshell,前两个使用比较方便容易,后一个需要一定的java语法能力,实际应用中灵活选取断言方式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值