通过案例带你轻松玩转JMeter连载(25)

简介: 通过案例带你轻松玩转JMeter连载(25)

6.3 断言



1响应断言


所谓断言,就是希望测试得到的结果与预期的结果是否一致的行为,在软件测试中,断言是一种非常重要的活动。响应断言,通过获得HTTP请求报文和响应报文的信息来进行断言。通过右键点击菜单,选择“添加->断言->响应断言”而获得。其界面如图35所示。


image.png

图35 响应断言


  • Apply to:同正则表达式提取器中对应的字段。
  • 测试字段。

Ø 响应文本:是响应报文的Body部分(不包括状态行与响应头信息)。
Ø 响应代码:是响应状态码,比如:200、304、404等。
Ø 响应消息:响应的短语,比如OK、Not Modified、Not Found等。
Ø 响应头:响应报文的头部信息。
Ø 请求头:请求报文的头部信息。
Ø URL样本。请求的URL。如果选择了“跟随重定向”,则包含重定向后的URL。
Ø文档(文本):通过Apache Tika从各种类型的文档中提取文本。此选项开启也会严重影响性能,谨慎使用。
Ø 请求数据:是请求报文的Body部分(不包括请求行与首部字段)
Ø 忽略状态:通过断言的结果与现有的响应状态相结合来确定取样器的总体成功。当选择忽略状态复选框时,将强制响应状态在计算断言之前是成功的。HTTP协议在返回4XX和5XX的状态码默认是不成功的,选择此项可用于在执行进一步检查之前设置状态成功。


  • 匹配模式

Ø Contains:如果文本包含正则表达式模式,则为TRUE。
Ø Matches:如果整个文本与正则表达式模式匹配,则为TRUE。
Ø Equals:如果整个文本等于模式字符串(区分大小写),则为TRUE。
Ø Substring:如果文本包含模式字符串(区分大小写),则为TRUE。


注意。
Contains和Matches模式:支持Perl5类型的正则表达式,不区分大小写。
Equals和Substring模式:使用文本字符串,不支持正则表达式,区分大小写。
Contains和Substring模式:是包含关系,即部分匹配。
Matches和Equals模式:是完全匹配。
Ø Not:对断言结果进行否定。
Ø Or:将多个测试模式以逻辑“或”的形式组合起来。


  • 通过操作按键,添加需要断言的内容。
  • 如果匹配失败的情况下,可以在最下面添加失败信息。


2 BeanShell断言


BeanShell断言,通过脚本来设置断言。通过右键点击菜单,选择“添加->断言->BeanShell断言”而获得。其界面如图36所示。

image.png

图36 BeanShell断言


  • 每次调用前重置bsh.Interpreter:如果选择此项,则将为每个取样器重新创建解释器。
  • 参数(->String Parametersand String[] bsh.args):传递给BeanShell脚本的参数,参数存在下面的变量中。


Ø Parameters:整个参数字符串作为一个变量Parameters。
Ø bsh.args:用空格分隔的字符串被保存到变量数组bsh.args。

  • 脚本文件:包含BeanShell脚本的文件,文件名存在变量FileName中。

在BeanShell断言最下面给出了脚本变量,包括。

  • 读/写变量:Failure、FailureMessage、SampleResult、vars、props、log。

Ø Failure:布尔值。Failure为True,断言失败;Failure为False,断言成功。
Ø FailureMessage:当断言失败时候的提示信息。
Ø SampleResult:获得取样器结果。
Ø vars:即JMeterVariables,用于操作JMeter的变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是一个Map),它是测试用例与BeanShell交互的桥梁,常用方法如下。


√vars.get(String key):从JMeter中获得变量值。比如:myname=vars.get("name");获取JMeter变量name,然后赋予BeanShell变量myname。
√vars.put(String key,String value):数据存到JMeter变量中。比如:vars.put("name","cindy");把名为cindy的字符串赋予JMeter变量name。
√vars.putObject("objectName", Object);把一个对象赋予JMeter 对象objectName。


注意:在元件中获取vars变量的值,依然使用:${变量名}。


vars接收的值必须是字符串类型,如果需要传递其他类型,包括null,都会报错。如果想使用数字,数字等类型,方法是做类型转换。例如。


vars.put(“key1”, ““ + 0);
vars.put(“key2”, (String)0);
vars.put(“key3”, [1,2,3].toString());
vars.put(“key4”, (String)[1,2]);
vars.put(“key4”, ““ + [1, 2, 3]);
vars.put(“key5”, ““ + false);
vars.put(“key6”, false.toString());


