diff --git a/script/default/test.jmx b/script/default/test.jmx
index aa4e795..8f69e81 100644
--- a/script/default/test.jmx
+++ b/script/default/test.jmx
@@ -204,23 +204,1733 @@
         <stringProp name="shareMode">shareMode.all</stringProp>
       </CSVDataSet>
       <hashTree/>
-      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_h5_product_intro" enabled="true">
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/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">80</stringProp>
+        <stringProp name="ThreadGroup.num_threads">10</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;skn&#26597;&#35810;&#21830;&#21697;&#19979;&#21322;&#39029;&#35814;&#24773;&#25551;&#36848;&#20449;&#24687;</stringProp>
+        <stringProp name="TestPlan.comments">&#36891;&#30340;&#21015;&#34920;&#65288;pageCache&#65289;</stringProp>
       </ThreadGroup>
       <hashTree>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_h5_product_intro" enabled="true">
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/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/v2/article/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">&#36891;&#30340;&#21015;&#34920;&#65288;pageCache&#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 req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_GuangContainer&amp;gender=1,3&amp;limit=20&amp;os_version=10.2.1&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=414x736&amp;session_key=8be620e2d951d49128232f8b4c392422&amp;sort_id=0&amp;udid=380aebe1da2c72def222c78249f99ef08c18260a&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/getSimpleArticleList" 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">10</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;&#27983;&#35272;&#25968;&#65292;&#28857;&#36190;&#25968;&#31561;&#20449;&#24687;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/getSimpleArticleList" 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/v2/article/getSimpleArticleList?${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;&#27983;&#35272;&#25968;&#65292;&#28857;&#36190;&#25968;&#31561;&#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">${article_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;articleIds=&quot;+bsh.args[0]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_GuangContainer&amp;gender=2,3&amp;os_version=10.2.1&amp;physical_channel=2&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=aed364774108fa1b85bfb218f34c28c7&amp;sortId=0&amp;udid=7887164c6c98712ad1f214cacec3316f4aae4c51&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();
+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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/getTopList" 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">10</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">&#25991;&#31456;&#32622;&#39030;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/getTopList" 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/v2/article/getTopList?${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">&#25991;&#31456;&#32622;&#39030;</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_GuangContainer&amp;gender=1,3&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=dbef84f3659c370fcd19de19e67a5556&amp;udid=c383b9ed7696d2b31cf22685114a3a63eae58e95&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/getTagTop" 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">10</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;&#36891;&#30340;&#28909;&#38376;&#26631;&#31614;&#65288;PC&#31471;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/getTagTop" 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/v2/article/getTagTop?${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;&#36891;&#30340;&#28909;&#38376;&#26631;&#31614;&#65288;PC&#31471;&#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"></stringProp>
+            <stringProp name="filename"></stringProp>
+            <stringProp name="script">import java.security.MessageDigest;
+import java.util.Random;
+String[] clientTypes = {&quot;web&quot;};
+String[] privateKeys = {&quot;0ed29744ed318fd28d2c07985d3ba633&quot;};
+int rd = new Random().nextInt(1);
+String clientType = clientTypes[rd];
+String privateKey = privateKeys[rd];
+String req = &quot;app_version=5.8.0&amp;client_type=&quot;+clientType+&quot;&amp;limit=20&amp;os_version=yohobuy:web&amp;page=4&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v1/category/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">10</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;&#36891;&#19979;&#30340;&#20998;&#31867;&#21015;&#34920;&#65288;&#32531;&#23384;&#26102;&#38388;&#24310;&#38271;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v1/category/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_SERVICE}/guang/api/v1/category/get?${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;&#36891;&#19979;&#30340;&#20998;&#31867;&#21015;&#34920;&#65288;&#32531;&#23384;&#26102;&#38388;&#24310;&#38271;&#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 req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_GuangMain&amp;gender=1,3&amp;os_version=10.2.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=414x736&amp;session_key=8be620e2d951d49128232f8b4c392422&amp;udid=380aebe1da2c72def222c78249f99ef08c18260a&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/*/article/getArticleByViewsNum" 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">10</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;48&#23567;&#26102;&#20869;&#27983;&#35272;&#26368;&#22810;&#30340;&#25991;&#31456;&#65288;PC&#31471;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/*/article/getArticleByViewsNum" 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/v2/article/getArticleByViewsNum?${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;48&#23567;&#26102;&#20869;&#27983;&#35272;&#26368;&#22810;&#30340;&#25991;&#31456;&#65288;PC&#31471;&#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"></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.0&amp;client_type=&quot;+clientType+&quot;&amp;gender=1,3&amp;limit=10&amp;os_version=yohobuy:web&amp;page=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/v2/article/getArticle" 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">10</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;&#25991;&#31456;id&#21644;&#23458;&#25143;&#31471;&#31867;&#22411;&#33719;&#24471;&#25991;&#31456;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/v2/article/getArticle" 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/v2/article/getArticleContent?${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;&#25991;&#31456;id&#21644;&#23458;&#25143;&#31471;&#31867;&#22411;&#33719;&#24471;&#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">${article_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;article_id=&quot;+bsh.args[0]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;os_version=10.1.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/getArticleBaseInfo" 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">10</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;&#25991;&#31456;&#20869;&#23481;&#35814;&#24773;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/getArticleBaseInfo" 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/v2/article/getArticleBaseInfo?${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;&#25991;&#31456;&#20869;&#23481;&#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">${article_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;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_GuangDetail&amp;id=&quot;+bsh.args[0]+&quot;&amp;os_version=10.1.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v1/article/getArticleNotice" 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">10</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_/guang/api/v1/article/getArticleNotice" 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/article/getArticleNotice?${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">${article_datetime} ${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;datetime=&quot;+bsh.args[0]+&quot;&amp;fromPage=aFP_Root_Phone&amp;gender=2,3&amp;os_version=android6.0:BLN-AL10&amp;physical_channel=2&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=1080x1812&amp;session_key=6471aeedc3b960d856b793789983d398&amp;udid=863982030989458af245102e1b93ddd&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();
+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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/*/article/getArticlePraiseAndFavor" 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">10</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;&#25991;&#31456;&#20869;&#23481;&#35814;&#24773;&#30340;&#28857;&#36190;&#12289;&#25910;&#34255;&#12289;&#27983;&#35272;&#25968;&#65288;&#38477;&#32423;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/*/article/getArticlePraiseAndFavor" 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/v2/article/getArticlePraiseAndFavor?${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;&#25991;&#31456;&#20869;&#23481;&#35814;&#24773;&#30340;&#28857;&#36190;&#12289;&#25910;&#34255;&#12289;&#27983;&#35272;&#25968;&#65288;&#38477;&#32423;&#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">${article_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;client_type=&quot;+clientType+&quot;&amp;id=&quot;+bsh.args[0]+&quot;&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=37d73148be684c1424c353348f9cdc5a&amp;udid=403b22e7c3749ffd84fff5e586f4f2c5e671520f&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v1/share/guang" 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">10</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;&#25991;&#31456;&#20869;&#23481;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v1/share/guang" 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/share/guang?${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;&#25991;&#31456;&#20869;&#23481;</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">${article_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;client_type=&quot;+clientType+&quot;&amp;id=&quot;+bsh.args[0]+&quot;&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=dbef84f3659c370fcd19de19e67a5556&amp;udid=c383b9ed7696d2b31cf22685114a3a63eae58e95&amp;uid=&quot;+bsh.args[1]+&quot;&amp;v=7&amp;yh_channel=1&quot;;
+MessageDigest md = MessageDigest.getInstance(&quot;MD5&quot;);
+byte[] btInput = req.getBytes();
+md.update(btInput);
+byte[] btResult = md.digest();
+StringBuffer sb = new StringBuffer();
+for(byte b : btResult){
+    int bt = b&amp;0xff;
+    if(bt&lt;16){
+        sb.append(0);
+    }
+    sb.append(Integer.toHexString(bt));
+}
+String md5 = sb.toString();
+vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stringProp>
+          </BeanShellPreProcessor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
+            </collectionProp>
+            <stringProp name="TestPlan.comments"></stringProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">16</intProp>
+          </ResponseAssertion>
+          <hashTree/>
+        </hashTree>
+        <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="&#22266;&#23450;TPM" enabled="true">
+          <stringProp name="TestPlan.comments"></stringProp>
+          <doubleProp>
+            <name>throughput</name>
+            <value>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/*/article/getArticleContent" 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">10</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;&#25991;&#31456;id&#21644;&#23458;&#25143;&#31471;&#31867;&#22411;&#33719;&#21462;&#36891;&#30340;&#35814;&#24773;&#20869;&#23481;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/*/article/getArticleContent" 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/v2/article/getArticleContent?${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;&#25991;&#31456;id&#21644;&#23458;&#25143;&#31471;&#31867;&#22411;&#33719;&#21462;&#36891;&#30340;&#35814;&#24773;&#20869;&#23481;</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">${article_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;article_id=&quot;+bsh.args[0]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;os_version=10.1.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/v2/article/getBrand" 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">10</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">&#36827;&#20837;&#25991;&#31456;&#35814;&#24773;&#39029;&#26102;&#65292;&#29992;&#20110;&#23637;&#31034;&#30456;&#20851;&#21697;&#29260;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/v2/article/getBrand" 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/v2/article/getBrand?${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">&#36827;&#20837;&#25991;&#31456;&#35814;&#24773;&#39029;&#26102;&#65292;&#29992;&#20110;&#23637;&#31034;&#30456;&#20851;&#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">${article_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;article_id=&quot;+bsh.args[0]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=37d73148be684c1424c353348f9cdc5a&amp;udid=403b22e7c3749ffd84fff5e586f4f2c5e671520f&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v1/comments/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">10</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;&#25991;&#31456;&#35780;&#35770;&#21015;&#34920;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v1/comments/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/v1/comments/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">&#33719;&#21462;&#25991;&#31456;&#35780;&#35770;&#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">${article_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;article_id=&quot;+bsh.args[0]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;limit=10&amp;os_version=10.1.1&amp;page=1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/v2/article/getOtherArticle" 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">10</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">&#36827;&#20837;&#25991;&#31456;&#35814;&#24773;&#39029;&#26102;&#65292;&#29992;&#20110;&#23637;&#31034;&#30456;&#20851;&#25991;&#31456;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/v2/article/getOtherArticle" 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/v2/article/getOtherArticle?${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">&#36827;&#20837;&#25991;&#31456;&#35814;&#24773;&#39029;&#26102;&#65292;&#29992;&#20110;&#23637;&#31034;&#30456;&#20851;&#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">${article_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;article_id=&quot;+bsh.args[0]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;limit=3&amp;offset=0&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=dbef84f3659c370fcd19de19e67a5556&amp;tags=&amp;udid=c383b9ed7696d2b31cf22685114a3a63eae58e95&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_document_config" 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">10</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">&#24494;&#20449;&#20844;&#20247;&#21495;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_document_config" 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">&#24494;&#20449;&#20844;&#20247;&#21495;</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;method=app.document.config&amp;os_version=10.1.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_resources_getSingleTemplate" 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">10</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_resources_getSingleTemplate" 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">${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;key=guang_detail_wechat&amp;method=app.resources.getSingleTemplate&amp;module=wechat&amp;os_version=10.1.1&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/*/author/getAuthor" 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">10</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;&#20316;&#32773;id&#33719;&#21462;&#20316;&#32773;&#20449;&#24687;&#65288;&#21487;&#38477;&#32423;&#65289;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/*/author/getAuthor" 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/author/getAuthor?${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;&#20316;&#32773;id&#33719;&#21462;&#20316;&#32773;&#20449;&#24687;&#65288;&#21487;&#38477;&#32423;&#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">${article_author_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;author_id=&quot;+bsh.args[0]+&quot;&amp;client_type=&quot;+clientType+&quot;&amp;os_version=10.3.2&amp;physical_channel=1&amp;private_key=&quot;+privateKey+&quot;&amp;screen_size=375x667&amp;session_key=b94ef83641963fac4240ff6bf2d7c8b9&amp;udid=6d0c217d6fad39d94ddbfa676c0a01194e1bdb9d&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>6000</value>
+            <savedValue>0.0</savedValue>
+          </doubleProp>
+          <intProp name="calcMode">2</intProp>
+        </ConstantThroughputTimer>
+        <hashTree/>
+      </hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_show_showChannel" 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">10</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">show&#39057;&#36947;&#21015;&#34920;</stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_show_showChannel" enabled="true">
           <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
           <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
             <collectionProp name="Arguments.arguments">
@@ -245,22 +1955,22 @@
           <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;skn&#26597;&#35810;&#21830;&#21697;&#19979;&#21322;&#39029;&#35814;&#24773;&#25551;&#36848;&#20449;&#24687;</stringProp>
+          <stringProp name="TestPlan.comments">show&#39057;&#36947;&#21015;&#34920;</stringProp>
         </HTTPSamplerProxy>
         <hashTree>
           <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="&#21069;&#32622;BeanShell" enabled="true">
             <stringProp name="TestPlan.comments"></stringProp>
             <boolProp name="resetInterpreter">false</boolProp>
-            <stringProp name="parameters">${product_skn}</stringProp>
+            <stringProp name="parameters">${uid}</stringProp>
             <stringProp name="filename"></stringProp>
             <stringProp name="script">import java.security.MessageDigest;
 import java.util.Random;
-String[] clientTypes = {&quot;h5&quot;};
+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.0&amp;client_type=&quot;+clientType+&quot;&amp;method=h5.product.intro&amp;os_version=yohobuy:web&amp;private_key=&quot;+privateKey+&quot;&amp;productskn=&quot;+bsh.args[0]+&quot;&amp;screen_size=720x1280&amp;v=7&quot;;
+String req = &quot;app_version=5.8.1&amp;client_type=&quot;+clientType+&quot;&amp;fromPage=iFP_ShowMain&amp;limit=20&amp;method=show.showChannel&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=be7423e4fea423fa5336682a9b01f71a&amp;udid=aa352294e8ef4065dfa75b7fb2a6c3bc19481ce3&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);
@@ -279,7 +1989,7 @@ vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stri
           <hashTree/>
           <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="&#21709;&#24212;&#26029;&#35328;" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="1450572480">productBo</stringProp>
+              <stringProp name="1450572480">&quot;code&quot;:200</stringProp>
             </collectionProp>
             <stringProp name="TestPlan.comments"></stringProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
@@ -292,7 +2002,7 @@ vars.put(&quot;searchValue&quot;,req+&quot;&amp;client_secret=&quot;+md5);</stri
           <stringProp name="TestPlan.comments"></stringProp>
           <doubleProp>
             <name>throughput</name>
-            <value>120000</value>
+            <value>6000</value>
             <savedValue>0.0</savedValue>
           </doubleProp>
           <intProp name="calcMode">2</intProp>