正如前文所说,请求的作用就像你告诉了你的工人们要干什么,但是他们干的怎么样,干的成果好不好,你目前还无从所知,那么我们总不能去服务后台让开发小哥看日志吧?其实这些问题JMeter肯定已经帮你想好了,这也就是本篇要讲的响应断言和结果树。
所谓断言,和Java中assert是一个意思,即根据表达式来判断某个结果是否符合预期结果。在JMeter中则具体表现为响应结果是否符合某种规则来判断请求是否成功,多数时候我们会通过响应结果是否包含某个关键字或响应码来判断。 1.创建响应断言 一般情况下断言都是针对单一请求的判断,所以本次创建也在请求基础上创建断言。 2. 响应断言配置详解
区域1:apply to-应用范围,设定匹配的范围 一般我们选择默认的Main sample only即可,当请求有重定向的时候,根据具体情况适当选择,可参考Main sample and sub-samples (1)Main sample and sub-samples:匹配范围为当前父取样器,及子取样器 (2)Main sample only :仅当前父取样器 (3)Sub samples only:仅子取样器 (4)JMeter Variable:变量值进行匹配 区域2:Field to Test-测试数据选择区 (1)Text Response:响应文本,服务器响应文本,一般普通http响应,都勾选这个。 (2)Document(Text):一切Apache Tika 支持服务器响应,包括文本响应,还支持 PDF, Office, Audio, Video formats。jmeter会用Apache Tika 去解析服务器响应内容,会很耗内存,而且也很容易解析失败。所以一般普通http请求,不要选择这个。 (3)Url Sampled:url样本,是对sample的url进行断言。如果请求没有重定向(302),那么就是这个就是请求url。 如果有重定向(且跟随重定向),那么url就包含请求url 和 重定向url (4)Response Code:响应代码,http响应代码,如101,200,302,404,501等。但当我们要验证404,501等http响应代码时,需要勾选“ ignore status”。因为当http 响应代码为400,500时,jmeter默认这个请求时失败的。 (5)Response Message:响应信息,http响应代码对应的响应信息,例如: OK, Found HTTP/1.1 200 Ok HTTP/1.1 302 Found (6) Response Header : 响应头信息,例如 Server: Tengine Date: Thu, 12 Mar 2015 09:43:52 GMT Content-Type: text/html Content-Length: 260 Connection: close (7)Request Headers:请求头信息,例如: Content-Type: application/json; charset=UTF-8 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 关于请求头响应头可参考:https://www.cnblogs.com/fighter007/p/8445435.html (8)Request Data:请求数据;区域3:Patterns Matching Rules-模式匹配规则 (1)Contains:包括,返回结果包括你指定的内容,支持正则匹配,例如:响应字段为: 响应文本 模式匹配规则:匹配 断言为:1、invalid 2、[a-z]+ 当返回值为:{"msg":"channel invalid."} , 这两个断言都是ok的,返回true (2)Matches:匹配,相当于 equals :当返回值固定时,可以返回值做断言,效果和equals相同;正则匹配 : 用正则表达式匹配返回结果,但必须全部匹配。 即正则表达式必须能匹配整个返回值,而不是返回值的一部分。例如:响应字段为: 响应文本 模式匹配规则:匹配 断言为:1、{"msg":"channel invalid."} 2、\{"msg":"[a-z]+ invalid\."\} , 3、[a-z]+ 当返回值为:{"msg":"channel invalid."} ,断言1 2 是ok的, 断言3是false 当返回值为:{"msg":"channel invalid."} , 断言1 3是false, 断言2才是ok的。 原因是,断言1 只能用于equals,而断言3 只匹配了返回值部分,而不是全部匹配。 (3)Equals : 返回结果与你指定断言完全一致 (4)SubString:与 “包括”差不多,都是指返回结果包括你指定的内容,但是subString不支持正则字符串 例如:响应字段为: 响应文本 模式匹配规则:匹配 断言为:1、invalid 2、[a-z]+ 当返回值为:{"msg":"channel invalid."} , 断言1返回true, 但断言2返回false (5)Not:否,就相当于取反。 如果上面断言结果为true,勾选“否”后,最终断言结果为false。如果上面断言结果为false,勾选“否”后,则最终断言结果为 true。 (6)Or:或,相当于与或运算中的或,即当有多个断言的时候,任意一个断言为true则返回true。区域4:Patterns to Test-测试匹配 该区域即可以根据选择的匹配规则,输入符合规定的匹配内容。区域5:Custom Failure Message-用户失败信息 该区域定义当断言认定请求失败的时候,返回的用户失败信息,可以认为是自定义错误信息所谓结果树,即为你请求的结果展示,是经过断言判断后的结果,可以根据需求来选择查看失败的请求或成功的请求。通过结果树可以看到请求发出去的具体内容,以及收到响应后的具体内容,并可以将这些内容以文件的形式保存起来。 结果树可以在请求的维度建立,也可以在线程组或项目的维度建立,只是查看的结果范围不一样,但一般情况下请求下必有结果树,其他维度的结果树需要根据自己的需求来判断是否需要添加。 在此我以请求的维度进行创建!
创建结果树 结果树功能配置介绍 区域1:Write results to file/Read from file-将结果写入文件 (1)Filename:文件名,指定日志写入的文件; (2)Log/Display Only:Errors Successes:日志或显示仅仅包含失败的或成功的请求,当不选择时不论成功的请求或失败的请求都显示在结果树/写入文件; (3)Configure:配置要保存的内容 区域2:结果树查找框 (1)Search:查找内容; (2)** Case sensitive**:是否大小写敏感; (3)** Regular exp**:是否开启正则表达式;区域3:结果展示区域 这里就不多说了,各位还是自己看吧,一看就懂。至此一个基本的压测项目已经建立完成了,但是就像你给工人说让干扫房间,总不能一堆人一直盯着一个房间扫吧,所以大多数时候都是需要变量来定义请求中的参数,需要继续了解的童鞋,请点击用JMeter做http压力测试,这一篇就够(六-参数)