JMeter学习-015-JMeter 断言之-Bean Shell Assertion

时间:2022-09-22 16:20:52

前面的博文中有对 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】,其配置页面如下所示:

aaarticlea/png;base64,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4jgAAGxDHAcAgDDiOAAAhBHHAQAgjDgOAABhxHEAAAgjjgMAQBhxHAAAwojjAAAQRhwHAIAw4jgAAIQRxwEAIIw4DgAAYcRxAAAII44DAEAYcRwAAMKI4wAAEEYcBwCAMOI4AACEEccBACCMOA4AAGHEcQAACCOOAwBAGHEcAADCiOMAABBGHAcAgDDiOAAAhBHHAQAgjDgOAABhxHEAAAgjjgMAQBhxHAAAwojjAAAQRhwHAIAw4jgAAIQRxwEAIIw4DgAAYcRxAAAII44DAEAYcRwAAMKI4wAAEEYcBwCAMOI4AACEEccBACCMOA4AAGHEcQAACCOOAwBAGHEcAADCiOMAABBGHAcAgDDiOAAAhBHHAQAgjDgOAABhxHEAAAgjjgMAQBhxHAAAwojjAAAQRhwHAIAw4jgAAIQRxwEAIIw4DgAAYcRxAAAII44DAEAYcRwAAMKI4wAAEEYcBwCAMOI4AACEEccBACCMOA4AAGHEcQAACCOOAwBAGHEcAADCiOMAABBGHAcAgDDiOAAAhBHHAQAgjDgOAABhxHEAAAgjjgMAQBhxHAAAwojjAAAQRhwHAIAw4jgAAIQRxwEAIIw4DgAAYcRxAAAII44DAEAYcRwAAMKI4wAAEEYcBwCAMOI4AACEEccBACCMOA4AAGHEcQAACCOOAwBAGHEcAADCiOMAABBGHAcAgDDiOAAAhBHHAQAgjDgOAABhxHEAAAgjjgMAQBhxHAAAwojjAAAQRhwHAIAw4jgAAIQRxwEAIIw4DgAAYcRxAAAII44DAEAYcRwAAMKI4wAAEEYcBwCAMOI4AACEEccBACCMOA4AAGHEcQAACCOOAwBAGHEcAADCiOMAABBGHAcAgDDiOAAAhBHHAQAgjDgOAABhxHEAAAgjjgMAQBhxHAAAwojjAAAQRhwHAIAw4jgAAIQRxwEAIIw4DgAAYcRxAAAII44DAEAYcRwAAMKI4wAAEEYcBwCAMOI4AACEEccBACCMOA4AAGHEcQAACCOOAwBAGHEcAADCiOMAABBGHAcAgDDiOAAAhBHHAQAgjDgOAABhxHEAAAgjjgMAQBhxHAAAwojjAAAQRhwHAIAw4jgAAIQRxwEAIIw4DgAAYcRxAAAII44DAEAYcRwAAMKI4wAAEEYcBwCAMOI4AACEEccBACCMOA4AAGHEcQAACCOOAwBAGHEc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" alt="" width="750" height="448" />

配置参数列表说明如下:

配置项属性 详细描述 是否必填
名称 脚本目录树显示当前 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 的简单应用实例,敬请参阅!

 <?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.8" jmeter="2.13 r1665067">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="接口自动化测试实例 - BeanShell Assertion 简单实例演示" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="008-搜索商品" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">1</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">1</stringProp>
