上文我们讲述了如何对 HTTP请求 的响应数据进行断言,以判断响应是否符合我们的预期,敬请参阅:JMeter学习-007-JMeter 断言实例之一 - 响应断言
那么我们如何获取 HTTP请求 响应结果中的数据呢?此文以获取类目 手机数码-手机通讯-苹果 结果列表中的第一个商品的系统编号为例演示(脚本基于上篇文章,请知悉)。
如下为请求响应数据中的部分数据,我们最终要获取的数据为 "sysNo": "2142717" 中的 2142717。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | {    "sysNo": "2142717",    "skuid": "487626525247",    "productID": "101-006-72958",    "productTitle": "苹果(Apple)iPhone 6 Plus (A1524) 16GB 金色 移动联通电信4G手机",    "price": "556600",    "activePrice": "",    "marketprice": "608800",    "promotionDesc": "A1524、A1586为三网通版,支持移动\/联通\/电信4G\/3G\/2G。找水货?找翻新?没有!易迅网为国行正品代言!!",    "manufacturerCode": "49",    "manufacturerName": "苹果(Apple)",    "evaluationNum": "1717",    "gradeNum": "48",    "onlineQty": "796",    "shippingday": "0t0",    "gift": 0,    "promotionType": "0",    "attribute": "2000000000e214处理器;<strong>(为保持样式美观,此处有删减文字,请知悉!)</strong>;43257eFDD-LTE\/TD-LTE\-LTE)\/电信4G(FDD-LTE);移动3G(TD-SCDMA)\353e2;49e9?金色;42914?内存e1?16G;43246?制式e4?5.5寸三网通版",    "saleNum": "454",    "productTypeMasterid": "0",    "areaCode": "1",    "classid": "203320",    "tag": "超薄手机 大屏手机 待机时间长 高清屏 女神手机 拍照功能强 商务手机 外观漂亮 指纹识别 主流潮机",    "goodsUrl": "http:\/\/item.yixun.com\/item-2142717.html",    "picUrl": "http:\/\/img3.wgimg.com\/qqbuy\/2295220799\/item-00000000000000000000007188CE4A3F.0.jpg\/200?55DAE367",    "reachable": "0"}, | 
那么我们如何获取呢? JMeter 提供的后置处理器中提供了响应的获取方法,例如:正则表达式提取器、BeanShell PostProcessor、BSF PostProcessor 等。当下以 正则表达式提取器为例演示讲解,对应的添加路径为:【添加/后置处理器/正则表达式提取器】,添加后目录结果如下:
对应添加的正则表达式提取器如下所示:
正则表达式提取器说明:
 1。若为:
