diff --git a/script/default/test.jmx b/script/default/test.jmx index aa4e795..8f69e81 100644 --- a/script/default/test.jmx +++ b/script/default/test.jmx @@ -204,23 +204,1733 @@ <stringProp name="shareMode">shareMode.all</stringProp> </CSVDataSet> <hashTree/> - <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_h5_product_intro" enabled="true"> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/getList" enabled="true"> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <intProp name="LoopController.loops">-1</intProp> </elementProp> - <stringProp name="ThreadGroup.num_threads">80</stringProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> <stringProp name="ThreadGroup.ramp_time">10</stringProp> <longProp name="ThreadGroup.start_time">1488865571000</longProp> <longProp name="ThreadGroup.end_time">1488865571000</longProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <stringProp name="ThreadGroup.duration"></stringProp> <stringProp name="ThreadGroup.delay"></stringProp> - <stringProp name="TestPlan.comments">根据skn查询商品下半页详情描述信息</stringProp> + <stringProp name="TestPlan.comments">逛的列表(pageCache)</stringProp> </ThreadGroup> <hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_h5_product_intro" enabled="true"> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/getList" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v2/article/getList?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">逛的列表(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 req = "app_version=5.8.1&client_type="+clientType+"&fromPage=iFP_GuangContainer&gender=1,3&limit=20&os_version=10.2.1&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=414x736&session_key=8be620e2d951d49128232f8b4c392422&sort_id=0&udid=380aebe1da2c72def222c78249f99ef08c18260a&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/getSimpleArticleList" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">获取浏览数,点赞数等信息</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/getSimpleArticleList" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v2/article/getSimpleArticleList?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">获取浏览数,点赞数等信息</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">${article_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&articleIds="+bsh.args[0]+"&client_type="+clientType+"&fromPage=iFP_GuangContainer&gender=2,3&os_version=10.2.1&physical_channel=2&private_key="+privateKey+"&screen_size=375x667&session_key=aed364774108fa1b85bfb218f34c28c7&sortId=0&udid=7887164c6c98712ad1f214cacec3316f4aae4c51&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(); +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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/getTopList" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">文章置顶</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/getTopList" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v2/article/getTopList?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">文章置顶</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_GuangContainer&gender=1,3&os_version=10.3.2&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=dbef84f3659c370fcd19de19e67a5556&udid=c383b9ed7696d2b31cf22685114a3a63eae58e95&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/getTagTop" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">获取逛的热门标签(PC端)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/getTagTop" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v2/article/getTagTop?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">获取逛的热门标签(PC端)</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"></stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"web"}; +String[] privateKeys = {"0ed29744ed318fd28d2c07985d3ba633"}; +int rd = new Random().nextInt(1); +String clientType = clientTypes[rd]; +String privateKey = privateKeys[rd]; +String req = "app_version=5.8.0&client_type="+clientType+"&limit=20&os_version=yohobuy:web&page=4&private_key="+privateKey+"&screen_size=720x1280&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v1/category/get" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">获取逛下的分类列表(缓存时间延长)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v1/category/get" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v1/category/get?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">获取逛下的分类列表(缓存时间延长)</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_GuangMain&gender=1,3&os_version=10.2.1&physical_channel=1&private_key="+privateKey+"&screen_size=414x736&session_key=8be620e2d951d49128232f8b4c392422&udid=380aebe1da2c72def222c78249f99ef08c18260a&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/*/article/getArticleByViewsNum" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">获取48小时内浏览最多的文章(PC端)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/*/article/getArticleByViewsNum" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v2/article/getArticleByViewsNum?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">获取48小时内浏览最多的文章(PC端)</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"></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.0&client_type="+clientType+"&gender=1,3&limit=10&os_version=yohobuy:web&page=1&private_key="+privateKey+"&screen_size=720x1280&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/v2/article/getArticle" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">根据文章id和客户端类型获得文章</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/v2/article/getArticle" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/service/v2/article/getArticleContent?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">根据文章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">${article_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&article_id="+bsh.args[0]+"&client_type="+clientType+"&os_version=10.1.1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v2/article/getArticleBaseInfo" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">获取文章内容详情</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v2/article/getArticleBaseInfo" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v2/article/getArticleBaseInfo?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">获取文章内容详情</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">${article_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&client_type="+clientType+"&fromPage=iFP_GuangDetail&id="+bsh.args[0]+"&os_version=10.1.1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v1/article/getArticleNotice" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">1</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v1/article/getArticleNotice" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v1/article/getArticleNotice?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">1</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置BeanShell" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters">${article_datetime} ${uid}</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="script">import java.security.MessageDigest; +import java.util.Random; +String[] clientTypes = {"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+"&datetime="+bsh.args[0]+"&fromPage=aFP_Root_Phone&gender=2,3&os_version=android6.0:BLN-AL10&physical_channel=2&private_key="+privateKey+"&screen_size=1080x1812&session_key=6471aeedc3b960d856b793789983d398&udid=863982030989458af245102e1b93ddd&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(); +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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/*/article/getArticlePraiseAndFavor" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">获取文章内容详情的点赞、收藏、浏览数(降级)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/*/article/getArticlePraiseAndFavor" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v2/article/getArticlePraiseAndFavor?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">获取文章内容详情的点赞、收藏、浏览数(降级)</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">${article_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&client_type="+clientType+"&id="+bsh.args[0]+"&os_version=10.3.2&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=37d73148be684c1424c353348f9cdc5a&udid=403b22e7c3749ffd84fff5e586f4f2c5e671520f&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v1/share/guang" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">获取文章内容</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v1/share/guang" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v1/share/guang?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">获取文章内容</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">${article_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&client_type="+clientType+"&id="+bsh.args[0]+"&os_version=10.3.2&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=dbef84f3659c370fcd19de19e67a5556&udid=c383b9ed7696d2b31cf22685114a3a63eae58e95&uid="+bsh.args[1]+"&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/*/article/getArticleContent" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">根据文章id和客户端类型获取逛的详情内容</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/*/article/getArticleContent" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/service/v2/article/getArticleContent?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">根据文章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">${article_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&article_id="+bsh.args[0]+"&client_type="+clientType+"&os_version=10.1.1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/v2/article/getBrand" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">进入文章详情页时,用于展示相关品牌</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/v2/article/getBrand" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/service/v2/article/getBrand?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">进入文章详情页时,用于展示相关品牌</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">${article_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&article_id="+bsh.args[0]+"&client_type="+clientType+"&os_version=10.3.2&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=37d73148be684c1424c353348f9cdc5a&udid=403b22e7c3749ffd84fff5e586f4f2c5e671520f&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/api/v1/comments/getList" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">获取文章评论列表</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/api/v1/comments/getList" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/api/v1/comments/getList?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">获取文章评论列表</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">${article_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&article_id="+bsh.args[0]+"&client_type="+clientType+"&limit=10&os_version=10.1.1&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/v2/article/getOtherArticle" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">进入文章详情页时,用于展示相关文章</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/v2/article/getOtherArticle" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/service/v2/article/getOtherArticle?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">进入文章详情页时,用于展示相关文章</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">${article_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&article_id="+bsh.args[0]+"&client_type="+clientType+"&limit=3&offset=0&os_version=10.3.2&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=dbef84f3659c370fcd19de19e67a5556&tags=&udid=c383b9ed7696d2b31cf22685114a3a63eae58e95&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_document_config" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">微信公众号</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_document_config" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">微信公众号</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+"&method=app.document.config&os_version=10.1.1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_app_resources_getSingleTemplate" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">1</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_app_resources_getSingleTemplate" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_API}/?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">1</stringProp> + </HTTPSamplerProxy> + <hashTree> + <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="前置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+"&key=guang_detail_wechat&method=app.resources.getSingleTemplate&module=wechat&os_version=10.1.1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&udid=3a31d8b3f75a08c958747d41c4854673c669ef5f&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_/guang/service/*/author/getAuthor" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">根据作者id获取作者信息(可降级)</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_/guang/service/*/author/getAuthor" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">http://${HOST_SERVICE}/guang/service/v1/author/getAuthor?${searchValue}</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="TestPlan.comments">根据作者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">${article_author_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&author_id="+bsh.args[0]+"&client_type="+clientType+"&os_version=10.3.2&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=b94ef83641963fac4240ff6bf2d7c8b9&udid=6d0c217d6fad39d94ddbfa676c0a01194e1bdb9d&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>6000</value> + <savedValue>0.0</savedValue> + </doubleProp> + <intProp name="calcMode">2</intProp> + </ConstantThroughputTimer> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="tg_show_showChannel" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <longProp name="ThreadGroup.start_time">1488865571000</longProp> + <longProp name="ThreadGroup.end_time">1488865571000</longProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <stringProp name="TestPlan.comments">show频道列表</stringProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="tc_show_showChannel" enabled="true"> <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> <collectionProp name="Arguments.arguments"> @@ -245,22 +1955,22 @@ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> <boolProp name="HTTPSampler.monitor">false</boolProp> <stringProp name="HTTPSampler.embedded_url_re"></stringProp> - <stringProp name="TestPlan.comments">根据skn查询商品下半页详情描述信息</stringProp> + <stringProp name="TestPlan.comments">show频道列表</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}</stringProp> + <stringProp name="parameters">${uid}</stringProp> <stringProp name="filename"></stringProp> <stringProp name="script">import java.security.MessageDigest; import java.util.Random; -String[] clientTypes = {"h5"}; +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.0&client_type="+clientType+"&method=h5.product.intro&os_version=yohobuy:web&private_key="+privateKey+"&productskn="+bsh.args[0]+"&screen_size=720x1280&v=7"; +String req = "app_version=5.8.1&client_type="+clientType+"&fromPage=iFP_ShowMain&limit=20&method=show.showChannel&os_version=10.3.2&page=1&physical_channel=1&private_key="+privateKey+"&screen_size=375x667&session_key=be7423e4fea423fa5336682a9b01f71a&udid=aa352294e8ef4065dfa75b7fb2a6c3bc19481ce3&uid="+bsh.args[0]+"&v=7"; MessageDigest md = MessageDigest.getInstance("MD5"); byte[] btInput = req.getBytes(); md.update(btInput); @@ -279,7 +1989,7 @@ vars.put("searchValue",req+"&client_secret="+md5);</stri <hashTree/> <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true"> <collectionProp name="Asserion.test_strings"> - <stringProp name="1450572480">productBo</stringProp> + <stringProp name="1450572480">"code":200</stringProp> </collectionProp> <stringProp name="TestPlan.comments"></stringProp> <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> @@ -292,7 +2002,7 @@ vars.put("searchValue",req+"&client_secret="+md5);</stri <stringProp name="TestPlan.comments"></stringProp> <doubleProp> <name>throughput</name> - <value>120000</value> + <value>6000</value> <savedValue>0.0</savedValue> </doubleProp> <intProp name="calcMode">2</intProp>