一、断言简介

jmeter中有个元件叫做断言(Assertion)。用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致。

使用断言的目的:在request的返回层面增加一层判断机制;因为request成功了,并不代表结果一定正确。

使用断言的方法:

在选择的Sampler下添加对应的断言(因为不同类型的断言检查的内容不同);配置好响应的检查内容(根据断言情况而定,有的断言控制面板不需要添加任何内容,如XML Assertion)。

添加一个断言结果的监听器(从监听器中添加),通过“断言结果”可以看到是否通过断言;对于一次请求,如果通过的话,断言结果中只会打印一行请求的名称;

  如果失败,则除了请求的名称外,还会有一行失败的原因(不同类型的断言,结果不同)。

PS:一个Sampler可以添加多个断言,根据你的检查需求来添加相应的断言,当Sampler下所有的断言都通过了,那么才算request成功。

二、断言的种类

Jmeter4.0有12钟断言

jmeter 断言 Python jmeter做断言_jmeter 断言 Python

 

 三、常用几种断言的介绍

1、响应断言

在sampler下面添加响应断言

jmeter 断言 Python jmeter做断言_shell_02

APPly to:适用范围

Main sample and sub-samples:作用于父节点取样器及对应子节点取样器
         Main sample only:仅作用于父节点取样器
         Sub-samples only:仅作用于子节点取样器
         JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)

要测试的响应字段:要检查的项

响应文本
                响应代码
                响应信息
                Response Headers:响应头部
               Request Herders:请求头部
               URL样本
               Documeng(text)
               Ignore status:忽略返回的响应报文状态码、
               Request Datas

模式匹配规则:

包括:返回结果包括你指定的内容
           匹配:(好像跟Equals查不多,弄不明白有什么区别)   
           Equals:返回结果与你指定结果一致
           Substring:返回结果是指定结果的字串
           否:不进行匹配
           或者 
要测试的模式:即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理

 2、XPath断言

XPath为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

作用对象:针对返回信息为XPAth的数据类型进行断言。就是如果服务器响应返回的是 xml 格式的内容,这时最佳的断言验证类型就是使用 XPath Assertion。

jmeter 断言 Python jmeter做断言_shell_03

 

Apply to:适用范围

Main sample and sub-samples:主要样本和次级样本
         Main sample only:仅主要样本
         Sub-samples only:仅次级样本
         JMeter Variable:jmeter变量(输入框内可输入jmeter的变量名称)

XML Parsing Options:XML解析选项

Use Tidy(tolerant parser):使用Tidy(容错解析器),默认选择quiet(不显示)
         Quiet:不显示
         Report errors:错误报告
         Show warnings:显示错误
         Use Namespaces:使用名称空间
         Validate XML:验证XML(文件包/数据)
这允许你指定语法分析器可以忽略哪个空格,而哪个空格是重要的)
         Fetch external DTDs:获取外部DTDs(一些XML元素具有属性,属性包含应用程序使用的信息,属性仅在程序对元素进行读、写操作时,提供元素的额外信息,这时候需要在DTDs中声明)
XPath Assertion:输入框中写入xpath断言,点击Validate验证其正确性
         True if nothing matches:确认都不匹配

3、size断言

用于判断返回内容的大小,判断响应结果是否包含正确数量的byte。可定义(=, !=, >, <, >=, <=)

 

 

jmeter 断言 Python jmeter做断言_java_04

APPly to:应用范围(返回内容的断言范围)

Main sample and sub-samples:作用于父节点取样器及对应子节点取样器
         Main sample only:仅作用于父节点取样器
         Sub-samples only:仅作用于子节点取样器
         JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)

Response Size Field to Test:响应字节的测试范围(可以选择用于判断的响应范围)

Full Response:全部响应
         Response Headers:响应头部
         Response Body:响应主体
         响应代码:响应报文相关的代码
         响应信息:响应报文的信息
         Size to Assert:断言字节范围
         字节大小单位为:字节;比较顺序是①返回内容的大小②比较类型③指定字节大小

4、断言持续时间

作用:用于判断服务器的响应时间,判断是否在给定的时间内返回响应结果

jmeter 断言 Python jmeter做断言_java_05

  APPly to:适用范围

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

持续时间(毫秒):响应时间设置(单位:毫秒),如果响应时间大于设置的响应时间,则断言失败,否则成功 

5、BeanShell断言

(1)BeanShell断言介绍

BeanShell是jmeter的解释型脚本语言,和java语法大同小异,并有自己的内置对象和方法可供使用。 BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大,但是要能够熟练使用beanshell脚本。

作用对象:针对sampler中的Bean Shell sampler而使用的断言

jmeter 断言 Python jmeter做断言_java_06

Name名称:断言的名字(可以用一个比较容易理解和分辨的名称)

Comments注释:对这个断言进行一个解释,备注

Reset bsh.interpreter before each call:在每次调用Bean Shell之前重置bsh.interpreter类(bsh.interpreter是Bean Shell脚本语言的一种类,也可以理解为一种解析器)

Parameters参数(String Parameters and String []bsh.args):String参数(String []bsh.args是主类main函数的形式参数,是一个String 对象数组,可以用来获取命令行用户输入进去的参数)

Script file脚本文件:可以填入脚本文件路径

Script(see below for variables that are defined):参照下文定义的变量(使脚本文件参照定义的变量来运行)

(2)BeanShell断言实例

JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
ctx:该变量引用了当前线程的上下文
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

 在这里除了可以使用beanshell的内置变量外,主要通过 Failure 和 FailureMessage来设置断言结果。

jmeter 断言 Python jmeter做断言_shell_07

 简单实例:

jmeter 断言 Python jmeter做断言_java_08

断言结果:

jmeter 断言 Python jmeter做断言_XML_09