{"id":831,"date":"2023-03-03T22:43:06","date_gmt":"2023-03-03T14:43:06","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=831"},"modified":"2023-04-29T16:50:32","modified_gmt":"2023-04-29T08:50:32","slug":"jmeter-test-dubbo-interface","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/03\/jmeter-test-dubbo-interface\/","title":{"rendered":"Jmeter\u6d4b\u8bd5Dubbo\u63a5\u53e3"},"content":{"rendered":"<p>Jmeter\u6d4b\u8bd5Dubbo\u63a5\u53e3\uff1a\u521b\u5efaDubbo\u670d\u52a1\u6d88\u8d39\u8005\u5de5\u7a0b\uff0c\u518d\u4f7f\u7528Jmeter\u538b\u6d4b\u8be5\u5de5\u7a0b<\/p>\n<h4>StressHelper.java<\/h4>\n<p><!-- more --><\/p>\n<pre><code class=\"language-java\">public class StressHelper {\n    private static ClassPathXmlApplicationContext context;\n\n    static {\n        context = new ClassPathXmlApplicationContext(&quot;classpath:dubbo-consumer.xml&quot;);\n    }\n\n    public static &lt;T&gt; T getBean(String name) {\n        return (T)context.getBean(name);\n    }\n\n    public static &lt;T&gt; T getBean(Class&lt;T&gt; type) {\n        return context.getBean(type);\n    }\n\n    public static void close() {\n        context.close();\n    }\n\n}<\/code><\/pre>\n<h4>ExampleStress.java<\/h4>\n<pre><code class=\"language-java\">import com.alibaba.fastjson.JSON;\nimport cn.appblog.dubbo.stress.StressHelper;\nimport org.apache.jmeter.config.Arguments;\nimport org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;\nimport org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;\nimport org.apache.jmeter.samplers.SampleResult;\n\npublic class ExampleStress extends AbstractJavaSamplerClient {\n\n    private IExampleService exampleService;\n    private SimpleDateFormat dateFormat;\n\n    public void setupTest(JavaSamplerContext arg0){\n        exampleService = StressHelper.getBean(&quot;exampleService&quot;);\n        dateFormat = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);\n    }\n\n    @Override\n    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {\n        SampleResult sr = new SampleResult();\n        sr.setSampleLabel(&quot;pay_create&quot;);\n        sr.sampleStart();\n        try {\n            \/\/getNewLogger().info(&quot;==========begin==========&quot;);\n            ExampleRequest request = new ExampleRequest();\n            request.setParamLong(javaSamplerContext.getLongParameter(&quot;paramLong&quot;));\n            request.setParamString(javaSamplerContext.getParameter(&quot;paramString&quot;));\n            request.setParamDate(dateFormat.parse(javaSamplerContext.getParameter(&quot;paramDate&quot;)));\n            request.setParamEnum(ExampleEnum.valueOf(javaSamplerContext.getParameter(&quot;paramEnum&quot;)));\n            request.setParamObject(JSON.parseObject(javaSamplerContext.getParameter(&quot;paramObject&quot;), ExampleBean.class));\n            request.setParamList(JSON.parseArray(javaSamplerContext.getParameter(&quot;paramList&quot;), ExampleBean.class));\n            request.setParamMap(JSON.parseObject(javaSamplerContext.getParameter(&quot;paramMap&quot;), Map.class));\n\n            sr.setSamplerData(JSON.toJSONString(request));\n            ExampleResponse response = exampleService.method(request);\n            if (response != null &amp;&amp; response.getCode() == 0) {\n                sr.setSuccessful(true);\n            }\n            sr.setResponseData(JSON.toJSONBytes(response));\n            \/\/getNewLogger().info(&quot;=========end============&quot;);\n            \/\/System.out.println(JSON.toJSONString(response));\n        } catch (Exception e) {\n            getNewLogger().error(&quot;&quot;, e);\n        } finally {\n            sr.sampleEnd();\n        }\n\n        return sr;\n    }\n\n    @Override\n    public Arguments getDefaultParameters() {\n        Arguments params = new Arguments();\n        params.addArgument(&quot;paramLong&quot;, &quot;201806062010181234&quot;);\n        params.addArgument(&quot;paramString&quot;, &quot;test&quot;);\n        params.addArgument(&quot;paramDate&quot;, &quot;2018-06-06&quot;);\n        params.addArgument(&quot;paramEnum&quot;, &quot;RMB&quot;);\n        params.addArgument(&quot;paramObject&quot;, &quot;{\\&quot;id\\&quot;:001, \\&quot;name\\&quot;:\\&quot;Joe.Ye\\&quot;, \\&quot;blog\\&quot;:\\&quot;www.appblog.cn\\&quot;}&quot;);\n        params.addArgument(&quot;paramList&quot;, &quot;[{\\&quot;id\\&quot;:001, \\&quot;name\\&quot;:\\&quot;Joe.Ye\\&quot;, \\&quot;blog\\&quot;:\\&quot;www.appblog.cn\\&quot;}]&quot;);\n        params.addArgument(&quot;paramMap&quot;, &quot;{\\&quot;id\\&quot;:001, \\&quot;name\\&quot;:\\&quot;Joe.Ye\\&quot;, \\&quot;blog\\&quot;:\\&quot;www.appblog.cn\\&quot;}&quot;);\n        return params;\n    }\n\n    @Override\n    public void teardownTest(JavaSamplerContext context) {\n        \/\/StressHelper.close();\n    }\n\n}<\/code><\/pre>\n<h4>dubbo-consumer.xml<\/h4>\n<pre><code class=\"language-xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;beans xmlns=&quot;http:\/\/www.springframework.org\/schema\/beans&quot;\n       xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\n       xmlns:dubbo=&quot;http:\/\/code.alibabatech.com\/schema\/dubbo&quot;\n       xsi:schemaLocation=&quot;http:\/\/www.springframework.org\/schema\/beans\n    http:\/\/www.springframework.org\/schema\/beans\/spring-beans.xsd\n    http:\/\/code.alibabatech.com\/schema\/dubbo \n    http:\/\/code.alibabatech.com\/schema\/dubbo\/dubbo.xsd&quot;&gt;\n\n    &lt;dubbo:application name=&quot;dubbo_stress_application&quot; owner=&quot;&quot;\/&gt;\n    &lt;dubbo:registry address=&quot;zookeeper:\/\/192.168.1.10:2181?backup=192.168.1.11:2181,192.168.1.12:2181&quot;\/&gt;\n    &lt;dubbo:consumer check=&quot;false&quot;  timeout=&quot;120000&quot;\/&gt;\n\n    &lt;dubbo:reference id=&quot;exampleService&quot; interface=&quot;cn.appblog.service.IExampleService&quot;  \/&gt;\n\n&lt;\/beans&gt;<\/code><\/pre>\n<h4>pom.xml<\/h4>\n<pre><code class=\"language-xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n\n&lt;project xmlns=&quot;http:\/\/maven.apache.org\/POM\/4.0.0&quot; xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\n         xsi:schemaLocation=&quot;http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd&quot;&gt;\n    &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n\n    &lt;groupId&gt;cn.appblog.dubbo.stress&lt;\/groupId&gt;\n    &lt;artifactId&gt;stress&lt;\/artifactId&gt;\n    &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n\n    &lt;name&gt;stress&lt;\/name&gt;\n    &lt;!-- FIXME change it to the project&#039;s website --&gt;\n    &lt;url&gt;http:\/\/www.example.com&lt;\/url&gt;\n\n    &lt;properties&gt;\n        &lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\n        &lt;maven.compiler.source&gt;1.8&lt;\/maven.compiler.source&gt;\n        &lt;maven.compiler.target&gt;1.8&lt;\/maven.compiler.target&gt;\n        &lt;spring.version&gt;4.3.7.RELEASE&lt;\/spring.version&gt;\n    &lt;\/properties&gt;\n\n    &lt;dependencies&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;cn.appblog.cloud&lt;\/groupId&gt;\n            &lt;artifactId&gt;example-interfaces&lt;\/artifactId&gt;\n            &lt;version&gt;1.0.0-SNAPSHOT&lt;\/version&gt;\n        &lt;\/dependency&gt;\n\n        &lt;!--&lt;dependency&gt;\n            &lt;groupId&gt;org.apache.jmeter&lt;\/groupId&gt;\n            &lt;artifactId&gt;ApacheJMeter_core&lt;\/artifactId&gt;\n            &lt;version&gt;4.0&lt;\/version&gt;\n            &lt;exclusions&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;org.codehaus.groovy&lt;\/groupId&gt;\n                    &lt;artifactId&gt;groovy-all&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;commons-math3&lt;\/groupId&gt;\n                    &lt;artifactId&gt;commons-math3&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;commons-pool2&lt;\/groupId&gt;\n                    &lt;artifactId&gt;commons-pool2&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n            &lt;\/exclusions&gt;\n        &lt;\/dependency&gt;--&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;com.alibaba&lt;\/groupId&gt;\n            &lt;artifactId&gt;dubbo&lt;\/artifactId&gt;\n            &lt;version&gt;2.5.6&lt;\/version&gt;\n            &lt;exclusions&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\n                    &lt;artifactId&gt;*&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n            &lt;\/exclusions&gt;\n        &lt;\/dependency&gt;\n\n        &lt;!-- https:\/\/mvnrepository.com\/artifact\/com.101tec\/zkclient --&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;com.101tec&lt;\/groupId&gt;\n            &lt;artifactId&gt;zkclient&lt;\/artifactId&gt;\n            &lt;version&gt;0.3&lt;\/version&gt;\n            &lt;exclusions&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;log4j&lt;\/groupId&gt;\n                    &lt;artifactId&gt;log4j&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;jline&lt;\/groupId&gt;\n                    &lt;artifactId&gt;jline&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n            &lt;\/exclusions&gt;\n        &lt;\/dependency&gt;\n\n        &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.apache.jmeter\/ApacheJMeter_java --&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.apache.jmeter&lt;\/groupId&gt;\n            &lt;artifactId&gt;ApacheJMeter_java&lt;\/artifactId&gt;\n            &lt;version&gt;3.2&lt;\/version&gt;\n            &lt;scope&gt;provided&lt;\/scope&gt;\n            &lt;exclusions&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;org.codehaus.groovy&lt;\/groupId&gt;\n                    &lt;artifactId&gt;groovy-all&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;commons-math3&lt;\/groupId&gt;\n                    &lt;artifactId&gt;commons-math3&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;commons-pool2&lt;\/groupId&gt;\n                    &lt;artifactId&gt;commons-pool2&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n                &lt;exclusion&gt;\n                    &lt;artifactId&gt;ApacheJMeter_components&lt;\/artifactId&gt;\n                    &lt;groupId&gt;org.apache.jmeter&lt;\/groupId&gt;\n                &lt;\/exclusion&gt;\n            &lt;\/exclusions&gt;\n        &lt;\/dependency&gt;\n\n        &lt;!--spring\u4f9d\u8d56\u7684jar\u5305--&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;com.alibaba&lt;\/groupId&gt;\n            &lt;artifactId&gt;fastjson&lt;\/artifactId&gt;\n            &lt;version&gt;1.2.36&lt;\/version&gt;\n        &lt;\/dependency&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\n            &lt;artifactId&gt;spring-context&lt;\/artifactId&gt;\n            &lt;version&gt;${spring.version}&lt;\/version&gt;\n            &lt;exclusions&gt;\n                &lt;exclusion&gt;\n                    &lt;groupId&gt;commons-logging&lt;\/groupId&gt;\n                    &lt;artifactId&gt;commons-logging&lt;\/artifactId&gt;\n                &lt;\/exclusion&gt;\n            &lt;\/exclusions&gt;\n        &lt;\/dependency&gt;\n\n    &lt;\/dependencies&gt;\n\n    &lt;build&gt;\n        &lt;plugins&gt;\n            &lt;!--\u590d\u5236jar\u5305\u63d2\u4ef6\uff0c\u5c06\u4f7f\u7528\u5230\u7684jar\u5305\uff0c\u590d\u5236\u5230target\/lib\u4e2d--&gt;\n            &lt;plugin&gt;\n                &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n                &lt;artifactId&gt;maven-dependency-plugin&lt;\/artifactId&gt;\n                &lt;executions&gt;\n                    &lt;execution&gt;\n                        &lt;id&gt;copy-dependencies&lt;\/id&gt;\n                        &lt;phase&gt;prepare-package&lt;\/phase&gt;\n                        &lt;goals&gt;\n                            &lt;goal&gt;copy-dependencies&lt;\/goal&gt;\n                        &lt;\/goals&gt;\n                        &lt;configuration&gt;\n                            &lt;outputDirectory&gt;${project.build.directory}\/lib&lt;\/outputDirectory&gt;\n                            &lt;overWriteReleases&gt;false&lt;\/overWriteReleases&gt;\n                            &lt;overWriteSnapshots&gt;false&lt;\/overWriteSnapshots&gt;\n                            &lt;overWriteIfNewer&gt;true&lt;\/overWriteIfNewer&gt;\n                        &lt;\/configuration&gt;\n                    &lt;\/execution&gt;\n                &lt;\/executions&gt;\n            &lt;\/plugin&gt;\n\n            &lt;plugin&gt;\n                &lt;groupId&gt;org.codehaus.mojo&lt;\/groupId&gt;\n                &lt;artifactId&gt;build-helper-maven-plugin&lt;\/artifactId&gt;\n                &lt;version&gt;1.8&lt;\/version&gt;\n                &lt;executions&gt;\n                    &lt;execution&gt;\n                        &lt;id&gt;add-resource&lt;\/id&gt;\n                        &lt;phase&gt;generate-resources&lt;\/phase&gt;\n                        &lt;goals&gt;\n                            &lt;goal&gt;add-resource&lt;\/goal&gt;\n                        &lt;\/goals&gt;\n                        &lt;configuration&gt;\n                            &lt;resources&gt;\n                                &lt;resource&gt;\n                                    &lt;directory&gt;src\/main\/resources&lt;\/directory&gt;\n                                    &lt;includes&gt;\n                                        &lt;include&gt;*&lt;\/include&gt;\n                                    &lt;\/includes&gt;\n                                &lt;\/resource&gt;\n                            &lt;\/resources&gt;\n                        &lt;\/configuration&gt;\n                    &lt;\/execution&gt;\n                &lt;\/executions&gt;\n            &lt;\/plugin&gt;\n\n            &lt;plugin&gt;\n                &lt;artifactId&gt;maven-assembly-plugin&lt;\/artifactId&gt;\n                &lt;version&gt;2.4&lt;\/version&gt;\n                &lt;configuration&gt;\n                    &lt;descriptorRefs&gt;\n                        &lt;descriptorRef&gt;jar-with-dependencies&lt;\/descriptorRef&gt;\n                    &lt;\/descriptorRefs&gt;\n                &lt;\/configuration&gt;\n                &lt;executions&gt;\n                    &lt;execution&gt;\n                        &lt;id&gt;make-assembly&lt;\/id&gt;\n                        &lt;phase&gt;package&lt;\/phase&gt;\n                        &lt;goals&gt;\n                            &lt;goal&gt;single&lt;\/goal&gt;\n                        &lt;\/goals&gt;\n                    &lt;\/execution&gt;\n                &lt;\/executions&gt;\n            &lt;\/plugin&gt;\n\n        &lt;\/plugins&gt;\n    &lt;\/build&gt;\n&lt;\/project&gt;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Jmeter\u6d4b\u8bd5Dubbo\u63a5\u53e3\uff1a\u521b\u5efaDubbo\u670d\u52a1\u6d88\u8d39\u8005\u5de5\u7a0b\uff0c\u518d\u4f7f\u7528Jmeter\u538b\u6d4b\u8be5\u5de5\u7a0b StressHel [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97],"tags":[195,231],"class_list":["post-831","post","type-post","status-publish","format-standard","hentry","category-tools-skills","tag-dubbo","tag-jmeter"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=831"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/831\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}