此文归公众号“Jmeter大拿”,未经允许, 严禁转载!

首先我们来看下什么dubbo 协议? 

所以我们的标题可以更准确的来表述,即如何负载测试 Dubbo  Provider。而Jmeter工具作(模)为(拟)Dubbo的Consumer。 

首先为了测试验证,本地部署一个Dubbo Provider 的服务, 一个Zookeeper作为 Registry。 (如果你已经有dubbo服务存在,则可以略过部署步骤)

 

  • Dubbo官方文档:  https://dubbo.apache.org/zh/

  • Zookeeper官方文档:  https://zookeeper.apache.org/

我们用一个Dubbo的sample例子来进行直接部署,代码地址:https://github.com/shuaicj/spring-boot-dubbo-example

 

部署: 

1.  下载zookeeper

wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

2.  将zookeeper的conf的zoo-sampler.conf  拷贝一份命名为  zoo.cfg,并启动zookeeper。

./zkServer.sh start

3. 下载dubbo samples 代码并启动 dubbo provider。

mvn clean packagejava -jar dubbo-example-provider/target/dubbo-example-provider-0.0.1.jar

编写Jmeter 负载测试脚本:

  1.    使用已有的Jmeter dubbo plugin。  
    https://github.com/thubbo/jmeter-plugins-for-apache-dubbo

  2.  自己编写测试脚本的实现并封装成Jar包供Jmeter调用。 

 

今天我们先简单介绍下如何使用Jmete java sampler 实现。 因为我们要用Jmeter来实现dubbo consumer,所以直接使用dubbo java api 来完成consumer的功能(完全不依赖spring,xml配置)

 

新建一个java 工程。 建议直接maven或者gradle工程。 

 

  <dependencies>  <dependency>    <groupId>org.apache.dubbo</groupId>    <artifactId>dubbo</artifactId>    <version>2.7.3</version></dependency></dependencies>
// 使用java api 实现 consumer功能。即我们的测试脚本。package com.hissummer.dubbotest;
import org.apache.dubbo.config.ApplicationConfig;import org.apache.dubbo.config.ReferenceConfig;import org.apache.dubbo.config.RegistryConfig;
public class TestScript {    public String  test() {      ApplicationConfig application = new ApplicationConfig();  application.setName("hissummer.com-dubbo-consumer-test");  application.setVersion("1.0");
  RegistryConfig registryConfig = new RegistryConfig();  registryConfig.setAddress("zookeeper://127.0.0.1:2181");
  ReferenceConfig<HelloService> reference = new ReferenceConfig<HelloService>();  reference.setApplication(application);  reference.setRegistry(registryConfig);  reference.setInterface(HelloService.class);
  HelloService greetingsService = reference.get();  Hello hiMessage = greetingsService.hello("www.hissummer.com");    return hiMessage.toString();      }      public static void main(String[] args)  {      System.out.println(new TestScript().test());  }  }
// dubbo 的接口定义和vo对象可以直接复用 dubbo provider的代码。package com.hissummer.dubbotest;
import java.io.Serializable;

@SuppressWarnings("serial")public class Hello implements Serializable {
    private long id;    private String message;
    public Hello(long id, String message) {        this.id = id;        this.message = message;    }
    public long getId() {        return id;    }
    public String getMessage() {        return message;    }
    @Override    public String toString() {        return "Hello{"                + "id=" + id                + ", message='" + message + '\''                + '}';    }}
package com.hissummer.dubbotest;
public interface HelloService {
    Hello hello(String name);}
后面我们需要导出jar包放入jmeter的lib文件夹下(依赖的外部lib可以单独放到一个目录,需要在jmeter.properties中配置)。在Jmeter  jsr223 sampler中可以调用。