diff --git a/script/2018618/homepageOther.jmx b/script/2018618/homepageOther.jmx
new file mode 100644
index 0000000..759ce0a
--- /dev/null
+++ b/script/2018618/homepageOther.jmx
@@ -0,0 +1,2817 @@
+<?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="&#39318;&#39029;&#20854;&#23427;&#25509;&#21475;7000-100" 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_&#21830;&#21697;for&#27983;&#35272;" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/product_2w.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">product_id,product_skn</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_&#21697;&#29260;&#25968;&#25454;" enabled="true">
+        <stringProp name="TestPlan.comments">&#21697;&#29260;&#25968;&#25454;</stringProp>
+        <stringProp name="filename">/opt/jmeter/data/brand.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">brand_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_&#25240;&#25187;&#27963;&#21160;&#25968;&#25454;" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/activity.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">activity_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_&#38480;&#23450;&#21830;&#21697;" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/limitProduct.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">limit_product_code,limit_product_skn,limit_product_sku</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_&#21697;&#29260;&#20851;&#32852;" enabled="true">
+        <stringProp name="TestPlan.comments"></stringProp>
+        <stringProp name="filename">/opt/jmeter/data/brandRelation.csv</stringProp>
+        <stringProp name="fileEncoding">utf-8</stringProp>
+        <stringProp name="variableNames">brandRelationId</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/>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newproduct_recbrand" 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">&#26032;&#21697;&#21040;&#30528;&#25512;&#33616;&#21697;&#29260;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_newproduct_recbrand" 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">&#26032;&#21697;&#21040;&#30528;&#25512;&#33616;&#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">${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 req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;limit=60&amp;method=app.newproduct.recbrand&amp;os_version=10.3.2&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=414x736&amp;session_key=437f86ad70b9832a1884c357b96e8ffe&amp;udid=fc2fdedc84327f14de31f79adbcd0de61fad0afd&amp;uid=&quot;+bsh.args[0]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newproduct_reclist" 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">&#26032;&#21697;&#21040;&#30528;&#25512;&#33616;&#21830;&#21697;&#21015;&#34920;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_newproduct_reclist" 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">&#26032;&#21697;&#21040;&#30528;&#25512;&#33616;&#21830;&#21697;&#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">${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;android5.1.1:Redmi_Note_3&quot;;
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;limit=20&amp;method=app.newproduct.reclist&amp;order=&amp;os_version=&quot;+os_version+&quot;&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=7ddadfafd388aba86ff13f0d51adf591&amp;udid=8610840369852596e0de9aef48b93f6&amp;uid=&quot;+bsh.args[0]+&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;limit=20&amp;method=app.newproduct.reclist&amp;order=&amp;os_version=&quot;+os_version+&quot;&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=7ddadfafd388aba86ff13f0d51adf591&amp;udid=8610840369852596e0de9aef48b93f6&amp;uid=&quot;+bsh.args[0]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newproduct_recshop" 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">&#26032;&#21697;&#21040;&#30528;&#25512;&#33616;&#24215;&#38138;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_newproduct_recshop" 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">&#26032;&#21697;&#21040;&#30528;&#25512;&#33616;&#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">${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;android5.1.1:Redmi_Note_3&quot;;
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;contentCode=1f2e07cb63811680154ba693c954dd62&amp;gender=1,3&amp;limit=10&amp;method=app.newproduct.recshop&amp;os_version=&quot;+os_version+&quot;&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=7ddadfafd388aba86ff13f0d51adf591&amp;udid=8610840369852596e0de9aef48b93f6&amp;uid=&quot;+bsh.args[0]+&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;contentCode=1f2e07cb63811680154ba693c954dd62&amp;gender=1,3&amp;limit=10&amp;method=app.newproduct.recshop&amp;os_version=&quot;+os_version+&quot;&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=7ddadfafd388aba86ff13f0d51adf591&amp;udid=8610840369852596e0de9aef48b93f6&amp;uid=&quot;+bsh.args[0]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_product_goodDetail" 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">&#22909;&#36135;&#35814;&#24773;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_product_goodDetail" 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">&#22909;&#36135;&#35814;&#24773;</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;android&quot;};
+String[] privateKeys = {&quot;fd4ad5fcfa0de589ef238c0e7331b585&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+
+String req = &quot;app_version=5.6.0&amp;client_type=&quot;+clientType+&quot;&amp;method=app.product.goodDetail&amp;os_version=9.0.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;product_skn=&quot;+bsh.args[0]+&quot;&amp;screen_size=414x736&amp;session_key=0da72536c71ea0956800afdaf71ae088&amp;udid=eae1c459cc40e95414ef186b1d2ad7eac65b9768&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_search_good" 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">&#21457;&#29616;&#22909;&#36135;&#21015;&#34920;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_search_good" 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">&#21457;&#29616;&#22909;&#36135;&#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">${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 req = &quot;app_type=0&amp;app_version=5.6.0&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;limit=20&amp;method=app.search.good&amp;os_version=9.0.2&amp;page=3&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=414x736&amp;session_key=0da72536c71ea0956800afdaf71ae088&amp;udid=eae1c459cc40e95414ef186b1d2ad7eac65b9768&amp;uid=&quot;+bsh.args[0]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/shops/service/v1/favorite/getUidBrandFav" 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_/shops/service/v1/favorite/getUidBrandFav" 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_SERVICE}/shops/service/v1/favorite/getUidBrandFav?${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">${SNCP} ${brand_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 req = &quot;_sncp=&quot;+bsh.args[0]+&quot;&amp;app_version=5.7.0&amp;brandId=&quot;+bsh.args[1]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;os_version=10.2.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=c5c7191d1dbe5362ee2d32b65d7a141f&amp;udid=3536012226e5566d334c61659e91875163de603e&amp;uid=&quot;+bsh.args[2]+&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;</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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/*/plustar/getbrandinfo" 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;&#21697;&#29260;&#20851;&#31995;id&#65292;&#33719;&#21462;&#21697;&#29260;&#35814;&#24773;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/*/plustar/getbrandinfo" 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_SERVICE}/guang/api/v1/plustar/getbrandinfo?${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;&#21697;&#29260;&#20851;&#31995;id&#65292;&#33719;&#21462;&#21697;&#29260;&#35814;&#24773;</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">${brandRelationId} ${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 req = &quot;app_version=5.7.0&amp;client_type=&quot;+clientType+&quot;&amp;id=&quot;+bsh.args[0]+&quot;&amp;os_version=10.2.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=c5c7191d1dbe5362ee2d32b65d7a141f&amp;udid=3536012226e5566d334c61659e91875163de603e&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v3/plustar/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">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">&#26126;&#26143;&#21697;&#29260;&#21015;&#34920;(pageCache)</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v3/plustar/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_SERVICE}/guang/api/v3/plustar/getlist?${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">&#26126;&#26143;&#21697;&#29260;&#21015;&#34920;(pageCache)</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}</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;android5.1:PRO_5&quot;;
+String req = &quot;app_version=5.9.0&amp;brand_type=3&amp;client_type=&quot;+clientType+&quot;&amp;gender=3&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;udid=8679050219190811726e91d2390ffeb&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();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.9.0&amp;brand_type=3&amp;client_type=&quot;+clientType+&quot;&amp;gender=3&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;udid=8679050219190811726e91d2390ffeb&amp;uid=&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/v1/article/getArticleByBrand" 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">&#33719;&#21462;&#21697;&#29260;&#30340;&#25991;&#31456;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/v1/article/getArticleByBrand" 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_SERVICE}/guang/service/v1/article/getArticleByBrand?${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;&#21697;&#29260;&#30340;&#25991;&#31456;</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">${brand_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 req = &quot;app_version=5.8.1&amp;brand_id=&quot;+bsh.args[0]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;limit=3&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=320x568&amp;session_key=7d8ebd2d7633b8263091ffaebd123958&amp;udid=315c3402a511eeed88dcd5142aef656e1e0bbcda&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_promotion_queryCouponCenter" 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">&#39046;&#21367;&#20013;&#24515;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_promotion_queryCouponCenter" 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">&#39046;&#21367;&#20013;&#24515;</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}</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;contentCode=b78b32ed81b18dde8ac84fd33602b88b&amp;method=app.promotion.queryCouponCenter&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;session_key=8913f1f61ab5e4dbe598114bc2829937&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();
+os_version=URLEncoder.encode(os_version);
+req = &quot;app_version=5.9.0&amp;client_type=&quot;+clientType+&quot;&amp;contentCode=b78b32ed81b18dde8ac84fd33602b88b&amp;method=app.promotion.queryCouponCenter&amp;os_version=&quot;+os_version+&quot;&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;session_key=8913f1f61ab5e4dbe598114bc2829937&amp;uid=&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_activity_get" 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_app_activity_get" 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">${activity_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;android5.1:vivo_V3M_A&quot;;
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;gender=2,3&amp;id=&quot;+bsh.args[0]+&quot;&amp;method=app.activity.get&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=2&amp;plateform=2&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;session_key=71593bf35185120078f63b378d20b4eb&amp;sort=2&amp;udid=86186503861366121369632f13b7a7f&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=2&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=2,3&amp;id=&quot;+bsh.args[0]+&quot;&amp;method=app.activity.get&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=2&amp;plateform=2&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;session_key=71593bf35185120078f63b378d20b4eb&amp;sort=2&amp;udid=86186503861366121369632f13b7a7f&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=2&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_sale_getBreakingSort" 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;&#26029;&#30721;&#21306;&#20998;&#31867;&#21644;&#23610;&#30721;&#65288;&#25240;&#25187;&#19987;&#21306;-&gt;&#26029;&#30721;&#21306;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_sale_getBreakingSort" 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;&#26029;&#30721;&#21306;&#20998;&#31867;&#21644;&#23610;&#30721;&#65288;&#25240;&#25187;&#19987;&#21306;-&gt;&#26029;&#30721;&#21306;&#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">${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;android7.0:MHA-AL00&quot;;
+String req = &quot;app_version=5.5.2&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=aFP_ShortSizeProList&amp;gender=1,3&amp;method=app.sale.getBreakingSort&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1821&amp;session_key=0b86179aecade0a6152cc22506da3f04&amp;udid=86436803468147456fafb6effd9afc9&amp;uid=&quot;+bsh.args[0]+&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.5.2&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=aFP_ShortSizeProList&amp;gender=1,3&amp;method=app.sale.getBreakingSort&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1821&amp;session_key=0b86179aecade0a6152cc22506da3f04&amp;udid=86436803468147456fafb6effd9afc9&amp;uid=&quot;+bsh.args[0]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_product_recShopCart" 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">&#36141;&#29289;&#36710;&#24213;&#37096;&#25512;&#33616;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_product_recShopCart" 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">&#36141;&#29289;&#36710;&#24213;&#37096;&#25512;&#33616;</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}</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;android5.1:XT1085&quot;;
+String req = &quot;app_version=5.6.0&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;method=app.product.recShopCart&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1776&amp;session_key=90a490b990a1ffb4d36db14eeecebcd1&amp;udid=35334706127113498719dc059bf115f&amp;uid=&quot;+bsh.args[0]+&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.6.0&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;method=app.product.recShopCart&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1776&amp;session_key=90a490b990a1ffb4d36db14eeecebcd1&amp;udid=35334706127113498719dc059bf115f&amp;uid=&quot;+bsh.args[0]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newuser_recommend" 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">&#26032;&#29992;&#25143;&#25512;&#33616;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_newuser_recommend" 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">&#26032;&#29992;&#25143;&#25512;&#33616;</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}</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_UserGuideAndRecommend&amp;method=app.newuser.recommend&amp;os_version=10.2&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;select_gender=1&amp;udid=94f5179ecd782d857e6b098f41e6cf3d0778b3cb&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_soonToSaleLimitProduct" 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">&#21363;&#23558;&#21457;&#21806;&#21830;&#21697;&#21015;&#34920;&#65288;pageCache&#65292;30&#31186;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_soonToSaleLimitProduct" 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">&#21363;&#23558;&#21457;&#21806;&#21830;&#21697;&#21015;&#34920;&#65288;pageCache&#65292;30&#31186;&#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">${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_LimitPurchaseHome&amp;limit=20&amp;method=app.limitProduct.soonToSaleLimitProduct&amp;os_version=10.2&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=414x736&amp;session_key=d7e99ced4bccf8ba6098c58d718898a5&amp;udid=441ebe1cbe40e2dac85c9d7201901818d0765f48&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_hotLimitProduct" 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">&#28909;&#38376;&#21457;&#21806;&#21830;&#21697;&#21015;&#34920;&#65288;pageCache&#65292;30&#31186;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_hotLimitProduct" 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">&#28909;&#38376;&#21457;&#21806;&#21830;&#21697;&#21015;&#34920;&#65288;pageCache&#65292;30&#31186;&#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">${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_LimitPurchaseHome&amp;limit=20&amp;method=app.limitProduct.hotLimitProduct&amp;os_version=10.3.2&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=328652d299d53f752c280a305f67eb5b&amp;udid=a3ad2e205c3d1cb7f0dcf7f8d8a5174f26f8c56e&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitcode_query" 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">&#25105;&#30340;&#38480;&#36141;&#30721;&#21015;&#34920;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitcode_query" 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">&#25105;&#30340;&#38480;&#36141;&#30721;&#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">${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 req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_MinePurchaseCode&amp;method=app.limitcode.query&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=265ff36faf6c6deb7074f6496b35d2fc&amp;udid=66aab3af40963d516841918f7c98f51d3efd8868&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_alreadySaleLimitProduct" 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">&#24050;&#21457;&#21806;&#21830;&#21697;&#21015;&#34920;&#65288;pageCache&#65292;30&#31186;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_alreadySaleLimitProduct" 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">&#24050;&#21457;&#21806;&#21830;&#21697;&#21015;&#34920;&#65288;pageCache&#65292;30&#31186;&#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">${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_LimitPurchaseHome&amp;limit=20&amp;method=app.limitProduct.alreadySaleLimitProduct&amp;os_version=10.2.1&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=801da72a02988e2f2a0ea78496c8ddac&amp;udid=c92079a2c3469c149aee799e4325db35dc42193c&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_limitProductHtml" 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">&#38480;&#37327;&#21830;&#21697;&#35814;&#24773;h5&#39029;&#38754;&#65288;pageCache,10min&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_limitProductHtml" 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">&#38480;&#37327;&#21830;&#21697;&#35814;&#24773;h5&#39029;&#38754;&#65288;pageCache,10min&#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">${limit_product_code} ${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_LimitPurchaseDetail&amp;limitProductCode=&quot;+bsh.args[0]+&quot;&amp;method=app.limitProduct.limitProductHtml&amp;os_version=10.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;return_type=html&amp;screen_size=414x736&amp;session_key=d7e99ced4bccf8ba6098c58d718898a5&amp;udid=441ebe1cbe40e2dac85c9d7201901818d0765f48&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">html</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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_limitProductDetail" 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">&#38480;&#23450;&#21830;&#21697;&#35814;&#24773;&#65288;&#21487;&#38477;&#32423;&#25509;&#21475;&#26803;&#29702;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_limitProductDetail" 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">&#38480;&#23450;&#21830;&#21697;&#35814;&#24773;&#65288;&#21487;&#38477;&#32423;&#25509;&#21475;&#26803;&#29702;&#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">${limit_product_code} ${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_LimitPurchaseDetail&amp;limitProductCode=&quot;+bsh.args[0]+&quot;&amp;method=app.limitProduct.limitProductDetail&amp;os_version=10.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=414x736&amp;session_key=d7e99ced4bccf8ba6098c58d718898a5&amp;udid=441ebe1cbe40e2dac85c9d7201901818d0765f48&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_productStatus" 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">&#38480;&#23450;&#21830;&#21697;&#33719;&#21462;&#38480;&#23450;&#21830;&#21697;&#29366;&#24577;&#20449;&#24687;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_productStatus" 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">&#38480;&#23450;&#21830;&#21697;&#33719;&#21462;&#38480;&#23450;&#21830;&#21697;&#29366;&#24577;&#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">${limit_product_code} ${limit_product_skn} ${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;android6.0.1:Redmi_4X&quot;;
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=aFP_ProductDetail&amp;gender=1,3&amp;limitProductCode=&quot;+bsh.args[0]+&quot;&amp;method=app.limitProduct.productStatus&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;product_skn=&quot;+bsh.args[1]+&quot;&amp;screen_size=720x1280&amp;session_key=b4275d6bfe67c789b28ce9c34a2710d4&amp;udid=9900101181345145cfb72f58536a4a&amp;uid=&quot;+bsh.args[2]+&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;fromPage=aFP_ProductDetail&amp;gender=1,3&amp;limitProductCode=&quot;+bsh.args[0]+&quot;&amp;method=app.limitProduct.productStatus&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;product_skn=&quot;+bsh.args[1]+&quot;&amp;screen_size=720x1280&amp;session_key=b4275d6bfe67c789b28ce9c34a2710d4&amp;udid=9900101181345145cfb72f58536a4a&amp;uid=&quot;+bsh.args[2]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_search_defaultTerms" 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">&#25628;&#32034;&#32467;&#26524;&#21830;&#21697;&#21015;&#34920;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_search_defaultTerms" 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">&#25628;&#32034;&#32467;&#26524;&#21830;&#21697;&#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">${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;android5.1:OPPO_R9m&quot;;
+String req = &quot;app_version=6.1.0&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;method=app.search.defaultTerms&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=3afa1a5f4c617cb4ef06dd71750a7866&amp;udid=863048034076591c86147e3c4c6e77&amp;uid=&quot;+bsh.args[0]+&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=6.1.0&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;method=app.search.defaultTerms&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=3afa1a5f4c617cb4ef06dd71750a7866&amp;udid=863048034076591c86147e3c4c6e77&amp;uid=&quot;+bsh.args[0]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_resources_iconzip" 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_resources_iconzip" 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 os_version = &quot;android7.0:STF-AL00&quot;;
+String req = &quot;app_version=6.2.3&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=aFP_Lanuch&amp;gender=1,3&amp;method=app.resources.iconzip&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=386ab6918b8e53f1200b7c497b6afb46&amp;udid=867300032329134cf22011e52bdc713&amp;uid=&quot;+bsh.args[0]+&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=6.2.3&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=aFP_Lanuch&amp;gender=1,3&amp;method=app.resources.iconzip&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=386ab6918b8e53f1200b7c497b6afb46&amp;udid=867300032329134cf22011e52bdc713&amp;uid=&quot;+bsh.args[0]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_abtest_configs" 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_abtest_configs" 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 os_version = &quot;android6.0.1:OPPO_R9s&quot;;
+String req = &quot;app_version=5.5.1&amp;client_type=&quot;+clientType+&quot;&amp;gender=&amp;method=app.abtest.configs&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=&amp;udid=A000006149EAE9b8f4f3d5ea7421e8&amp;uid=&quot;+bsh.args[0]+&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.5.1&amp;client_type=&quot;+clientType+&quot;&amp;gender=&amp;method=app.abtest.configs&amp;os_version=&quot;+os_version+&quot;&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1920&amp;session_key=&amp;udid=A000006149EAE9b8f4f3d5ea7421e8&amp;uid=&quot;+bsh.args[0]+&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_sort_get_rec" 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_sort_get_rec" 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.5.4&amp;business_line=yohobuy&amp;channel_id=0&amp;client_type=&quot;+clientType+&quot;&amp;contentCode=daaa8b1a5103a30419ebd79c06e6feac&amp;fromPage=iFP_Category&amp;method=app.sort.get.rec&amp;msort=5&amp;os_version=10.3.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=320x568&amp;session_key=03deeb3ef86fe41f9a0cdbd7465848d1&amp;udid=3a033e9758afe76516e386fc1c0de5c27be9888f&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_passport_verify" 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_passport_verify" 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.4.0&amp;client_type=&quot;+clientType+&quot;&amp;method=app.passport.verify&amp;private_key=&quot;+privateKey+&quot;&amp;session_key=02abb312236b58cb76784c80f4f9d825&amp;uid=&quot;+bsh.args[0]+&quot;&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>600</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newproduct_rec_productList" 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_newproduct_rec_productList" 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}</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.5.0&amp;business_line=yohobuy&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_NativeNewArrival&amp;limit=20&amp;method=app.newproduct.rec.productList&amp;order=&amp;os_version=11.2.2&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=5b858699434d6539be8560a468f55dd2&amp;udid=d36ce77c593c9c7fb1ee5020d4e8a36f6ee635af&amp;uid=&quot;+bsh.args[0]+&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>600</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