JMeter元件系列(五)---jmeter常用断言详解

常用的断言:

  • 响应断言
  • BeanShell 断言

1、响应断言

  • 作用:断言用于验证取样器请求或对应的响应数据是否返回了期望的结果。

  • 界面如下:
    在这里插入图片描述
    Apply to:

  • Main sample and sub-samples
    范围包括主取样器与所有子取样器。

  • Main sample only
    范围仅限于主取样器。

  • Sub-samples only
    范围仅限于所有子取样器。

  • JMeter Variable Name to use
    范围包括使用的JMeter变量。

    要测试的响应字段:

  • 响应文本:服务器响应文本,一般普通Http响应,就是察看结果树中的响应数据。

  • 响应代码:指的是Reponse code响应代码,对于Http请求,比如:404,200等。但当我们要验证404,501等响应代码时,需要勾选“ignore status”,因为当http响应代码为400,500时,jmeter默认这个请求是失败的。

  • 响应信息:指的是Reponse messsage,对于Http请求,比如OK,Not Found等。

  • 响应头:响应头信息。

  • 请求头:请求头信息。

  • URL样本:请求的URL,对于Http请求,若有重定向,则包含重定向后的URL。

  • 文档(文本):通过Apache Tika各种类型的文档中提取文本。jmeter会用ApacheTika去解析服务器响应内容,会消耗内存,一般不选。

  • 忽略状态:见响应代码。

  • 请求数据:请求数据信息。

    模式匹配规则:

  • 包括:返回结果包括指定的内容,支持正则匹配。

  • 匹配:
    (1) 相当于equals,当返回值固定时,可以返回值做断言,效果与equals相同。
    (2) 正则匹配:用正则表达式匹配返回结果,但必须全部匹配,即正则表达式必须能匹配整个返回值,而不是返回值的一部分。

  • 相等:返回结果与指定断言完全一致。

  • 字符串:与“包括”差不多,都是指返回结果包括你指定的内容,不支持正则。 否:就相当于取反。如果上面断言结果为true,勾选“否”后,最终断言结果为false。如果上面断言结果为false,勾选“否”后,则最终断言结果为true。

  • 否:见字符串。

  • 或者:比如写了两个断言,一个可以成功,一个不会成功,勾选或者之后,请求会成功,不勾选或者,请求会失败。即真假为真。

    注意:
    Contains和Matches模式支持Perl5类型的正则表达式;
    Equals和Substring模式使用文本字符串,不支持正则表达式;
    我还发现断言中的正则不能匹配汉字,汉字是什么就写什么,用[\u4e00-\u9FA5]{2}这样匹配就会报错。

2、BeanShell 断言

  • 作用:BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大。

  • 界面如下:
    在这里插入图片描述

  • 示例:检验返回代码是否是200
    在这里插入图片描述

  • 代码如下:

//create by ybb
String responseData = prev.getResponseDataAsString(); //获取请求的返回结果
String code = prev.getResponseCode(); //获取请求的返回code码
String requestData = prev.getSamplerData(); //获取发出的请求数据
if( !code.equals("200") ){
    
     //如果请求的相应状态码不是200
    FailureMessage = "响应状态码不是:200,而是:" + code + ",请求失败!"; //自定义的失败信息
    log.info(FailureMessage); //在日志里打印失败的信息
    log.info("Request: " + requestData); //在日志里面打印失败的请求体
    Failure = true; //表示断言失败
}
  • 检验返回结果是否包含我自己定义的value值
    在这里插入图片描述

  • 代码如下:

//create by ybb
String value = "要断言的内容";
//获取请求的返回结果
String responseData = prev.getResponseDataAsString();
//判断返回结果是否包含value
  if(responseData.indexOf(value)!= -1){
    
    
  	Failure = false;
  	FailureMessage = "包含" + value;
     log.info(FailureMessage);
  	}else{
    
    
  	Failure = false;
  	FailureMessage = "不包含" + value;
     log.info(FailureMessage);
  	}

参考博客:https://zhuanlan.zhihu.com/p/72917999
https://www.cnblogs.com/xiehong/p/11475105.html

猜你喜欢

转载自blog.csdn.net/qq_36800800/article/details/107756650