Authored by Rong

commit by shell

@@ -204,7 +204,7 @@ @@ -204,7 +204,7 @@
204 <stringProp name="shareMode">shareMode.all</stringProp> 204 <stringProp name="shareMode">shareMode.all</stringProp>
205 </CSVDataSet> 205 </CSVDataSet>
206 <hashTree/> 206 <hashTree/>
207 - <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_product_intro" enabled="true"> 207 + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_coupons_queryProdPageCoupons" enabled="true">
208 <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> 208 <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
209 <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> 209 <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
210 <boolProp name="LoopController.continue_forever">false</boolProp> 210 <boolProp name="LoopController.continue_forever">false</boolProp>
@@ -217,10 +217,10 @@ @@ -217,10 +217,10 @@
217 <boolProp name="ThreadGroup.scheduler">false</boolProp> 217 <boolProp name="ThreadGroup.scheduler">false</boolProp>
218 <stringProp name="ThreadGroup.duration"></stringProp> 218 <stringProp name="ThreadGroup.duration"></stringProp>
219 <stringProp name="ThreadGroup.delay"></stringProp> 219 <stringProp name="ThreadGroup.delay"></stringProp>
220 - <stringProp name="TestPlan.comments">&#21830;&#21697;&#35814;&#24773;&#25551;&#36848;&#20449;&#24687;</stringProp> 220 + <stringProp name="TestPlan.comments">&#21830;&#21697;&#35814;&#24773;&#39029;&#20248;&#24800;&#21048;&#25509;&#21475;</stringProp>
221 </ThreadGroup> 221 </ThreadGroup>
222 <hashTree> 222 <hashTree>
223 - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_product_intro" enabled="true"> 223 + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_coupons_queryProdPageCoupons" enabled="true">
224 <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> 224 <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
225 <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> 225 <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
226 <collectionProp name="Arguments.arguments"> 226 <collectionProp name="Arguments.arguments">
@@ -245,7 +245,197 @@ @@ -245,7 +245,197 @@
245 <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> 245 <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
246 <boolProp name="HTTPSampler.monitor">false</boolProp> 246 <boolProp name="HTTPSampler.monitor">false</boolProp>
247 <stringProp name="HTTPSampler.embedded_url_re"></stringProp> 247 <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
248 - <stringProp name="TestPlan.comments">&#21830;&#21697;&#35814;&#24773;&#25551;&#36848;&#20449;&#24687;</stringProp> 248 + <stringProp name="TestPlan.comments">&#21830;&#21697;&#35814;&#24773;&#39029;&#20248;&#24800;&#21048;&#25509;&#21475;</stringProp>
  249 + </HTTPSamplerProxy>
  250 + <hashTree>
  251 + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
  252 + <stringProp name="TestPlan.comments"></stringProp>
  253 + <boolProp name="resetInterpreter">false</boolProp>
  254 + <stringProp name="parameters">${brand_id} ${product_skn} ${uid}</stringProp>
  255 + <stringProp name="filename"></stringProp>
  256 + <stringProp name="script">import java.security.MessageDigest;
  257 +import java.util.Random;
  258 +String[] clientTypes = {&quot;android&quot;};
  259 +String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
  260 +int rd = new Random().nextInt(1);
  261 +String clientType = clientTypes[rd];
  262 +String privateKey = privateKeys[rd];
  263 +String req = &quot;app_version=5.8.1&amp;brandId=&quot;+bsh.args[0]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_ProductDetail&amp;method=app.coupons.queryProdPageCoupons&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=5d4c38578980b26ac85d1d359271b3ed&amp;skn=&quot;+bsh.args[1]+&quot;&amp;udid=61b598a81522808ba9c70597380760e47284b16e&amp;uid=&quot;+bsh.args[2]+&quot;&amp;v=7&quot;;
  264 +MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
  265 +byte[] btInput = req.getBytes();
  266 +md.update(btInput);
  267 +byte[] btResult = md.digest();
  268 +StringBuffer sb = new StringBuffer();
  269 +for(byte b : btResult){
  270 + int bt = b&amp;0xff;
  271 + if(bt&lt;16){
  272 + sb.append(0);
  273 + }
  274 + sb.append(Integer.toHexString(bt));
  275 +}
  276 +String md5 = sb.toString();
  277 +vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
  278 + </BeanShellPreProcessor>
  279 + <hashTree/>
  280 + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
  281 + <collectionProp name="Asserion.test_strings">
  282 + <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
  283 + </collectionProp>
  284 + <stringProp name="TestPlan.comments"></stringProp>
  285 + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
  286 + <boolProp name="Assertion.assume_success">false</boolProp>
  287 + <intProp name="Assertion.test_type">16</intProp>
  288 + </ResponseAssertion>
  289 + <hashTree/>
  290 + </hashTree>
  291 + <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
  292 + <stringProp name="TestPlan.comments"></stringProp>
  293 + <doubleProp>
  294 + <name>throughput</name>
  295 + <value>120000</value>
  296 + <savedValue>0.0</savedValue>
  297 + </doubleProp>
  298 + <intProp name="calcMode">2</intProp>
  299 + </ConstantThroughputTimer>
  300 + <hashTree/>
  301 + </hashTree>
  302 + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_consult_common" enabled="true">
  303 + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
  304 + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
  305 + <boolProp name="LoopController.continue_forever">false</boolProp>
  306 + <intProp name="LoopController.loops">-1</intProp>
  307 + </elementProp>
  308 + <stringProp name="ThreadGroup.num_threads">80</stringProp>
  309 + <stringProp name="ThreadGroup.ramp_time">10</stringProp>
  310 + <longProp name="ThreadGroup.start_time">1488865571000</longProp>
  311 + <longProp name="ThreadGroup.end_time">1488865571000</longProp>
  312 + <boolProp name="ThreadGroup.scheduler">false</boolProp>
  313 + <stringProp name="ThreadGroup.duration"></stringProp>
  314 + <stringProp name="ThreadGroup.delay"></stringProp>
  315 + <stringProp name="TestPlan.comments">&#21672;&#35810;&#20449;&#24687;</stringProp>
  316 + </ThreadGroup>
  317 + <hashTree>
  318 + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_consult_common" enabled="true">
  319 + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
  320 + <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
  321 + <collectionProp name="Arguments.arguments">
  322 + <elementProp name="" elementType="HTTPArgument">
  323 + <boolProp name="HTTPArgument.always_encode">false</boolProp>
  324 + <stringProp name="Argument.value"></stringProp>
  325 + <stringProp name="Argument.metadata">=</stringProp>
  326 + </elementProp>
  327 + </collectionProp>
  328 + </elementProp>
  329 + <stringProp name="HTTPSampler.domain"></stringProp>
  330 + <stringProp name="HTTPSampler.port"></stringProp>
  331 + <stringProp name="HTTPSampler.connect_timeout"></stringProp>
  332 + <stringProp name="HTTPSampler.response_timeout"></stringProp>
  333 + <stringProp name="HTTPSampler.protocol"></stringProp>
  334 + <stringProp name="HTTPSampler.contentEncoding"></stringProp>
  335 + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
  336 + <stringProp name="HTTPSampler.method">GET</stringProp>
  337 + <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
  338 + <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
  339 + <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
  340 + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
  341 + <boolProp name="HTTPSampler.monitor">false</boolProp>
  342 + <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
  343 + <stringProp name="TestPlan.comments">&#21672;&#35810;&#20449;&#24687;</stringProp>
  344 + </HTTPSamplerProxy>
  345 + <hashTree>
  346 + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
  347 + <stringProp name="TestPlan.comments"></stringProp>
  348 + <boolProp name="resetInterpreter">false</boolProp>
  349 + <stringProp name="parameters">${uid}</stringProp>
  350 + <stringProp name="filename"></stringProp>
  351 + <stringProp name="script">import java.security.MessageDigest;
  352 +import java.util.Random;
  353 +String[] clientTypes = {&quot;android&quot;};
  354 +String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
  355 +int rd = new Random().nextInt(1);
  356 +String clientType = clientTypes[rd];
  357 +String privateKey = privateKeys[rd];
  358 +String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_ProductDetail&amp;method=app.consult.common&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=414x736&amp;session_key=4d9b8efe7b861105494d401783830da2&amp;udid=19b53b1e035e604452daff3012a7cb2797cbfc0b&amp;uid=&quot;+bsh.args[0]+&quot;&amp;v=7&quot;;
  359 +MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
  360 +byte[] btInput = req.getBytes();
  361 +md.update(btInput);
  362 +byte[] btResult = md.digest();
  363 +StringBuffer sb = new StringBuffer();
  364 +for(byte b : btResult){
  365 + int bt = b&amp;0xff;
  366 + if(bt&lt;16){
  367 + sb.append(0);
  368 + }
  369 + sb.append(Integer.toHexString(bt));
  370 +}
  371 +String md5 = sb.toString();
  372 +vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
  373 + </BeanShellPreProcessor>
  374 + <hashTree/>
  375 + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
  376 + <collectionProp name="Asserion.test_strings">
  377 + <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
  378 + </collectionProp>
  379 + <stringProp name="TestPlan.comments"></stringProp>
  380 + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
  381 + <boolProp name="Assertion.assume_success">false</boolProp>
  382 + <intProp name="Assertion.test_type">16</intProp>
  383 + </ResponseAssertion>
  384 + <hashTree/>
  385 + </hashTree>
  386 + <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
  387 + <stringProp name="TestPlan.comments"></stringProp>
  388 + <doubleProp>
  389 + <name>throughput</name>
  390 + <value>120000</value>
  391 + <savedValue>0.0</savedValue>
  392 + </doubleProp>
  393 + <intProp name="calcMode">2</intProp>
  394 + </ConstantThroughputTimer>
  395 + <hashTree/>
  396 + </hashTree>
  397 + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_query_bundleSkn" enabled="true">
  398 + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
  399 + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
  400 + <boolProp name="LoopController.continue_forever">false</boolProp>
  401 + <intProp name="LoopController.loops">-1</intProp>
  402 + </elementProp>
  403 + <stringProp name="ThreadGroup.num_threads">80</stringProp>
  404 + <stringProp name="ThreadGroup.ramp_time">10</stringProp>
  405 + <longProp name="ThreadGroup.start_time">1488865571000</longProp>
  406 + <longProp name="ThreadGroup.end_time">1488865571000</longProp>
  407 + <boolProp name="ThreadGroup.scheduler">false</boolProp>
  408 + <stringProp name="ThreadGroup.duration"></stringProp>
  409 + <stringProp name="ThreadGroup.delay"></stringProp>
  410 + <stringProp name="TestPlan.comments">&#22871;&#39184;</stringProp>
  411 + </ThreadGroup>
  412 + <hashTree>
  413 + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_query_bundleSkn" enabled="true">
  414 + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
  415 + <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
  416 + <collectionProp name="Arguments.arguments">
  417 + <elementProp name="" elementType="HTTPArgument">
  418 + <boolProp name="HTTPArgument.always_encode">false</boolProp>
  419 + <stringProp name="Argument.value"></stringProp>
  420 + <stringProp name="Argument.metadata">=</stringProp>
  421 + </elementProp>
  422 + </collectionProp>
  423 + </elementProp>
  424 + <stringProp name="HTTPSampler.domain"></stringProp>
  425 + <stringProp name="HTTPSampler.port"></stringProp>
  426 + <stringProp name="HTTPSampler.connect_timeout"></stringProp>
  427 + <stringProp name="HTTPSampler.response_timeout"></stringProp>
  428 + <stringProp name="HTTPSampler.protocol"></stringProp>
  429 + <stringProp name="HTTPSampler.contentEncoding"></stringProp>
  430 + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
  431 + <stringProp name="HTTPSampler.method">GET</stringProp>
  432 + <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
  433 + <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
  434 + <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
  435 + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
  436 + <boolProp name="HTTPSampler.monitor">false</boolProp>
  437 + <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
  438 + <stringProp name="TestPlan.comments">&#22871;&#39184;</stringProp>
