此文归公众号“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 package
java -jar dubbo-example-provider/target/dubbo-example-provider-0.0.1.jar
编写Jmeter 负载测试脚本:
-
使用已有的Jmeter dubbo plugin。
https://github.com/thubbo/jmeter-plugins-for-apache-dubbo -
自己编写测试脚本的实现并封装成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中可以调用。