diff --git a/script/2018618/productOther.jmx b/script/2018618/productOther.jmx
new file mode 100644
index 0000000..7c1f7df
--- /dev/null
+++ b/script/2018618/productOther.jmx
@@ -0,0 +1,2021 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1 r1770033">
+  <hashTree>
+    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="&#21830;&#21697;&#35814;&#24773;&#20854;&#23427;&#25509;&#21475;1w-150" enabled="true">
+      <stringProp name="TestPlan.comments">YohoPerformanceTest_ThisScriptIsGeneratedByYPT</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">
+        </collectionProp>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"></stringProp>
+    </TestPlan>
+    <hashTree>
+      <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="arguments_SNCP" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="SNCP" elementType="Argument">
+            <stringProp name="Argument.name">SNCP</stringProp>
+            <stringProp name="Argument.value">NGJjYjhkNmwwZGM0OTk0YmQyMTMwZjlmoTZmzjY4cjN</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+        </collectionProp>
+        <stringProp name="TestPlan.comments">&#36890;&#29992;session&#26657;&#39564;&#30721;</stringProp>      </Arguments>
+      <hashTree/>
+      <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_uid_mobile_openid_10w" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/uid_mobile_openid.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">uid,mobile,open_id</stringProp>
+        <stringProp name="delimiter">,</stringProp>
+        <boolProp name="quotedData">false</boolProp>
+        <boolProp name="recycle">true</boolProp>
+        <boolProp name="stopThread">false</boolProp>
+        <stringProp name="shareMode">shareMode.all</stringProp>
+      </CSVDataSet>
+      <hashTree/>
+      <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_hosts_pt" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/hosts_pt.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">HOST_API,HOST_SERVICE</stringProp>
+        <stringProp name="delimiter">,</stringProp>
+        <boolProp name="quotedData">false</boolProp>
+        <boolProp name="recycle">true</boolProp>
+        <boolProp name="stopThread">false</boolProp>
+        <stringProp name="shareMode">shareMode.all</stringProp>
+      </CSVDataSet>
+      <hashTree/>
+      <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_&#35746;&#21333;" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/order_code.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">order_code,order_uid</stringProp>
+        <stringProp name="delimiter">,</stringProp>
+        <boolProp name="quotedData">false</boolProp>
+        <boolProp name="recycle">true</boolProp>
+        <boolProp name="stopThread">false</boolProp>
+        <stringProp name="shareMode">shareMode.all</stringProp>
+      </CSVDataSet>
+      <hashTree/>
+      <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_&#24215;&#38138;" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/shops.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">shop_id,shop_domain</stringProp>
+        <stringProp name="delimiter">,</stringProp>
+        <boolProp name="quotedData">false</boolProp>
+        <boolProp name="recycle">true</boolProp>
+        <boolProp name="stopThread">false</boolProp>
+        <stringProp name="shareMode">shareMode.all</stringProp>
+      </CSVDataSet>
+      <hashTree/>
+      <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_uid_mobile_openid_test_1w" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/uid_mobile_openid_test.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">uid_test,mobile_test,open_id_test</stringProp>
+        <stringProp name="delimiter">,</stringProp>
+        <boolProp name="quotedData">false</boolProp>
+        <boolProp name="recycle">true</boolProp>
+        <boolProp name="stopThread">false</boolProp>
+        <stringProp name="shareMode">shareMode.all</stringProp>
+      </CSVDataSet>
+      <hashTree/>
+      <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_&#21830;&#21697;_&#21697;&#29260;_&#24215;&#38138;_10w" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/product_brand_shop.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">product_id,product_skn,brand_id,shop_id,shop_domain</stringProp>
+        <stringProp name="delimiter">,</stringProp>
+        <boolProp name="quotedData">false</boolProp>
+        <boolProp name="recycle">true</boolProp>
+        <boolProp name="stopThread">false</boolProp>
+        <stringProp name="shareMode">shareMode.all</stringProp>
+      </CSVDataSet>
+      <hashTree/>
+      <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_category_230" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/category_id.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">category_id</stringProp>
+        <stringProp name="delimiter">,</stringProp>
+        <boolProp name="quotedData">false</boolProp>
+        <boolProp name="recycle">true</boolProp>
+        <boolProp name="stopThread">false</boolProp>
+        <stringProp name="shareMode">shareMode.all</stringProp>
+      </CSVDataSet>
+      <hashTree/>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_consult_li" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#26597;&#35810;&#21830;&#21697;&#21672;&#35810;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_consult_li" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#26597;&#35810;&#21830;&#21697;&#21672;&#35810;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${product_id} ${uid}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:h5&quot;;
+String req = &quot;app_version=5.9.0&amp;client_type=&quot;+clientType+&quot;&amp;limit=2&amp;method=app.consult.li&amp;os_version=&quot;+os_version+&quot;&amp;page=1&amp;private_key=&quot;+privateKey+&quot;&amp;product_id=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.9.0&amp;client_type=&quot;+clientType+&quot;&amp;limit=2&amp;method=app.consult.li&amp;os_version=&quot;+os_version+&quot;&amp;page=1&amp;private_key=&quot;+privateKey+&quot;&amp;product_id=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>180</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_show_productShareOrderList" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#21830;&#21697;&#26194;&#21333;&#21015;&#34920;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_show_productShareOrderList" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#21830;&#21697;&#26194;&#21333;&#21015;&#34920;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${product_id} ${uid}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;,&quot;iphone&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;,&quot;a85bb0674e08986c6b115d5e3a4884fa&quot;};
+int rd = new Random().nextInt(2);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;android6.0.1:MI_5s&quot;;
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;filterId=7&amp;gender=1,3&amp;limit=10&amp;method=show.productShareOrderList&amp;os_version=&quot;+os_version+&quot;&amp;page=2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;productId=&quot;+bsh.args[0]+&quot;&amp;screen_size=1080x1920&amp;session_key=54a9efb344f2109d118c2fba12ce7637&amp;udid=8697180294303915eca63fcb5de5233&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;filterId=7&amp;gender=1,3&amp;limit=10&amp;method=show.productShareOrderList&amp;os_version=&quot;+os_version+&quot;&amp;page=2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;productId=&quot;+bsh.args[0]+&quot;&amp;screen_size=1080x1920&amp;session_key=54a9efb344f2109d118c2fba12ce7637&amp;udid=8697180294303915eca63fcb5de5233&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>180</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_web_brand_byDomain" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">2</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#26681;&#25454;&#22495;&#21517;&#26597;&#24215;&#38138;&#20449;&#24687;&#65288;PC&#36827;&#24215;&#38138;&#26102;&#20250;&#26597;&#35810;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_web_brand_byDomain" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#26681;&#25454;&#22495;&#21517;&#26597;&#24215;&#38138;&#20449;&#24687;&#65288;PC&#36827;&#24215;&#38138;&#26102;&#20250;&#26597;&#35810;&#65289;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_domain}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;web&quot;};
+String[] privateKeys = {&quot;0ed29744ed318fd28d2c07985d3ba633&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:h5&quot;;
+String req = &quot;app_version=5.9.0&amp;client_type=&quot;+clientType+&quot;&amp;domain=&quot;+bsh.args[0]+&quot;&amp;method=web.brand.byDomain&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.9.0&amp;client_type=&quot;+clientType+&quot;&amp;domain=&quot;+bsh.args[0]+&quot;&amp;method=web.brand.byDomain&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>360</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_shop_banner" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">5</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#24215;&#38138;banner</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_shop_banner" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#24215;&#38138;banner</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:web&quot;;
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=app.shop.banner&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=app.shop.banner&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>720</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_shop_coupons_list" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">5</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#24215;&#38138;&#21048;&#21015;&#34920;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_shop_coupons_list" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#24215;&#38138;&#21048;&#21015;&#34920;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id} ${uid}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;,&quot;iphone&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;,&quot;a85bb0674e08986c6b115d5e3a4884fa&quot;};
+int rd = new Random().nextInt(2);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;method=shop.coupons.list&amp;os_version=10.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=320x480&amp;session_key=d4632b4a5ce11f5c55fd1e7c5b3ef286&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;udid=f22afbf8d79589d2b33ec431804014344f8305ef&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+
+
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>720</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_shopsdecorator_getList" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">5</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#24215;&#38138;&#36164;&#28304;&#20301;&#25968;&#25454;&#65288;&#20154;&#27668;&#21830;&#21697;&#31561;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_shopsdecorator_getList" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#24215;&#38138;&#36164;&#28304;&#20301;&#25968;&#25454;&#65288;&#20154;&#27668;&#21830;&#21697;&#31561;&#65289;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:web&quot;;
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=app.shopsdecorator.getList&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=app.shopsdecorator.getList&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>720</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_shop_getSortInfo" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">5</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#33719;&#21462;&#20998;&#31867;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_shop_getSortInfo" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#33719;&#21462;&#20998;&#31867;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id} ${uid}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;,&quot;iphone&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;,&quot;a85bb0674e08986c6b115d5e3a4884fa&quot;};
+int rd = new Random().nextInt(2);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_StoreMain&amp;method=app.shop.getSortInfo&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=627e94460fce9b66e247ebd061fb36f9&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;udid=9561cd2262d04577127d43b483232a2f745dc25b&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+
+
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>720</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_shops_getShopsBrands" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">2</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#26681;&#25454;&#24215;&#38138;id&#26597;&#35810;&#35813;&#24215;&#38138;&#19979;&#38754;&#30340;&#21697;&#29260;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_shops_getShopsBrands" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#26681;&#25454;&#24215;&#38138;id&#26597;&#35810;&#35813;&#24215;&#38138;&#19979;&#38754;&#30340;&#21697;&#29260;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id} ${uid}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;,&quot;iphone&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;,&quot;a85bb0674e08986c6b115d5e3a4884fa&quot;};
+int rd = new Random().nextInt(2);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_StoreMain&amp;method=app.shops.getShopsBrands&amp;os_version=10.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=320x480&amp;session_key=d4632b4a5ce11f5c55fd1e7c5b3ef286&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;udid=f22afbf8d79589d2b33ec431804014344f8305ef&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+
+
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>360</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_popular_shopsdecorator" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">5</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#32418;&#20154;&#24215;&#38138;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_popular_shopsdecorator" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#32418;&#20154;&#24215;&#38138;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id} ${uid}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;,&quot;iphone&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;,&quot;a85bb0674e08986c6b115d5e3a4884fa&quot;};
+int rd = new Random().nextInt(2);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;android6.0.1:vivo_X9i&quot;;
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;method=app.popular.shopsdecorator&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=f2728b3f659fe8bc19578c5503161a56&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;udid=86522403847878016966bc20dfa6c28&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;method=app.popular.shopsdecorator&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=f2728b3f659fe8bc19578c5503161a56&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;udid=86522403847878016966bc20dfa6c28&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>720</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_favorite_isFavorite" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">5</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#24215;&#38138;&#26159;&#21542;&#25910;&#34255;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_favorite_isFavorite" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#24215;&#38138;&#26159;&#21542;&#25910;&#34255;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id} ${uid}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;,&quot;iphone&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;,&quot;a85bb0674e08986c6b115d5e3a4884fa&quot;};
+int rd = new Random().nextInt(2);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;android6.0.1:vivo_X9i&quot;;
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;id=&quot;+bsh.args[0]+&quot;&amp;method=app.favorite.isFavorite&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=f2728b3f659fe8bc19578c5503161a56&amp;type=shop&amp;udid=86522403847878016966bc20dfa6c28&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;id=&quot;+bsh.args[0]+&quot;&amp;method=app.favorite.isFavorite&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=f2728b3f659fe8bc19578c5503161a56&amp;type=shop&amp;udid=86522403847878016966bc20dfa6c28&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>720</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_h5_product_batch" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">5</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#25209;&#37327;&#33719;&#21462;&#24215;&#38138;&#20869;&#37197;&#32622;&#30340;&#21830;&#21697;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_h5_product_batch" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#25209;&#37327;&#33719;&#21462;&#24215;&#38138;&#20869;&#37197;&#32622;&#30340;&#21830;&#21697;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${product_skn} ${uid}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;h5&quot;,&quot;android&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;,&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
+int rd = new Random().nextInt(2);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;method=h5.product.batch&amp;os_version=10.0.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;productSkn=&quot;+bsh.args[0]+&quot;&amp;screen_size=414x736&amp;session_key=a289e81d99cfcb3f3c1cbed838fc6db8&amp;udid=e9aabafad96140c357e73e297a45d96f7daf1968&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+
+
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>720</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_shops_getIntro" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">5</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#24215;&#38138;&#20449;&#24687;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_shops_getIntro" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#24215;&#38138;&#20449;&#24687;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id} ${uid}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;,&quot;iphone&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;,&quot;a85bb0674e08986c6b115d5e3a4884fa&quot;};
+int rd = new Random().nextInt(2);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:web&quot;;
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=app.shops.getIntro&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=app.shops.getIntro&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>720</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_shopActivity_activityList" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments"></stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_shopActivity_activityList" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments"></stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${uid_test}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;android&quot;,&quot;iphone&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;,&quot;a85bb0674e08986c6b115d5e3a4884fa&quot;};
+int rd = new Random().nextInt(2);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+
+String req = &quot;app_version=6.0.0&amp;client_type=&quot;+clientType+&quot;&amp;limit=20&amp;method=app.shopActivity.activityList&amp;os_version=10.3.3&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=3d643a53e0d0181eee90b7824c85169b&amp;udid=9cf3c7118e716c021db517bcab6c1716b34dd859&amp;uid=&quot;+bsh.args[0]+&quot;&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+
+
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>180</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_web_shop_folder" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">1</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_web_shop_folder" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">1</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;web&quot;};
+String[] privateKeys = {&quot;0ed29744ed318fd28d2c07985d3ba633&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:web&quot;;
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.shop.folder&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;status=1&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.shop.folder&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;status=1&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>180</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_web_productCollocation_list" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#26681;&#25454;&#20135;&#21697;ID&#26597;&#35810;&#25645;&#37197;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_web_productCollocation_list" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#26681;&#25454;&#20135;&#21697;ID&#26597;&#35810;&#25645;&#37197;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${product_id}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;web&quot;};
+String[] privateKeys = {&quot;0ed29744ed318fd28d2c07985d3ba633&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:web&quot;;
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.productCollocation.list&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;product_id=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.productCollocation.list&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;product_id=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>180</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_web_shop_series" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">1</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_web_shop_series" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">1</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${shop_id}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;web&quot;};
+String[] privateKeys = {&quot;0ed29744ed318fd28d2c07985d3ba633&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:web&quot;;
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.shop.series&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;status=1&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.shop.series&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;shop_id=&quot;+bsh.args[0]+&quot;&amp;status=1&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>180</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_web_productBanner_data" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">2</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#26681;&#25454;&#20135;&#21697;ID&#26597;&#35810;banner&#65288;&#21830;&#21697;&#35814;&#24773;&#20419;&#38144;banner&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_web_productBanner_data" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#26681;&#25454;&#20135;&#21697;ID&#26597;&#35810;banner&#65288;&#21830;&#21697;&#35814;&#24773;&#20419;&#38144;banner&#65289;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${product_id}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;web&quot;};
+String[] privateKeys = {&quot;0ed29744ed318fd28d2c07985d3ba633&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:web&quot;;
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.productBanner.data&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;product_id=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.productBanner.data&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;product_id=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>360</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_web_productComfort_data" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">2</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#26681;&#25454;&#20135;&#21697;ID&#26597;&#35810;&#33298;&#36866;&#24230;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_web_productComfort_data" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#26681;&#25454;&#20135;&#21697;ID&#26597;&#35810;&#33298;&#36866;&#24230;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${product_id}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;web&quot;};
+String[] privateKeys = {&quot;0ed29744ed318fd28d2c07985d3ba633&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:web&quot;;
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.productComfort.data&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;product_id=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.productComfort.data&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;product_id=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>360</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_web_productModelTry_data" 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>
+          <intProp name="LoopController.loops">-1</intProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">2</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">10</stringProp>
+        <longProp name="ThreadGroup.start_time">1488865571000</longProp>
+        <longProp name="ThreadGroup.end_time">1488865571000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+        <stringProp name="TestPlan.comments">&#27169;&#29305;&#35797;&#31359;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_web_productModelTry_data" enabled="true">
+          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="HTTPSampler.domain"></stringProp>
+          <stringProp name="HTTPSampler.port"></stringProp>
+          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+          <stringProp name="HTTPSampler.response_timeout"></stringProp>
+          <stringProp name="HTTPSampler.protocol"></stringProp>
+          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+          <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp>
+          <stringProp name="HTTPSampler.method">GET</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>
+          <stringProp name="TestPlan.comments">&#27169;&#29305;&#35797;&#31359;</stringProp>
+        </HTTPSamplerProxy>
+        <hashTree>
+          <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
+            <stringProp name="TestPlan.comments"></stringProp>
+            <boolProp name="resetInterpreter">false</boolProp>
+            <stringProp name="parameters">${product_skn}</stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;web&quot;};
+String[] privateKeys = {&quot;0ed29744ed318fd28d2c07985d3ba633&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String os_version = &quot;yohobuy:web&quot;;
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.productModelTry.data&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;product_skn=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;method=web.productModelTry.data&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;product_skn=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>360</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <BackendListener guiclass="BackendListenerGui" testclass="BackendListener" testname="influxdb_master" enabled="true">
+        <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments">
+            <elementProp name="graphiteMetricsSender" elementType="Argument">
+              <stringProp name="Argument.name">graphiteMetricsSender</stringProp>
+              <stringProp name="Argument.value">org.apache.jmeter.visualizers.backend.graphite.TextGraphiteMetricsSender</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+            </elementProp>
+            <elementProp name="graphiteHost" elementType="Argument">
+              <stringProp name="Argument.name">graphiteHost</stringProp>
+              <stringProp name="Argument.value">192.168.104.43</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+            </elementProp>
+            <elementProp name="graphitePort" elementType="Argument">
+              <stringProp name="Argument.name">graphitePort</stringProp>
+              <stringProp name="Argument.value">2003</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+            </elementProp>
+            <elementProp name="rootMetricsPrefix" elementType="Argument">
+              <stringProp name="Argument.name">rootMetricsPrefix</stringProp>
+              <stringProp name="Argument.value">${__machineIP()}.</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+            </elementProp>
+            <elementProp name="summaryOnly" elementType="Argument">
+              <stringProp name="Argument.name">summaryOnly</stringProp>
+              <stringProp name="Argument.value">false</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+            </elementProp>
+            <elementProp name="samplersList" elementType="Argument">
+              <stringProp name="Argument.name">samplersList</stringProp>
+              <stringProp name="Argument.value">tc_.*</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+            </elementProp>
+            <elementProp name="useRegexpForSamplersList" elementType="Argument">
+              <stringProp name="Argument.name">useRegexpForSamplersList</stringProp>
+              <stringProp name="Argument.value">true</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+            </elementProp>
+            <elementProp name="percentiles" elementType="Argument">
+              <stringProp name="Argument.name">percentiles</stringProp>
+              <stringProp name="Argument.value">90</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+            </elementProp>
+          </collectionProp>
+        </elementProp>
+        <stringProp name="classname">org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient</stringProp>
+        <stringProp name="TestPlan.comments"></stringProp>
+      </BackendListener>
+      <hashTree/>    </hashTree>
+  </hashTree>
+</jmeterTestPlan>
\ No newline at end of file