249 </HTTPSamplerProxy> 439 </HTTPSamplerProxy>
250 <hashTree> 440 <hashTree>
251 <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true"> 441 <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
@@ -260,7 +450,197 @@ String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;}; @@ -260,7 +450,197 @@ String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
260 int rd = new Random().nextInt(1); 450 int rd = new Random().nextInt(1);
261 String clientType = clientTypes[rd]; 451 String clientType = clientTypes[rd];
262 String privateKey = privateKeys[rd]; 452 String privateKey = privateKeys[rd];
263 -String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_ProductDetail&amp;method=app.product.intro&amp;os_version=10.3.2&amp;physical_channel=3&amp;private_key=&quot;+privateKey+&quot;&amp;product_skn=&quot;+bsh.args[0]+&quot;&amp;return_type=html&amp;screen_size=414x736&amp;session_key=206e990645b864b46bdcf0052f7916cc&amp;udid=06d06e09f9a194e4078712c49dc3402632d30d85&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=3&quot;; 453 +String req = &quot;app_version=5.5.2&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;method=app.query.bundleSkn&amp;os_version=android7.0:VIE-AL10&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;product_skn=&quot;+bsh.args[0]+&quot;&amp;screen_size=1080x1800&amp;session_key=4509fb6ae295737eaeea4f7d08223c49&amp;udid=861962037760740697006a7ec7b4f4d&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
  454 +MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
  455 +byte[] btInput = req.getBytes();
  456 +md.update(btInput);
  457 +byte[] btResult = md.digest();
  458 +StringBuffer sb = new StringBuffer();
  459 +for(byte b : btResult){
  460 + int bt = b&amp;0xff;
  461 + if(bt&lt;16){
  462 + sb.append(0);
  463 + }
  464 + sb.append(Integer.toHexString(bt));
  465 +}
  466 +String md5 = sb.toString();
  467 +vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
  468 + </BeanShellPreProcessor>
  469 + <hashTree/>
  470 + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
  471 + <collectionProp name="Asserion.test_strings">
  472 + <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
  473 + </collectionProp>
  474 + <stringProp name="TestPlan.comments"></stringProp>
  475 + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
  476 + <boolProp name="Assertion.assume_success">false</boolProp>
  477 + <intProp name="Assertion.test_type">16</intProp>
  478 + </ResponseAssertion>
  479 + <hashTree/>
  480 + </hashTree>
  481 + <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
  482 + <stringProp name="TestPlan.comments"></stringProp>
  483 + <doubleProp>
  484 + <name>throughput</name>
  485 + <value>120000</value>
  486 + <savedValue>0.0</savedValue>
  487 + </doubleProp>
  488 + <intProp name="calcMode">2</intProp>
  489 + </ConstantThroughputTimer>
  490 + <hashTree/>
  491 + </hashTree>
  492 + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_show_recentShareOrderByProductId" enabled="true">
  493 + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
  494 + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
  495 + <boolProp name="LoopController.continue_forever">false</boolProp>
  496 + <intProp name="LoopController.loops">-1</intProp>
  497 + </elementProp>
  498 + <stringProp name="ThreadGroup.num_threads">80</stringProp>
  499 + <stringProp name="ThreadGroup.ramp_time">10</stringProp>
  500 + <longProp name="ThreadGroup.start_time">1488865571000</longProp>
  501 + <longProp name="ThreadGroup.end_time">1488865571000</longProp>
  502 + <boolProp name="ThreadGroup.scheduler">false</boolProp>
  503 + <stringProp name="ThreadGroup.duration"></stringProp>
  504 + <stringProp name="ThreadGroup.delay"></stringProp>
  505 + <stringProp name="TestPlan.comments">&#26368;&#36817;&#19968;&#26465;&#26194;&#21333;&#20449;&#24687;</stringProp>
  506 + </ThreadGroup>
  507 + <hashTree>
  508 + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_show_recentShareOrderByProductId" enabled="true">
  509 + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
  510 + <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
  511 + <collectionProp name="Arguments.arguments">
  512 + <elementProp name="" elementType="HTTPArgument">
  513 + <boolProp name="HTTPArgument.always_encode">false</boolProp>
  514 + <stringProp name="Argument.value"></stringProp>
  515 + <stringProp name="Argument.metadata">=</stringProp>
  516 + </elementProp>
  517 + </collectionProp>
  518 + </elementProp>
  519 + <stringProp name="HTTPSampler.domain"></stringProp>
  520 + <stringProp name="HTTPSampler.port"></stringProp>
  521 + <stringProp name="HTTPSampler.connect_timeout"></stringProp>
  522 + <stringProp name="HTTPSampler.response_timeout"></stringProp>
  523 + <stringProp name="HTTPSampler.protocol"></stringProp>
  524 + <stringProp name="HTTPSampler.contentEncoding"></stringProp>
  525 + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
  526 + <stringProp name="HTTPSampler.method">GET</stringProp>
  527 + <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
  528 + <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
  529 + <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
  530 + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
  531 + <boolProp name="HTTPSampler.monitor">false</boolProp>
  532 + <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
  533 + <stringProp name="TestPlan.comments">&#26368;&#36817;&#19968;&#26465;&#26194;&#21333;&#20449;&#24687;</stringProp>
  534 + </HTTPSamplerProxy>
  535 + <hashTree>
  536 + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
  537 + <stringProp name="TestPlan.comments"></stringProp>
  538 + <boolProp name="resetInterpreter">false</boolProp>
  539 + <stringProp name="parameters">${product_id} ${uid}</stringProp>
  540 + <stringProp name="filename"></stringProp>
  541 + <stringProp name="script">import java.security.MessageDigest;
  542 +import java.util.Random;
  543 +String[] clientTypes = {&quot;android&quot;};
  544 +String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
  545 +int rd = new Random().nextInt(1);
  546 +String clientType = clientTypes[rd];
  547 +String privateKey = privateKeys[rd];
  548 +String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;method=show.recentShareOrderByProductId&amp;os_version=10.2.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;productId=&quot;+bsh.args[0]+&quot;&amp;screen_size=375x667&amp;session_key=f4e5e2c6900d6f42df7712872d5fc8c1&amp;udid=53a25f1afbdb061da77f6ed9da0d49f9d482eca1&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&quot;;
  549 +MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
  550 +byte[] btInput = req.getBytes();
  551 +md.update(btInput);
  552 +byte[] btResult = md.digest();
  553 +StringBuffer sb = new StringBuffer();
  554 +for(byte b : btResult){
  555 + int bt = b&amp;0xff;
  556 + if(bt&lt;16){
  557 + sb.append(0);
  558 + }
  559 + sb.append(Integer.toHexString(bt));
  560 +}
  561 +String md5 = sb.toString();
  562 +vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
  563 + </BeanShellPreProcessor>
  564 + <hashTree/>
  565 + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
  566 + <collectionProp name="Asserion.test_strings">
  567 + <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
  568 + </collectionProp>
  569 + <stringProp name="TestPlan.comments"></stringProp>
  570 + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
  571 + <boolProp name="Assertion.assume_success">false</boolProp>
  572 + <intProp name="Assertion.test_type">16</intProp>
  573 + </ResponseAssertion>
  574 + <hashTree/>
  575 + </hashTree>
  576 + <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
  577 + <stringProp name="TestPlan.comments"></stringProp>
  578 + <doubleProp>
  579 + <name>throughput</name>
  580 + <value>120000</value>
  581 + <savedValue>0.0</savedValue>
  582 + </doubleProp>
  583 + <intProp name="calcMode">2</intProp>
  584 + </ConstantThroughputTimer>
  585 + <hashTree/>
  586 + </hashTree>
  587 + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_product_queryShopsInfoById" enabled="true">
  588 + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
  589 + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
  590 + <boolProp name="LoopController.continue_forever">false</boolProp>
  591 + <intProp name="LoopController.loops">-1</intProp>
  592 + </elementProp>
  593 + <stringProp name="ThreadGroup.num_threads">80</stringProp>
  594 + <stringProp name="ThreadGroup.ramp_time">10</stringProp>
  595 + <longProp name="ThreadGroup.start_time">1488865571000</longProp>
  596 + <longProp name="ThreadGroup.end_time">1488865571000</longProp>
  597 + <boolProp name="ThreadGroup.scheduler">false</boolProp>
  598 + <stringProp name="ThreadGroup.duration"></stringProp>
  599 + <stringProp name="ThreadGroup.delay"></stringProp>
  600 + <stringProp name="TestPlan.comments">&#26681;&#25454;shopId&#33719;&#21462;&#24215;&#38138;&#20449;&#24687;</stringProp>
  601 + </ThreadGroup>
  602 + <hashTree>
  603 + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_product_queryShopsInfoById" enabled="true">
  604 + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
  605 + <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
  606 + <collectionProp name="Arguments.arguments">
  607 + <elementProp name="" elementType="HTTPArgument">
  608 + <boolProp name="HTTPArgument.always_encode">false</boolProp>
  609 + <stringProp name="Argument.value"></stringProp>
  610 + <stringProp name="Argument.metadata">=</stringProp>
  611 + </elementProp>
  612 + </collectionProp>
  613 + </elementProp>
  614 + <stringProp name="HTTPSampler.domain"></stringProp>
  615 + <stringProp name="HTTPSampler.port"></stringProp>
  616 + <stringProp name="HTTPSampler.connect_timeout"></stringProp>
  617 + <stringProp name="HTTPSampler.response_timeout"></stringProp>
  618 + <stringProp name="HTTPSampler.protocol"></stringProp>
  619 + <stringProp name="HTTPSampler.contentEncoding"></stringProp>
  620 + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
  621 + <stringProp name="HTTPSampler.method">GET</stringProp>
  622 + <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
  623 + <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
  624 + <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
  625 + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
  626 + <boolProp name="HTTPSampler.monitor">false</boolProp>
  627 + <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
  628 + <stringProp name="TestPlan.comments">&#26681;&#25454;shopId&#33719;&#21462;&#24215;&#38138;&#20449;&#24687;</stringProp>
  629 + </HTTPSamplerProxy>
  630 + <hashTree>
  631 + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
  632 + <stringProp name="TestPlan.comments"></stringProp>
  633 + <boolProp name="resetInterpreter">false</boolProp>
  634 + <stringProp name="parameters">${shop_id} ${uid}</stringProp>
  635 + <stringProp name="filename"></stringProp>
  636 + <stringProp name="script">import java.security.MessageDigest;
  637 +import java.util.Random;
  638 +String[] clientTypes = {&quot;android&quot;};
  639 +String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
  640 +int rd = new Random().nextInt(1);
  641 +String clientType = clientTypes[rd];
  642 +String privateKey = privateKeys[rd];
  643 +String req = &quot;app_version=5.8.1&amp;brand_id=208&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_ProductDetail&amp;method=app.product.queryShopsInfoById&amp;os_version=10.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=9a87c67cf18e27a65bed652166e59591&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;udid=66d83bdf3ab4f5c64b1c2d8ee0be7b608ce64b9a&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&quot;;
264 MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;); 644 MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
265 byte[] btInput = req.getBytes(); 645 byte[] btInput = req.getBytes();
266 md.update(btInput); 646 md.update(btInput);
@@ -279,7 +659,7 @@ vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stri @@ -279,7 +659,7 @@ vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stri
279 <hashTree/> 659 <hashTree/>
280 <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true"> 660 <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
281 <collectionProp name="Asserion.test_strings"> 661 <collectionProp name="Asserion.test_strings">
282 - <stringProp name="1450572480">html</stringProp> 662 + <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
283 </collectionProp> 663 </collectionProp>
284 <stringProp name="TestPlan.comments"></stringProp> 664 <stringProp name="TestPlan.comments"></stringProp>
285 <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> 665 <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>