JMeter 测试 Dubbo 接口

相信读者应该已经对 Dubbo 项目的背景有了深入的了解,那么我们想用 JMeter 去测试 Dubbo 项目,无非是做两件事。

  • 开发 JMeterSampler 测试类;
  • 将 JMeter 与 Dubbo 服务的项目进行整合。

下面我们一一进行介绍。

开发 JMeterSampler

  • 将 apache-jmeter-3.1\lib\ext 目录下的 ApacheJMetercore.jar 和 ApacheJMeterjava.jar 放置到本地的 Maven 仓库中(放置方法参考上节中放置接口工程 jar 的方法);
  • 在前面的消费者工程 dubbo-consumer 的 pom.xml 文件中引入 ApacheJMetercore.jar 和 ApacheJMeterjava.jar;即在 pom.xml 文件中添加以下依赖信息:
<dependency>
<groupId>com.jmeter.core</groupId>
<artifactId>jmeterCore</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.jmeter.java</groupId>
<artifactId>jmeterJava</artifactId>
<version>0.0.1</version>
</dependency>

  • 在 src/main/java 的包 com.consumer.demo.dubbo_consumer 下新建 JmeterSampler.java,编写测试代码如下:
public class JmeterSampler implements JavaSamplerClient{
    private String resultData;
    public Arguments getDefaultParameters() {
        Arguments parms = new Arguments();
        //这行代码没有实际意义
        parms.addArgument("dubbo", "dubboTest");
        return parms;
    }
    public void setupTest(JavaSamplerContext context) {
        System.out.println("dubbo消费者调用开始");     
    }

    public SampleResult runTest(JavaSamplerContext contex) {
         SampleResult sr = new SampleResult();
            try{
                sr.sampleStart();//事务开始
             ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationConsumer.xml");  
             context.start();  
             DubboService demoService = (DubboService)context.getBean("dubboservice");   
             demoService.print();
            if (resultData != null && resultData.length() > 0) {  
                sr.setResponseData("结果是:"+resultData, null);  
                sr.setDataType(SampleResult.TEXT);  
                sr.setSuccessful(true);
            }} catch(Throwable e) {  
                sr.setSuccessful(false);  
                e.printStackTrace();  
            } finally {  
                sr.sampleEnd();//事务结束
        }
            return sr;      
    }
    public void teardownTest(JavaSamplerContext arg0) {
        System.out.println("dubbo消费者调用结束");
    }
}

将 JMeter 与 Dubbo 服务的项目进行整合

(1)cmd 到 dubbo-consumer 所在路径下执行 mvn dependency:copy-dependencies 命令获取此工程依赖的所有 jar 包:

执行成功在 dubbo-consumer 工程的 target 目录下新增一个 dependency 目录来存储此工程依赖的所有jar包:

最后将 dependency 目录下的所有 jar 包全部导入到 Jmeter/lib 目录下。

(2)选中 dubbo-consumer | 右键 | Run as | 再次执行 maven install 命令,重新生成 dubbo-provider-0.0.1-SNAPSHOT.jar:

将此 jar 包放置在 Jmeter/lib/ext 目录下即可。

(3)启动本地的 Zookpeer,启动本地的 Dubbo服务。

(4)打开 JMeter,测试计划 | 添加线程组 | 添加 Sampler、Java 请求,选择类名称:

(5)运行 JMeter 此时观察 Eclipse 的控制台,打印出“我是服务提供者”,说明调用成功:

剩下的测试思路就和前面一样了,建立测试场景,进行测试分析即可。

总结

posted @ 2018-11-22 11:36  长安。  阅读(145)  评论(0)    收藏  举报