断言:依靠软件程序自动判断操作结果的正确性,用于检查测试中得到的响应数据等是否符合预期。在接口测试用例中没有断言的接口用例是无效的,一个接口的断言有三个层面,一个是HTTP状态码的断言,另外一个是业务状态码的断言,最后是某一接口请求后服务端响应数据的断言

Jmeter最常用断言:Response Assertion(响应断言),Json断言,beanshell断言

一:Response Assertion(响应断言)
响应断言:可选择断言验证的范围(URL,响应头,响应码,响应体,响应附件),匹配的模式(纯文本还是正则表达式匹配)

操作响应断言:添加-断言-响应断言

jemter中json断言 jmeter常见断言_jmeter


对web请求http状态码的断言

1.对http请求状态码的验证

jemter中json断言 jmeter常见断言_jemter中json断言_02


Apply to (响应断言的应用范围)

Main sample and sub-samples:作用于父节点取样器及对应子节点取样器

  Main sample only:只作用于父节点取样器(一般的断言都选这个)

  Sub-samples only:只作用于子节点取样器

  JMeter Variable:只作用于jmeter变量(可写入正则提取的响应值)

测试字段:
  响应文本:请求的响应文本信息,不包含响应头信息。最常用的断言字段
  响应代码:对应http返回的响应码
  响应信息:匹配响应信息
  响应头:响应头信息
  URL样本: 请求url,如果有重定向包含重定向url
  文档(文本):通过Apache Tika从各种的文档中提取的文本进行验证,包括响应文本,pdf、word等等各种格式
  忽略状态(Ignore Status): 一个请求多项响应断言时,忽略某一项断言的响应结果,而继续下一项断言
 
  模式匹配规则
  包括:响应的结果中包含指定的文本或者字段值,支持正则表达式
  匹配:完全匹配,期望值与实际结果必须完全一致,一般结合正则表达式使用
  相等:响应结果与指定的内容完全一致,不支持正则表达式
  字符串:返回结果,包含指定的字符串,不支持正则表达式
  否:不进行匹配

2.添加断言结果,添加-监听器-断言结果

jemter中json断言 jmeter常见断言_接口_03


3.发送请求,查看断言结果

jemter中json断言 jmeter常见断言_接口_04


查看此请求实际响应结果十分与断言一致

jemter中json断言 jmeter常见断言_正则表达式_05


可看到此请求实际响应结果的status是404,与我们断言200不一致,故fail

可对其它响应文本进行断言,与此类似

二:Json断言
JSON断言可以对服务器返回的JSON文档进行验证。
JSON断言有两种使用模式:
1.根据JSONPath能否在JSON文档中找到路径;
2.根据JSONPath提取值并对值进行验证。
若文档格式为非JSON则断言失败;找不到路径断言失败;提取值与预期值不一致断言失败。

1.添加-断言-Json断言

jemter中json断言 jmeter常见断言_软件测试_06


2.若响应数据返回是Json格式,我们可以对其进行json断言操作,在请求的察看结构树响应数据里提取数值对其进行断言,示例提取data里的phone进行断言如下

jemter中json断言 jmeter常见断言_正则表达式_07


配置项

Assert JSON Path exists:

用于断言的JSON元素的路径(JSONPath)。

1.Additionally assert value

是否额外验证根据JSONPath提取的值。

不勾选,验证JSONPath能否在JSON文档中找到路径;

勾选,验证根据JSONPath提取值是否预期。

2.Match as regular expression

预期值是否可以使用正则表达式。

不勾选,预期值不能使用正则表达式表示;

勾选,预期值可以使用正则表达式表示。

Expected Value:

预期值。

1.Expect null

若验证提取的值为null,则勾选此项。

这里有两个地方需要额外注意:

a.验证null值,还是需要勾选“Additionally assert value”,否则验证的是JSONPath能否找到路径;

b.预期值不填表示空字符,与null不等价。

2.Invert assertion(will fail if above conditions met)

若勾选,表示对断言结果取反。

注:除了null外,还有一种特殊的值,就是空数组,预期值不能不填,需要设置为:[],表示空数组。

3.查看断言结果

jemter中json断言 jmeter常见断言_jmeter_08


可看到实际响应结果与预期不一致,故fail

三:Beanshell断言
BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本
在这里除了可以使用beanshell的内置变量外,主要通过 Failure 和 FailureMessage来设置断言结果

Failure = false;-----表示断言成功
FailureMessage = “......";---自定义的成功信息
Failure = true;----表示断言失败
FailureMessage="......";------自定义的失败信息

1.添加-断言-Beanshell断言

jemter中json断言 jmeter常见断言_软件测试_09


2.对http响应码断言实战

jemter中json断言 jmeter常见断言_软件测试_10


3.查看断言结果

jemter中json断言 jmeter常见断言_软件测试_11


可知响应结果不是200而是404

JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
    a) vars.get(String key):从jmeter中获得变量值
    b) vars.put(String key,String value):数据存到jmeter变量中
    更多方法可参考:org.apache.jmeter.threads.JMeterVariables
props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
    a) props.get(“START.HMS”);  注:START.HMS为属性名,在文件jmeter.properties中定义
    b) props.put(“PROP1”,“1234”);
prev - (SampleResult):获取前面的sample返回的信息,常用方法:
    a) getResponseDataAsString():获取响应信息
    b) getResponseCode() :获取响应code
    更多方法可参考:org.apache.jmeter.samplers.SampleResult
sampler - (Sampler):gives access to the current sampler