1。若为: 0,则为所有的匹配数据,例如:"sysNo":"123453463"," 其中 123453463 为 (.+?) 匹配的数据,即最终提取的目标部分。若模板为:
0,则为所有的匹配数据,例如:"sysNo":"123453463"," 其中 123453463 为 (.+?) 匹配的数据,即最终提取的目标部分。若模板为: 1,则 1 对应正则表达式中的 (.+?)
1,则 1 对应正则表达式中的 (.+?)
对应的脚本源码如下所示:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | <?xmlversion="1.0" encoding="UTF-8"?><jmeterTestPlanversion="1.2" properties="2.8" jmeter="2.13 r1665067">  <hashTree>    <TestPlanguiclass="TestPlanGui" testclass="TestPlan" testname="接口自动化测试用例 - 非登录态" enabled="true">      <stringPropname="TestPlan.comments"></stringProp>      <boolPropname="TestPlan.functional_mode">false</boolProp>      <boolPropname="TestPlan.serialize_threadgroups">false</boolProp>      <elementPropname="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">        <collectionPropname="Arguments.arguments"/>      </elementProp>      <stringPropname="TestPlan.user_define_classpath"></stringProp>    </TestPlan>    <hashTree>      <ThreadGroupguiclass="ThreadGroupGui" testclass="ThreadGroup" testname="001-类目搜索验证" enabled="true">        <stringPropname="ThreadGroup.on_sample_error">continue</stringProp>        <elementPropname="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">          <boolPropname="LoopController.continue_forever">false</boolProp>          <stringPropname="LoopController.loops">1</stringProp>        </elementProp>        <stringPropname="ThreadGroup.num_threads">1</stringProp>        <stringPropname="ThreadGroup.ramp_time">1</stringProp>        <longPropname="ThreadGroup.start_time">1419564228000</longProp>        <longPropname="ThreadGroup.end_time">1419564228000</longProp>        <boolPropname="ThreadGroup.scheduler">false</boolProp>        <stringPropname="ThreadGroup.duration"></stringProp>        <stringPropname="ThreadGroup.delay"></stringProp>      </ThreadGroup>      <hashTree>        <HTTPSamplerProxyguiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="手机数码-手机通讯-苹果" enabled="true">          <elementPropname="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">            <collectionPropname="Arguments.arguments">              <elementPropname="districtId" elementType="HTTPArgument">                <boolPropname="HTTPArgument.always_encode">false</boolProp>                <stringPropname="Argument.name">districtId</stringProp>                <stringPropname="Argument.value">29357</stringProp>                <stringPropname="Argument.metadata">=</stringProp>                <boolPropname="HTTPArgument.use_equals">true</boolProp>              </elementProp>              <elementPropname="exAppTag" elementType="HTTPArgument">                <boolPropname="HTTPArgument.always_encode">false</boolProp>                <stringPropname="Argument.name">exAppTag</stringProp>                <stringPropname="Argument.value">2045191607</stringProp>                <stringPropname="Argument.metadata">=</stringProp>                <boolPropname="HTTPArgument.use_equals">true</boolProp>              </elementProp>            </collectionProp>          </elementProp>          <stringPropname="HTTPSampler.domain">mb.51buy.com</stringProp>          <stringPropname="HTTPSampler.port"></stringProp>          <stringPropname="HTTPSampler.connect_timeout"></stringProp>          <stringPropname="HTTPSampler.response_timeout"></stringProp>          <stringPropname="HTTPSampler.protocol">http</stringProp>          <stringPropname="HTTPSampler.contentEncoding">GB2312</stringProp>          <stringPropname="HTTPSampler.path">/json.php?mod=Search&act=page&p=1&path=706188t706189&districtId=29357&areacode=1&dtype=list%7Cpage%7Cclasses&appSource=android&appVersion=45</stringProp>          <stringPropname="HTTPSampler.method">POST</stringProp>          <boolPropname="HTTPSampler.follow_redirects">true</boolProp>          <boolPropname="HTTPSampler.auto_redirects">false</boolProp>          <boolPropname="HTTPSampler.use_keepalive">true</boolProp>          <boolPropname="HTTPSampler.DO_MULTIPART_POST">false</boolProp>          <boolPropname="HTTPSampler.monitor">false</boolProp>          <stringPropname="HTTPSampler.embedded_url_re"></stringProp>        </HTTPSamplerProxy>        <hashTree>          <HeaderManagerguiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP信息头管理器" enabled="true">            <collectionPropname="HeaderManager.headers">              <elementPropname="Charset" elementType="Header">                <stringPropname="Header.name">Charset</stringProp>                <stringPropname="Header.value">UTF-8</stringProp>              </elementProp>              <elementPropname="Content-Type" elementType="Header">                <stringPropname="Header.name">Content-Type</stringProp>                <stringPropname="Header.value">application/x-www-form-urlencoded</stringProp>              </elementProp>              <elementPropname="Accept-Encoding" elementType="Header">                <stringPropname="Header.name">Accept-Encoding</stringProp>                <stringPropname="Header.value">gzip</stringProp>              </elementProp>              <elementPropname="User-Agent" elementType="Header">                <stringPropname="Header.name">User-Agent</stringProp>                <stringPropname="Header.value">Dalvik/1.6.0 (Linux; U; Android 4.4.2; GT-I9502 Build/KOT49H)</stringProp>              </elementProp>            </collectionProp>          </HeaderManager>          <hashTree/>          <ResponseAssertionguiclass="AssertionGui" testclass="ResponseAssertion" testname="01 - 判断类目搜索结果状态码" enabled="true">            <collectionPropname="Asserion.test_strings">              <stringPropname="71131476">"errno":0</stringProp>            </collectionProp>            <stringPropname="Assertion.test_field">Assertion.response_data</stringProp>            <boolPropname="Assertion.assume_success">false</boolProp>            <intPropname="Assertion.test_type">2</intProp>          </ResponseAssertion>          <hashTree/>          <RegexExtractorguiclass="RegexExtractorGui" testclass="RegexExtractor" testname="正则表达式提取器  --  获取类目搜索结果商品列表中商品的系统编号" enabled="true">            <stringPropname="RegexExtractor.useHeaders">false</stringProp>            <stringPropname="RegexExtractor.refname">goodsid</stringProp>            <stringPropname="RegexExtractor.regex">"sysNo":"(.+?)","</stringProp>            <stringPropname="RegexExtractor.template">$1$</stringProp>            <stringPropname="RegexExtractor.default">ERROR</stringProp>            <stringPropname="RegexExtractor.match_number">1</stringProp>          </RegexExtractor>          <hashTree/>          <DebugPostProcessorguiclass="TestBeanGUI" testclass="DebugPostProcessor" testname="Debug PostProcessor  --  所属 :HTTP请求" enabled="true">            <boolPropname="displayJMeterProperties">false</boolProp>            <boolPropname="displayJMeterVariables">true</boolProp>            <boolPropname="displaySamplerProperties">true</boolProp>            <boolPropname="displaySystemProperties">false</boolProp>          </DebugPostProcessor>          <hashTree/>        </hashTree>      </hashTree>      <ResultCollectorguiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="察看结果树" enabled="true">        <boolPropname="ResultCollector.error_logging">false</boolProp>        <objProp>          <name>saveConfig</name>          <valueclass="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>        <stringPropname="filename"></stringProp>      </ResultCollector>      <hashTree/>    </hashTree>  </hashTree></jmeterTestPlan> | 
其中的 Debug PostProcessor 为调试所用,一般用于查看变量值,添加方法同 正则表达式提取器。
脚本执行结果如下所示:
至此, JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一) 顺利完结,希望此文能够给初学 JMeter 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^
JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一)概述及简单实例
原文:http://www.cnblogs.com/liunaixu/p/7352025.html