<stringProp name="ThreadGroup.ramp_time">0</stringProp>
<longProp name="ThreadGroup.start_time">1419232321000</longProp>
<longProp name="ThreadGroup.end_time">1419232321000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量 - 商品编号 101-006-78945" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="goodsNo" elementType="Argument">
<stringProp name="Argument.name">goodsNo</stringProp>
<stringProp name="Argument.value">101-006-78945</stringProp>
<stringProp name="Argument.desc">商品编号</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="districtId" elementType="Argument">
<stringProp name="Argument.name">districtId</stringProp>
<stringProp name="Argument.value">29313</stringProp>
<stringProp name="Argument.desc">配送区域</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="areacode" elementType="Argument">
<stringProp name="Argument.name">areacode</stringProp>
<stringProp name="Argument.value">1</stringProp>
<stringProp name="Argument.desc">仓库大区</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="exp_sysNo" elementType="Argument">
<stringProp name="Argument.name">exp_sysNo</stringProp>
<stringProp name="Argument.value">2169256</stringProp>
<stringProp name="Argument.desc">商品系统编号,用于校验搜索结果</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="skuid" elementType="Argument">
<stringProp name="Argument.name">skuid</stringProp>
<stringProp name="Argument.value">489349159815</stringProp>
<stringProp name="Argument.desc">单品SKU,用户校验搜索结果</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="appSource" elementType="Argument">
<stringProp name="Argument.name">appSource</stringProp>
<stringProp name="Argument.value">android</stringProp>
<stringProp name="Argument.desc">平台</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="appVersion" elementType="Argument">
<stringProp name="Argument.name">appVersion</stringProp>
<stringProp name="Argument.value">45</stringProp>
<stringProp name="Argument.desc">版本</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
<stringProp name="TestPlan.comments">,,,,,,</stringProp>
</Arguments>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="008-01-搜索商品 【${goodsNo} | ${districtId}】" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="q" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${goodsNo}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">q</stringProp>
</elementProp>
<elementProp name="districtId" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${districtId}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">districtId</stringProp>
</elementProp>
<elementProp name="areacode" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${areacode}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">areacode</stringProp>
</elementProp>
<elementProp name="dtype" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">list|page|classes</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">dtype</stringProp>
</elementProp>
<elementProp name="districtId" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.name">districtId</stringProp>
<stringProp name="Argument.value">${districtId}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
</elementProp>
<elementProp name="exAppTag" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.name">exAppTag</stringProp>
<stringProp name="Argument.value">2045191607</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
</elementProp>
<elementProp name="appSource" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${appSource}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">appSource</stringProp>
</elementProp>
<elementProp name="appVersion" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">${appVersion}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
<stringProp name="Argument.name">appVersion</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain">mb.51buy.com</stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">http</stringProp>
<stringProp name="HTTPSampler.contentEncoding">GB2312</stringProp>
<stringProp name="HTTPSampler.path">/json.php?mod=Search&amp;act=page&amp;p=1&amp;pp=20</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP信息头管理器" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="Charset" elementType="Header">
<stringProp name="Header.name">Charset</stringProp>
<stringProp name="Header.value">UTF-8</stringProp>
</elementProp>
<elementProp name="Content-Type" elementType="Header">
<stringProp name="Header.name">Content-Type</stringProp>
<stringProp name="Header.value">application/x-www-form-urlencoded</stringProp>
</elementProp>
<elementProp name="Accept-Encoding" elementType="Header">
<stringProp name="Header.name">Accept-Encoding</stringProp>
<stringProp name="Header.value">gzip</stringProp>
</elementProp>
<elementProp name="User-Agent" elementType="Header">
<stringProp name="Header.name">User-Agent</stringProp>
<stringProp name="Header.value">Dalvik/1.6.0 (Linux; U; Android 4.4.2; GT-I9502 Build/KOT49H)</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="获取商品的系统编号" enabled="true">
<stringProp name="RegexExtractor.useHeaders">false</stringProp>
<stringProp name="RegexExtractor.refname">sysNo</stringProp>
<stringProp name="RegexExtractor.regex">&quot;sysNo&quot;:&quot;(.+?)&quot;,&quot;</stringProp>
<stringProp name="RegexExtractor.template">$1$</stringProp>
<stringProp name="RegexExtractor.default">ERROR</stringProp>
<stringProp name="RegexExtractor.match_number">1</stringProp>
</RegexExtractor>
<hashTree/>
</hashTree>
<BeanShellAssertion guiclass="BeanShellAssertionGui" testclass="BeanShellAssertion" testname="BeanShell Assertion - 简单示例" enabled="true">
<stringProp name="BeanShellAssertion.query">import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.assertions.AssertionResult; String exp = vars.get(&quot;exp_sysNo&quot;);
String act = vars.get(&quot;sysNo&quot;); if (exp.equals(act)) {
log.info(exp);
log.info(act);
log.info(&quot;Test passed.&quot;);
} else {
log.info(exp);
log.info(act);
log.info(&quot;Test failed to assert : Expected &lt;&quot; + exp + &quot;&gt;, but &lt;&quot; + act + &quot;&gt;.&quot;);
} ac = &quot;a&quot;; if (exp.equals(ac)) {
log.info(exp);
log.info(ac);
log.info(&quot;Test passed.&quot;);
} else {
log.info(exp);
log.info(ac);
log.info(&quot;Test failed to assert : Expected &lt;&quot; + exp + &quot;&gt;, but &lt;&quot; + ac + &quot;&gt;.&quot;);
} </stringProp>
<stringProp name="BeanShellAssertion.filename"></stringProp>
<stringProp name="BeanShellAssertion.parameters"></stringProp>
<boolProp name="BeanShellAssertion.resetInterpreter">true</boolProp>
</BeanShellAssertion>
<hashTree/>
<BeanShellAssertion guiclass="BeanShellAssertionGui" testclass="BeanShellAssertion" testname="BeanShell Assertion - 常用方法" enabled="true">
<stringProp name="BeanShellAssertion.query">
log.info(&quot;\n01.获取请求响应数据:SampleResult.getResponseData()&quot; + SampleResult.getResponseData() + &quot;\n\n&quot;);
log.info(&quot;\n02.获取请求响应返回码:SampleResult.getResponseCode()\n&quot; + SampleResult.getResponseCode() + &quot;\n\n&quot;);
log.info(&quot;\n03.获取请求响应信息:SampleResult.getResponseMessage()\n&quot; + SampleResult.getResponseMessage() + &quot;\n\n&quot;);
log.info(&quot;\n04.获取请求响应头信息:SampleResult.getResponseHeaders()\n&quot; + SampleResult.getResponseHeaders() + &quot;\n\n&quot;); log.info(&quot;\n05.获取请求的头信息:SampleResult.getRequestHeaders()\n&quot; + SampleResult.getRequestHeaders() + &quot;\n\n&quot;);
log.info(&quot;\n06.获取请求的标签:SampleResult.getSampleLabel()\n&quot; + SampleResult.getSampleLabel() + &quot;\n\n&quot;); log.info(&quot;\n07.获取请求执行结果:SampleResult.isSuccessful()\n&quot; + SampleResult.isSuccessful() + &quot;\n\n&quot;);
log.info(&quot;\n08.设置请求响应的返回码:SampleResult.setResponseCode(\&quot;502\&quot;)\n&quot; + SampleResult.setResponseCode(&quot;502&quot;) + &quot;\n\n&quot;);
log.info(&quot;\n09.设置请求响应的信息:SampleResult.setResponseMessage(\&quot;SampleResult.setResponseMessage\&quot;)\n&quot; + SampleResult.setResponseMessage(&quot;设置响应信息:SampleResult.setResponseMessage&quot;) + &quot;\n\n&quot;);
log.info(&quot;\n10.获取请求的返回码:SampleResult.getResponseCode()\n&quot; + SampleResult.getResponseCode() + &quot;\n\n&quot;);
log.info(&quot;\n11.获取请求的响应信息:SampleResult.getResponseMessage()\n&quot; + SampleResult.getResponseMessage() + &quot;\n\n&quot;); log.info(&quot;\n12.获取请求的头信息:vars.toString()\n&quot; + vars.toString() + &quot;\n\n&quot;); log.info(&quot;\n13.获取请求的头信息:props.toString()\n&quot; + props.toString() + &quot;\n\n&quot;);
log.info(&quot;\n14.获取请求的头信息:ctx.toString()\n&quot; + ctx.toString() + &quot;\n\n&quot;); </stringProp>
<stringProp name="BeanShellAssertion.filename"></stringProp>
<stringProp name="BeanShellAssertion.parameters"></stringProp>
<boolProp name="BeanShellAssertion.resetInterpreter">false</boolProp>
</BeanShellAssertion>
<hashTree/>
</hashTree>
<ResultCollector guiclass="AssertionVisualizer" testclass="ResultCollector" testname="断言结果" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<threadCounts>true</threadCounts>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="察看结果树" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<threadCounts>true</threadCounts>
</value>
</objProp>
<stringProp name="filename">${__property(JmeterAuto_LogFile)}</stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
</hashTree>
</jmeterTestPlan>

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 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

