前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过案例带你轻松玩转JMeter连载(25)

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

作者头像
顾翔
发布2021-11-12 14:46:49
5660
发布2021-11-12 14:46:49
举报

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

图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所示。

图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,都会报错。如果想使用数字,数字等类型,方法是做类型转换。例如。

代码语言:javascript
复制
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中去,其目的是便于调试。有以下几中使用方法。

代码语言:javascript
复制
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断言元件中加入下面的代码。

代码语言:javascript
复制
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);

获得如下结果。

代码语言:javascript
复制
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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档