diff --git a/script/2018618/homepageOther.jmx b/script/2018618/homepageOther.jmx new file mode 100644 index 0000000..759ce0a --- /dev/null +++ b/script/2018618/homepageOther.jmx @@ -0,0 +1,2817 @@ +<?xml version="1.0" encoding="UTF-8"?> +<jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1 r1770033"> + <hashTree> + <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="首页其它接口7000-100" enabled="true"> + <stringProp name="TestPlan.comments">YohoPerformanceTest_ThisScriptIsGeneratedByYPT</stringProp> + <boolProp name="TestPlan.functional_mode">false</boolProp> + <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> + <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true"> + <collectionProp name="Arguments.arguments"> + </collectionProp> + </elementProp> + <stringProp name="TestPlan.user_define_classpath"></stringProp> + </TestPlan> + <hashTree> + <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="arguments_SNCP" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="SNCP" elementType="Argument"> + <stringProp name="Argument.name">SNCP</stringProp> + <stringProp name="Argument.value">NGJjYjhkNmwwZGM0OTk0YmQyMTMwZjlmoTZmzjY4cjN</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + <stringProp name="TestPlan.comments">通用session校验码</stringProp> </Arguments> + <hashTree/> + <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_uid_mobile_openid_10w" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <stringProp name="filename">/opt/jmeter/data/uid_mobile_openid.csv</stringProp> + <stringProp name="fileEncoding">utf-8</stringProp> + <stringProp name="variableNames">uid,mobile,open_id</stringProp> + <stringProp name="delimiter">,</stringProp> + <boolProp name="quotedData">false</boolProp> + <boolProp name="recycle">true</boolProp> + <boolProp name="stopThread">false</boolProp> + <stringProp name="shareMode">shareMode.all</stringProp> + </CSVDataSet> + <hashTree/> + <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_hosts_pt" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <stringProp name="filename">/opt/jmeter/data/hosts_pt.csv</stringProp> + <stringProp name="fileEncoding">utf-8</stringProp> + <stringProp name="variableNames">HOST_API,HOST_SERVICE</stringProp> + <stringProp name="delimiter">,</stringProp> + <boolProp name="quotedData">false</boolProp> + <boolProp name="recycle">true</boolProp> + <boolProp name="stopThread">false</boolProp> + <stringProp name="shareMode">shareMode.all</stringProp> + </CSVDataSet> + <hashTree/> + <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_商品for浏览" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <stringProp name="filename">/opt/jmeter/data/product_2w.csv</stringProp> + <stringProp name="fileEncoding">utf-8</stringProp> + <stringProp name="variableNames">product_id,product_skn</stringProp> + <stringProp name="delimiter">,</stringProp> + <boolProp name="quotedData">false</boolProp> + <boolProp name="recycle">true</boolProp> + <boolProp name="stopThread">false</boolProp> + <stringProp name="shareMode">shareMode.all</stringProp> + </CSVDataSet> + <hashTree/> + <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_品牌数据" enabled="true"> + <stringProp name="TestPlan.comments">品牌数据</stringProp> + <stringProp name="filename">/opt/jmeter/data/brand.csv</stringProp> + <stringProp name="fileEncoding">utf-8</stringProp> + <stringProp name="variableNames">brand_id</stringProp> + <stringProp name="delimiter">,</stringProp> + <boolProp name="quotedData">false</boolProp> + <boolProp name="recycle">true</boolProp> + <boolProp name="stopThread">false</boolProp> + <stringProp name="shareMode">shareMode.all</stringProp> + </CSVDataSet> + <hashTree/> + <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_折扣活动数据" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <stringProp name="filename">/opt/jmeter/data/activity.csv</stringProp> + <stringProp name="fileEncoding">utf-8</stringProp> + <stringProp name="variableNames">activity_id</stringProp> + <stringProp name="delimiter">,</stringProp> + <boolProp name="quotedData">false</boolProp> + <boolProp name="recycle">true</boolProp> + <boolProp name="stopThread">false</boolProp> + <stringProp name="shareMode">shareMode.all</stringProp> + </CSVDataSet> + <hashTree/> + <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_限定商品" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <stringProp name="filename">/opt/jmeter/data/limitProduct.csv</stringProp> + <stringProp name="fileEncoding">utf-8</stringProp> + <stringProp name="variableNames">limit_product_code,limit_product_skn,limit_product_sku</stringProp> + <stringProp name="delimiter">,</stringProp> + <boolProp name="quotedData">false</boolProp> + <boolProp name="recycle">true</boolProp> + <boolProp name="stopThread">false</boolProp> + <stringProp name="shareMode">shareMode.all</stringProp> + </CSVDataSet> + <hashTree/> + <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_品牌关联" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <stringProp name="filename">/opt/jmeter/data/brandRelation.csv</stringProp> + <stringProp name="fileEncoding">utf-8</stringProp> + <stringProp name="variableNames">brandRelationId</stringProp> + <stringProp name="delimiter">,</stringProp> + <boolProp name="quotedData">false</boolProp> + <boolProp name="recycle">true</boolProp> + <boolProp name="stopThread">false</boolProp> + <stringProp name="shareMode">shareMode.all</stringProp> + </CSVDataSet> + <hashTree/> + <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="data_uid_mobile_openid_test_1w" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <stringProp name="filename">/opt/jmeter/data/uid_mobile_openid_test.csv</stringProp> + <stringProp name="fileEncoding">utf-8</stringProp> + <stringProp name="variableNames">uid_test,mobile_test,open_id_test</stringProp> + <stringProp name="delimiter">,</stringProp> + <boolProp name="quotedData">false</boolProp> + <boolProp name="recycle">true</boolProp> + <boolProp name="stopThread">false</boolProp> + <stringProp name="shareMode">shareMode.all</stringProp> + </CSVDataSet> + <hashTree/> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newproduct_recbrand" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">新品到着推荐品牌</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_newproduct_recbrand" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">新品到着推荐品牌</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.8.1&client_type="+clientType+"&limit=60&method=app.newproduct.recbrand&os_version=10.3.2&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=414x736&session_key=437f86ad70b9832a1884c357b96e8ffe&udid=fc2fdedc84327f14de31f79adbcd0de61fad0afd&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newproduct_reclist" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">新品到着推荐商品列表</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_newproduct_reclist" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">新品到着推荐商品列表</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android5.1.1:Redmi_Note_3"; +String req = "app_version=5.8.1&client_type="+clientType+"&gender=1,3&limit=20&method=app.newproduct.reclist&order=&os_version="+os_version+"&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=7ddadfafd388aba86ff13f0d51adf591&udid=8610840369852596e0de9aef48b93f6&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=5.8.1&client_type="+clientType+"&gender=1,3&limit=20&method=app.newproduct.reclist&order=&os_version="+os_version+"&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=7ddadfafd388aba86ff13f0d51adf591&udid=8610840369852596e0de9aef48b93f6&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newproduct_recshop" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">新品到着推荐店铺</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_newproduct_recshop" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">新品到着推荐店铺</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android5.1.1:Redmi_Note_3"; +String req = "app_version=5.8.1&client_type="+clientType+"&contentCode=1f2e07cb63811680154ba693c954dd62&gender=1,3&limit=10&method=app.newproduct.recshop&os_version="+os_version+"&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=7ddadfafd388aba86ff13f0d51adf591&udid=8610840369852596e0de9aef48b93f6&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=5.8.1&client_type="+clientType+"&contentCode=1f2e07cb63811680154ba693c954dd62&gender=1,3&limit=10&method=app.newproduct.recshop&os_version="+os_version+"&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=7ddadfafd388aba86ff13f0d51adf591&udid=8610840369852596e0de9aef48b93f6&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_product_goodDetail" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">好货详情</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_product_goodDetail" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">好货详情</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${product_skn} ${uid}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.6.0&client_type="+clientType+"&method=app.product.goodDetail&os_version=9.0.2&physical_channel=1&private_key="+privateKey+"&product_skn="+bsh.args[0]+"&screen_size=414x736&session_key=0da72536c71ea0956800afdaf71ae088&udid=eae1c459cc40e95414ef186b1d2ad7eac65b9768&uid="+bsh.args[1]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_search_good" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">发现好货列表</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_search_good" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">发现好货列表</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_type=0&app_version=5.6.0&client_type="+clientType+"&gender=1,3&limit=20&method=app.search.good&os_version=9.0.2&page=3&physical_channel=1&private_key="+privateKey+"&screen_size=414x736&session_key=0da72536c71ea0956800afdaf71ae088&udid=eae1c459cc40e95414ef186b1d2ad7eac65b9768&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/shops/service/v1/favorite/getUidBrandFav" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">1</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/shops/service/v1/favorite/getUidBrandFav" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/shops/service/v1/favorite/getUidBrandFav?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">1</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${SNCP} ${brand_id} ${uid}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "_sncp="+bsh.args[0]+"&app_version=5.7.0&brandId="+bsh.args[1]+"&client_type="+clientType+"&os_version=10.2.1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=c5c7191d1dbe5362ee2d32b65d7a141f&udid=3536012226e5566d334c61659e91875163de603e&uid="+bsh.args[2]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code"</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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/*/plustar/getbrandinfo" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">根据品牌关系id,获取品牌详情</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/*/plustar/getbrandinfo" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v1/plustar/getbrandinfo?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">根据品牌关系id,获取品牌详情</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${brandRelationId} ${uid}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.7.0&client_type="+clientType+"&id="+bsh.args[0]+"&os_version=10.2.1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=c5c7191d1dbe5362ee2d32b65d7a141f&udid=3536012226e5566d334c61659e91875163de603e&uid="+bsh.args[1]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v3/plustar/getlist" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">明星品牌列表(pageCache)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v3/plustar/getlist" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v3/plustar/getlist?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">明星品牌列表(pageCache)</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android5.1:PRO_5"; +String req = "app_version=5.9.0&brand_type=3&client_type="+clientType+"&gender=3&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&udid=8679050219190811726e91d2390ffeb&uid="+bsh.args[0]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=5.9.0&brand_type=3&client_type="+clientType+"&gender=3&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&udid=8679050219190811726e91d2390ffeb&uid="+bsh.args[0]+"&v=7"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/v1/article/getArticleByBrand" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">获取品牌的文章</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/v1/article/getArticleByBrand" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/service/v1/article/getArticleByBrand?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">获取品牌的文章</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${brand_id} ${uid}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.8.1&brand_id="+bsh.args[0]+"&client_type="+clientType+"&limit=3&os_version=10.3.2&physical_channel=1&private_key="+privateKey+"&screen_size=320x568&session_key=7d8ebd2d7633b8263091ffaebd123958&udid=315c3402a511eeed88dcd5142aef656e1e0bbcda&uid="+bsh.args[1]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_promotion_queryCouponCenter" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">领卷中心</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_promotion_queryCouponCenter" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">领卷中心</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "yohobuy:h5"; +String req = "app_version=5.9.0&client_type="+clientType+"&contentCode=b78b32ed81b18dde8ac84fd33602b88b&method=app.promotion.queryCouponCenter&os_version="+os_version+"&private_key="+privateKey+"&screen_size=720x1280&session_key=8913f1f61ab5e4dbe598114bc2829937&uid="+bsh.args[0]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=5.9.0&client_type="+clientType+"&contentCode=b78b32ed81b18dde8ac84fd33602b88b&method=app.promotion.queryCouponCenter&os_version="+os_version+"&private_key="+privateKey+"&screen_size=720x1280&session_key=8913f1f61ab5e4dbe598114bc2829937&uid="+bsh.args[0]+"&v=7"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_activity_get" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">1</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_activity_get" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">1</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${activity_id} ${uid}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android5.1:vivo_V3M_A"; +String req = "app_version=5.8.1&client_type="+clientType+"&gender=2,3&id="+bsh.args[0]+"&method=app.activity.get&os_version="+os_version+"&physical_channel=2&plateform=2&private_key="+privateKey+"&screen_size=720x1280&session_key=71593bf35185120078f63b378d20b4eb&sort=2&udid=86186503861366121369632f13b7a7f&uid="+bsh.args[1]+"&v=7&yh_channel=2"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=5.8.1&client_type="+clientType+"&gender=2,3&id="+bsh.args[0]+"&method=app.activity.get&os_version="+os_version+"&physical_channel=2&plateform=2&private_key="+privateKey+"&screen_size=720x1280&session_key=71593bf35185120078f63b378d20b4eb&sort=2&udid=86186503861366121369632f13b7a7f&uid="+bsh.args[1]+"&v=7&yh_channel=2"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_sale_getBreakingSort" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">查询断码区分类和尺码(折扣专区->断码区)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_sale_getBreakingSort" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">查询断码区分类和尺码(折扣专区->断码区)</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android7.0:MHA-AL00"; +String req = "app_version=5.5.2&client_type="+clientType+"&fromPage=aFP_ShortSizeProList&gender=1,3&method=app.sale.getBreakingSort&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1821&session_key=0b86179aecade0a6152cc22506da3f04&udid=86436803468147456fafb6effd9afc9&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=5.5.2&client_type="+clientType+"&fromPage=aFP_ShortSizeProList&gender=1,3&method=app.sale.getBreakingSort&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1821&session_key=0b86179aecade0a6152cc22506da3f04&udid=86436803468147456fafb6effd9afc9&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_product_recShopCart" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">购物车底部推荐</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_product_recShopCart" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">购物车底部推荐</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android5.1:XT1085"; +String req = "app_version=5.6.0&client_type="+clientType+"&gender=1,3&method=app.product.recShopCart&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1776&session_key=90a490b990a1ffb4d36db14eeecebcd1&udid=35334706127113498719dc059bf115f&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=5.6.0&client_type="+clientType+"&gender=1,3&method=app.product.recShopCart&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1776&session_key=90a490b990a1ffb4d36db14eeecebcd1&udid=35334706127113498719dc059bf115f&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newuser_recommend" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">新用户推荐</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_newuser_recommend" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">新用户推荐</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.8.1&client_type="+clientType+"&fromPage=iFP_UserGuideAndRecommend&method=app.newuser.recommend&os_version=10.2&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&select_gender=1&udid=94f5179ecd782d857e6b098f41e6cf3d0778b3cb&uid="+bsh.args[0]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_soonToSaleLimitProduct" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">即将发售商品列表(pageCache,30秒)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_soonToSaleLimitProduct" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">即将发售商品列表(pageCache,30秒)</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.8.1&client_type="+clientType+"&fromPage=iFP_LimitPurchaseHome&limit=20&method=app.limitProduct.soonToSaleLimitProduct&os_version=10.2&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=414x736&session_key=d7e99ced4bccf8ba6098c58d718898a5&udid=441ebe1cbe40e2dac85c9d7201901818d0765f48&uid="+bsh.args[0]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_hotLimitProduct" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">热门发售商品列表(pageCache,30秒)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_hotLimitProduct" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">热门发售商品列表(pageCache,30秒)</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.8.1&client_type="+clientType+"&fromPage=iFP_LimitPurchaseHome&limit=20&method=app.limitProduct.hotLimitProduct&os_version=10.3.2&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=328652d299d53f752c280a305f67eb5b&udid=a3ad2e205c3d1cb7f0dcf7f8d8a5174f26f8c56e&uid="+bsh.args[0]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitcode_query" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">我的限购码列表</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitcode_query" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">我的限购码列表</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.8.1&client_type="+clientType+"&fromPage=iFP_MinePurchaseCode&method=app.limitcode.query&os_version=10.3.2&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=265ff36faf6c6deb7074f6496b35d2fc&udid=66aab3af40963d516841918f7c98f51d3efd8868&uid="+bsh.args[0]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_alreadySaleLimitProduct" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">已发售商品列表(pageCache,30秒)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_alreadySaleLimitProduct" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">已发售商品列表(pageCache,30秒)</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.8.1&client_type="+clientType+"&fromPage=iFP_LimitPurchaseHome&limit=20&method=app.limitProduct.alreadySaleLimitProduct&os_version=10.2.1&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=801da72a02988e2f2a0ea78496c8ddac&udid=c92079a2c3469c149aee799e4325db35dc42193c&uid="+bsh.args[0]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_limitProductHtml" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">限量商品详情h5页面(pageCache,10min)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_limitProductHtml" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">限量商品详情h5页面(pageCache,10min)</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${limit_product_code} ${uid}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.8.1&client_type="+clientType+"&fromPage=iFP_LimitPurchaseDetail&limitProductCode="+bsh.args[0]+"&method=app.limitProduct.limitProductHtml&os_version=10.2&physical_channel=1&private_key="+privateKey+"&return_type=html&screen_size=414x736&session_key=d7e99ced4bccf8ba6098c58d718898a5&udid=441ebe1cbe40e2dac85c9d7201901818d0765f48&uid="+bsh.args[1]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">html</stringProp> + </collectionProp> + <stringProp name="TestPlan.comments"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">16</intProp> + </ResponseAssertion> + <hashTree/> + </hashTree> + <ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_limitProductDetail" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">限定商品详情(可降级接口梳理)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_limitProductDetail" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">限定商品详情(可降级接口梳理)</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${limit_product_code} ${uid}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=5.8.1&client_type="+clientType+"&fromPage=iFP_LimitPurchaseDetail&limitProductCode="+bsh.args[0]+"&method=app.limitProduct.limitProductDetail&os_version=10.2&physical_channel=1&private_key="+privateKey+"&screen_size=414x736&session_key=d7e99ced4bccf8ba6098c58d718898a5&udid=441ebe1cbe40e2dac85c9d7201901818d0765f48&uid="+bsh.args[1]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_limitProduct_productStatus" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">限定商品获取限定商品状态信息</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_limitProduct_productStatus" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">限定商品获取限定商品状态信息</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${limit_product_code} ${limit_product_skn} ${uid}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android6.0.1:Redmi_4X"; +String req = "app_version=5.8.1&client_type="+clientType+"&fromPage=aFP_ProductDetail&gender=1,3&limitProductCode="+bsh.args[0]+"&method=app.limitProduct.productStatus&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&product_skn="+bsh.args[1]+"&screen_size=720x1280&session_key=b4275d6bfe67c789b28ce9c34a2710d4&udid=9900101181345145cfb72f58536a4a&uid="+bsh.args[2]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=5.8.1&client_type="+clientType+"&fromPage=aFP_ProductDetail&gender=1,3&limitProductCode="+bsh.args[0]+"&method=app.limitProduct.productStatus&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&product_skn="+bsh.args[1]+"&screen_size=720x1280&session_key=b4275d6bfe67c789b28ce9c34a2710d4&udid=9900101181345145cfb72f58536a4a&uid="+bsh.args[2]+"&v=7&yh_channel=1"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_search_defaultTerms" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">搜索结果商品列表</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_search_defaultTerms" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">搜索结果商品列表</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android5.1:OPPO_R9m"; +String req = "app_version=6.1.0&client_type="+clientType+"&gender=1,3&method=app.search.defaultTerms&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=3afa1a5f4c617cb4ef06dd71750a7866&udid=863048034076591c86147e3c4c6e77&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=6.1.0&client_type="+clientType+"&gender=1,3&method=app.search.defaultTerms&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=3afa1a5f4c617cb4ef06dd71750a7866&udid=863048034076591c86147e3c4c6e77&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_resources_iconzip" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_resources_iconzip" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${uid_test}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android7.0:STF-AL00"; +String req = "app_version=6.2.3&client_type="+clientType+"&fromPage=aFP_Lanuch&gender=1,3&method=app.resources.iconzip&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=386ab6918b8e53f1200b7c497b6afb46&udid=867300032329134cf22011e52bdc713&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=6.2.3&client_type="+clientType+"&fromPage=aFP_Lanuch&gender=1,3&method=app.resources.iconzip&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=386ab6918b8e53f1200b7c497b6afb46&udid=867300032329134cf22011e52bdc713&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_abtest_configs" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_abtest_configs" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${uid_test}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String os_version = "android6.0.1:OPPO_R9s"; +String req = "app_version=5.5.1&client_type="+clientType+"&gender=&method=app.abtest.configs&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=&udid=A000006149EAE9b8f4f3d5ea7421e8&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); +os_version=URLEncoder.encode(os_version); +req = "app_version=5.5.1&client_type="+clientType+"&gender=&method=app.abtest.configs&os_version="+os_version+"&physical_channel=1&private_key="+privateKey+"&screen_size=1080x1920&session_key=&udid=A000006149EAE9b8f4f3d5ea7421e8&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_sort_get_rec" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_sort_get_rec" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${uid_test}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=6.5.4&business_line=yohobuy&channel_id=0&client_type="+clientType+"&contentCode=daaa8b1a5103a30419ebd79c06e6feac&fromPage=iFP_Category&method=app.sort.get.rec&msort=5&os_version=10.3.1&physical_channel=1&private_key="+privateKey+"&screen_size=320x568&session_key=03deeb3ef86fe41f9a0cdbd7465848d1&udid=3a033e9758afe76516e386fc1c0de5c27be9888f&uid="+bsh.args[0]+"&v=7"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_passport_verify" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_passport_verify" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${uid_test}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=6.4.0&client_type="+clientType+"&method=app.passport.verify&private_key="+privateKey+"&session_key=02abb312236b58cb76784c80f4f9d825&uid="+bsh.args[0]+""; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_newproduct_rec_productList" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_newproduct_rec_productList" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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 = {"android","iphone"}; +String[] privateKeys = {"fd4ad5fcfa0de589ef238c0e7331b585","a85bb0674e08986c6b115d5e3a4884fa"}; +int rd = new Random().nextInt(2); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; + +String req = "app_version=6.5.0&business_line=yohobuy&client_type="+clientType+"&fromPage=iFP_NativeNewArrival&limit=20&method=app.newproduct.rec.productList&order=&os_version=11.2.2&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=5b858699434d6539be8560a468f55dd2&udid=d36ce77c593c9c7fb1ee5020d4e8a36f6ee635af&uid="+bsh.args[0]+"&v=7&yh_channel=1"; +MessageDigest md = MessageDigest.getInstance("MD5"); +byte[] btInput = req.getBytes(); +md.update(btInput); +byte[] btResult = md.digest(); +StringBuffer sb = new StringBuffer(); +for(byte b : btResult){ + int bt = b&0xff; + if(bt<16){ + sb.append(0); + } + sb.append(Integer.toHexString(bt)); +} +String md5 = sb.toString(); + + +vars.put("searchValue",req+"&client_secret="+md5);</stringProp> + </BeanShellPreProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1450572480">"code":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="固定TPM" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <doubleProp> + <name>throughput</name> + <value>600</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <BackendListener guiclass="BackendListenerGui" testclass="BackendListener" testname="influxdb_master" enabled="true"> + <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="graphiteMetricsSender" elementType="Argument"> + <stringProp name="Argument.name">graphiteMetricsSender</stringProp> + <stringProp name="Argument.value">org.apache.jmeter.visualizers.backend.graphite.TextGraphiteMetricsSender</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="graphiteHost" elementType="Argument"> + <stringProp name="Argument.name">graphiteHost</stringProp> + <stringProp name="Argument.value">192.168.104.43</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="graphitePort" elementType="Argument"> + <stringProp name="Argument.name">graphitePort</stringProp> + <stringProp name="Argument.value">2003</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="rootMetricsPrefix" elementType="Argument"> + <stringProp name="Argument.name">rootMetricsPrefix</stringProp> + <stringProp name="Argument.value">${__machineIP()}.</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="summaryOnly" elementType="Argument"> + <stringProp name="Argument.name">summaryOnly</stringProp> + <stringProp name="Argument.value">false</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="samplersList" elementType="Argument"> + <stringProp name="Argument.name">samplersList</stringProp> + <stringProp name="Argument.value">tc_.*</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="useRegexpForSamplersList" elementType="Argument"> + <stringProp name="Argument.name">useRegexpForSamplersList</stringProp> + <stringProp name="Argument.value">true</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="percentiles" elementType="Argument"> + <stringProp name="Argument.name">percentiles</stringProp> + <stringProp name="Argument.value">90</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="classname">org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient</stringProp> + <stringProp name="TestPlan.comments"></stringProp> + </BackendListener> + <hashTree/> </hashTree> + </hashTree> +</jmeterTestPlan> \ No newline at end of file