JMeter学习-015-JMeter 断言之-Bean Shell Assertion的更多相关文章

  1. Jmeter之添加响应断言,bean shell post processor

    一直在想运用jmeter来实现接口自动化测试,但是每次每个接口执行完,需要肉眼去看一看,执行的结果对不对,总结了两种办法, 一.将每个请求的响应结果,导出到文件 选中请求右键-->添加后置处理器 ...

  2. JMeter学习笔记--JMeter常用测试元件

    JMeter测试计划有一个被称为“函数测试模式”的选项,如果被选择,它会使Jmeter记录来自服务器返回的每个取样的数据.如果你在测试监听器中选择一个文件,这个数据将被写入文件.如果你尝试一个较小的测 ...

  3. JMeter学习笔记--JMeter执行顺序规则

    JMeter执行顺序规则: 配置元件 前置处理器 定时器 采样器 后置处理器(除非服务器响应为空) 断言 监听器 只有当作用域内存在采样器时,定时器.断言.前置/后置处理器才会被执行,逻辑控制器和采样 ...

  4. JMeter学习笔记--JMeter监听器

    监听器(Listeners)是一种展示采样结果的测试元件,采样结果可以通过树.表格.图片加以展示,或者简单地写入某个结果文件之中. 注:不同的监听器通过不同的方式展示服务器响应信息,但它们都将同样的原 ...

  5. JMeter学习笔记--JMeter属性和变量

    JMeter属性统一定义在jmeter.properties文件中.JMeter属性在测试脚本的任何地方都是可见的(全局),通常被用来定义一些JMeter使用的默认值.如属性remote_hosts定 ...

  6. JMeter学习笔记--JMeter前置处理器

    前置处理器被用来修改作用域内的采样器 HTML 链接解析器:解析从服务器得到的HTML响应,并从中提取链接和表单,使用perl型的正则表达式来寻求匹配项. HTML URL重写修饰符:使用URL重写来 ...

  7. JMeter学习-016-思路篇之-山重水复柳暗花明

    首先,此文非技术类博文,为思路类的博文,敬请参阅,欢迎共同探讨! 今天在编写 JMeter 接口监控脚本时,遇到了一个问题,在解决问题的时候,思路出现了偏差,导致了自己在解决问题时,绕了弯,浪费了些时 ...

  8. jmeter常用四种断言

    jmeter常用四种断言 一.Response Assertion(响应断言)二.Size Assertion(数据包字节大小断言)三.Duration Assertion(持续时间断言)四.bean ...

  9. Jmeter 中对响应报文处理后断言用到BeanShell Assertion

    Jmeter中常用的断言可以是Response Assertion 如果需要对响应报文中的某个字符串进行解码,对解码之后的值在进行断言要怎么做呢? 仔细观察一下,可以用下面俩个元件 Regular E ...