Ø props:即JMeterProperties,属于java.util.Properties类。vars有的put、get方式,props都有;操作JMeter属性,该变量引用了JMeter的配置信息,可以获取JMeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象,对应于java.util.Properties。


√props.get("START.HMS");注:START.HMS为属性名,在文件jmeter.properties中定义。
√props.put("PROP1","1234");
Ø log:将信息写入到JMeter日志文件jmeber.log中去,其目的是便于调试。有以下几中使用方法。


log.info("This is a info log");
log.error("This is an error log ");
log.warn("This is a warn log ");


  • 只读变量:Response[Data|Code|Message|Header] 、RequestHeader、SampleLabel、SampleData、ctx。

Ø ResponseData:响应数据。
Ø ResponseCode:响应代码,比如304、404、500。
Ø ResponseMessage:响应代码信息。
Ø ResponseHeader:响应头。
Ø RequestHeader:请求头。
Ø SampleLabel:取样标签,即在HTTP请求中设置的名称。
Ø SampleData:取样数据。
Ø ctx:该变量引用了当前线程的上下文(context),使用方法可参考http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html


我们在登录BeanShell断言元件中加入下面的代码。


log.info(“ResponseData:”+ResponseData);;    log.info(“ResponseCode:”+ResponseCode);
log.info(“ResponseHeader:”+ResponseHeader); 
log.info(“RequestHeader:”+RequestHeader);
log.info(“SampleLabel:”+SampleLabel);
log.info(“SamplerData:”+SamplerData);
log.info(“ctx:”+ctx);


获得如下结果。


2021-08-26 16:28:23,069 INFO o.a.j.u.BeanShellTestElement: 
ResponseData:[B@35d9015d
2021-08-26 16:28:23,069 INFO o.a.j.u.BeanShellTestElement: ResponseCode:200
2021-08-26 16:28:23,074 INFO o.a.j.u.BeanShellTestElement: ResponseHeader:void
2021-08-26 16:28:23,078 INFO o.a.j.u.BeanShellTestElement: RequestHeader:void
2021-08-26 16:28:23,078 INFO o.a.j.u.BeanShellTestElement: SampleLabel:登录
2021-08-26 16:28:23,078 INFO o.a.j.u.BeanShellTestElement: SamplerData:GET 
http://192.168.1.3:8000/
GET data:
[no cookies]
2021-08-26 16:28:23,078 INFO o.a.j.u.BeanShellTestElement: 
ctx:org.apache.jmeter.threads.JMeterContext@6cf09382


通过这个例子,可以更好的了解只读变量的含义。


目录
相关文章
|
Java 测试技术 API
通过案例带你轻松玩转JMeter连载(49)
通过案例带你轻松玩转JMeter连载(49)
250 1
通过案例带你轻松玩转JMeter连载(49)
|
存储 Linux
通过案例带你轻松玩转JMeter连载(60)
通过案例带你轻松玩转JMeter连载(60)
179 0
通过案例带你轻松玩转JMeter连载(60)
|
算法
通过案例带你轻松玩转JMeter连载(59)
通过案例带你轻松玩转JMeter连载(59)
232 0
通过案例带你轻松玩转JMeter连载(59)
|
XML JavaScript Java
通过案例带你轻松玩转JMeter连载(58)
通过案例带你轻松玩转JMeter连载(58)
128 0
通过案例带你轻松玩转JMeter连载(58)
通过案例带你轻松玩转JMeter连载(57)
通过案例带你轻松玩转JMeter连载(57)
128 0
通过案例带你轻松玩转JMeter连载(57)
|
存储 索引
通过案例带你轻松玩转JMeter连载(56)
通过案例带你轻松玩转JMeter连载(56)
117 0
通过案例带你轻松玩转JMeter连载(56)
|
存储 Prometheus 监控
通过案例带你轻松玩转JMeter连载(55)
通过案例带你轻松玩转JMeter连载(55)
165 0
通过案例带你轻松玩转JMeter连载(55)
|
存储 监控 数据可视化
通过案例带你轻松玩转JMeter连载(54)
通过案例带你轻松玩转JMeter连载(54)
157 0
通过案例带你轻松玩转JMeter连载(54)
|
存储 Prometheus 监控
通过案例带你轻松玩转JMeter连载(53)
通过案例带你轻松玩转JMeter连载(53)
137 0
通过案例带你轻松玩转JMeter连载(53)
|
JSON 监控 数据可视化
通过案例带你轻松玩转JMeter连载(52)
通过案例带你轻松玩转JMeter连载(52)
199 0
通过案例带你轻松玩转JMeter连载(52)