前面的博文中有对 JMeter 中的 响应断言 进行了讲解并实例演示,详情敬请参阅博文:JMeter学习-007-JMeter 断言实例之一 - 响应断言。
在 JMeter 中总计提供了如下几种 BeanShell 组件:
Beanshell Sampler:单独的采样器。
Beanshell PreProcessor:针对其他采样器的前置处理器。可以在采样器执行之前进行预处理操作,生成相关测试数据供采样器使用,相当于 TestNG 中的 before annotation。
Beanshell PostProcessor:针对其他采样器的后置处理器。可以在采样器执行之后进行测试环境恢复或数据清理等操作,相当于 TestNG 中的 after annotation。
Beanshell Assertion:JMeter 中的高级断言,可直接调用 JMeter API 进行相关的脚本操作,同时可进行断言结果的设定,实现对脚本测试结果报告的定制输出等。
_Beanshell function:JMeter 中的调用函数,允许在采样器等的执行过程中调用已存在的扩展脚本中的函数方法。
此文主要讲述 JMeter 断言中的 Bean Shell Asserttion。其对应的路径为:【 添加 / 断言 / Bean Shell Assertion】,其配置页面如下所示:
配置参数列表说明如下:
配置项属性
详细描述
是否必填
名称
脚本目录树显示当前 Bean Shell Assertion 的概要描述性名称。该名称存储在脚本变量标签中。
否
注释
对当前项更加详细的描述。例如相关业务描述等等。
否
Reset bsh.Interpreter before each calll
若选择此项,则将为每个样本创建对应的解释器。一般用不到。
是
参数
传递到脚本的参数,有如下两种参数传递方式:
1.String Parameters:作为单一的变量参数传递
2.String[] bash.args:作为数组的字符串数组参数,参数之间通过空格进行分割
否
Script file
包含 BeanShell 脚本的运行文件。将重写当前脚本 Script,其文件名存储在脚本变量名中。
否
Script
BeanShell 脚本。当包含了 BeanShell 脚本文件时,Script 可为空。
是
BeanShell 获取变量的两种方法如下所示(假定需获取的变量分别为 exp_sysNo、sysNo):
// get compare data
exp = vars.get("exp_sysNo").toString();
act = String.valueOf( ${sysNo});
修改 exp_sysNo 的方法如下所示(修改 exp_sysNo 数据后,原来获取的 exp 需要重新获取):
vars.put("exp_sysNo", "exp_sysNo");
下面为 BeanShell Assert 的简单应用实例,敬请参阅!
BeanShell Assertion 简单实例源码
执行结果如下所示:
2015/09/02 17:22:35 INFO - jmeter.engine.StandardJMeterEngine: Running the test!
2015/09/02 17:22:35 INFO - jmeter.samplers.SampleEvent: List of sample_variables: []
2015/09/02 17:22:35 INFO - jmeter.gui.util.JMeterMenuBar: setRunning(true,*local*)
2015/09/02 17:22:35 INFO - jmeter.engine.StandardJMeterEngine: Starting ThreadGroup: 1 : 008-搜索商品
2015/09/02 17:22:35 INFO - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group 008-搜索商品.
2015/09/02 17:22:35 INFO - jmeter.engine.StandardJMeterEngine: Thread will continue on error
2015/09/02 17:22:35 INFO - jmeter.threads.ThreadGroup: Starting thread group number 1 threads 1 ramp-up 0 perThread 0.0 delayedStart=false
2015/09/02 17:22:35 INFO - jmeter.threads.ThreadGroup: Started thread group number 1
2015/09/02 17:22:35 INFO - jmeter.engine.StandardJMeterEngine: All thread groups have been started
2015/09/02 17:22:35 INFO - jmeter.threads.JMeterThread: Thread started: 008-搜索商品 1-1
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement: 2169256
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement: 2169256
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement: Test passed.
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement: 2169256
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement: a
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement: Test failed to assert : Expected <2169256>, but <a>.
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
01.获取请求响应数据:SampleResult.getResponseData()[B@652fd11d
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
02.获取请求响应返回码:SampleResult.getResponseCode()
200
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
03.获取请求响应信息:SampleResult.getResponseMessage()
OK
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
04.获取请求响应头信息:SampleResult.getResponseHeaders()
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 02 Sep 2015 09:19:43 GMT
Content-Type: text/html; charset=GB2312
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding
Cache-Control: max-age=0
Pragma: no-cache
Expires: Wed, 02 Sep 2015 09:19:43 GMT
X-Cache: HIT-LT
Content-Encoding: gzip
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
05.获取请求的头信息:SampleResult.getRequestHeaders()
Connection: keep-alive
Charset: UTF-8
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.4.2; GT-I9502 Build/KOT49H)
Content-Length: 140
Host: mb.51buy.com
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
06.获取请求的标签:SampleResult.getSampleLabel()
008-01-搜索商品 【101-006-78945 | 29313】
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
07.获取请求执行结果:SampleResult.isSuccessful()
true
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
08.设置请求响应的返回码:SampleResult.setResponseCode("502")
void
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
09.设置请求响应的信息:SampleResult.setResponseMessage("SampleResult.setResponseMessage")
void
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
10.获取请求的返回码:SampleResult.getResponseCode()
502
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
11.获取请求的响应信息:SampleResult.getResponseMessage()
设置响应信息:SampleResult.setResponseMessage
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
12.获取请求的头信息:vars.toString()
org.apache.jmeter.threads.JMeterVariables@6e6e7861
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
13.获取请求的头信息:props.toString()
{not_in_menu=org.apache.jmeter.protocol.http.modifier.gui.ParamModifierGui, HTTP User Parameter Modifier, org.apache.jmeter.protocol.http.control.gui.WebServiceSamplerGui, xml.parser=org.apache.xerces.parsers.SAXParser, cookies=cookies, wmlParser.className=org.apache.jmeter.protocol.http.parser.RegexpHTMLParser, START.YMD=20150902, HTTPResponse.parsers=htmlParser wmlParser, view.results.tree.renderers_order=.RenderAsText,.RenderAsRegexp,.RenderAsCssJQuery,.RenderAsXPath,.RenderAsHTML,.RenderAsHTMLWithEmbedded,.RenderAsDocument,.RenderAsJSON,.RenderAsXML, remote_hosts=127.0.0.1, system.properties=system.properties, beanshell.server.file=../extras/startup.bsh, jmeter.version=2.13 r1665067, log_level.jmeter.junit=DEBUG, sampleresult.timestamp.start=true, START.HMS=170201, jmeter.laf.mac=System, log_level.jorphan=INFO, classfinder.functions.contain=.functions., user.properties=user.properties, wmlParser.types=text/vnd.wap.wml , log_level.jmeter=INFO, TESTSTART.MS=1441185755385, START.MS=1441184521097, classfinder.functions.notContain=.gui., htmlParser.types=text/html application/xhtml+xml application/xml text/xml, upgrade_properties=/bin/upgrade.properties}
2015/09/02 17:22:35 INFO - jmeter.util.BeanShellTestElement:
14.获取请求的头信息:ctx.toString()
org.apache.jmeter.threads.JMeterContext@349e3c2b
2015/09/02 17:22:35 INFO - jmeter.threads.JMeterThread: Thread is done: 008-搜索商品 1-1
2015/09/02 17:22:35 INFO - jmeter.threads.JMeterThread: Thread finished: 008-搜索商品 1-1
2015/09/02 17:22:35 INFO - jmeter.engine.StandardJMeterEngine: Notifying test listeners of end of test
2015/09/02 17:22:35 INFO - jmeter.gui.util.JMeterMenuBar: setRunning(false,*local*)
PS:BeanShell 是一个 Java 轻量化脚本语言,详细信息请参阅: BeanShell官方网址。
至此, JMeter学习-015-JMeter 断言之-Bean Shell Assertion 顺利完结,希望此文能够给初学 JMeter 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^
我本渺小,但山峰,我一次次绝顶!
PS:若有错误,敬请告知,不胜感激!
Copyright @范丰平 版权所有,如需转载请标明本文原始链接出处,严禁商业用途! 我的个人博客链接地址:http://www.cnblogs.com/fengpingfan