随机推荐

  1. WinServer2008r2 机器时间格式修改

    windows2008 这么高级的系统不可能改个系统的日期时间显示格式还要进注册表啊.于是有baidu,google了下终于发现了,原来还有不需要注册表的更简便方法.windows2008默认时间格式 ...

  2. 【Android】 Android-wifi 直连 wifi direct wifi p2p

    现在,Android的支持Wi -Fi的直接点对点点对点(P2P)Android系统的供电设备和其他类型的设备,没有一个热点或互联网连接之间的连接.Android框架提供了一套Wi - Fi的P2P的 ...

  3. 【Django】Django 如何使用 Django设置的日志?

    代码: from django.core.management.base import BaseCommand, CommandError from django.db import models # ...

  4. C&plus;&plus; 运行时类型识别 知道实例父类类型,显示出子类类型

    typeid(nets_[i]).name() 其中的nets_[i]是一个对象

  5. centos 6 安装docker

    安装 Fedora EPEL 1.yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarc ...

  6. CENTOS6&period;6上搭建单实例ORACLE12C

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 自己在centos6.6上搭建的单实例oracle12c 由 ...

  7. 项目中的Git七步精髓

    项目中Git常用的七步操作: 1.git branch -a  查看所有分支 2.git checkout dev_yxq 如果冲突了,操作回退上一个版本, git status git checko ...

  8. fastJson注解&commat;JSONField使用的一个实例

    1.实体类 package jsonArrayjsonObject.cn; import java.io.Serializable; import java.util.Date; import com ...

  9. Special Offer&excl; Super Price 999 Bourles&excl;

    Description Polycarpus is an amateur businessman. Recently he was surprised to find out that the mar ...

  10. cURL命令行工具请求网页

    http://curl.haxx.se/download.html curl非常博大,用户要想使用好这个工具,除了详细学习参数之外,还需要深刻理解http的各种协议与URL的各个语法. 这里推荐几个读 ...