jmeter脚本编写~dubbo协议(java版)

重点内容###1. dubbo的介绍
有问题,加入此群:364972546
在做dubbo性能测试接口时,需要了解dubbo的流程,故而贴出官网的内容
以下内容摘自官网(http://dubbo.io/)

架构
jmeter脚本编写~dubbo协议(java版)_第1张图片

节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2. dubbo的原理

dubbo是基于rpc远程调用的原理
请参考此博客:http://blog.csdn.net/mindfloating/article/details/39474123

3. 搭建dubbo服务

主要作用是熟悉dubbo调用的整个工程
第一步:下载dubbo小例子代码(链接:http://pan.baidu.com/s/1hse6bWS 密码:jw8v)
第二步:下载zookeeper-3.4软件(链接: http://pan.baidu.com/s/1boT5ka 密码: st9p)
第三步:下载dubbo服务管理页面项目(链接: http://pan.baidu.com/s/1o8TFXwQ 密码: yts4)

第四步:启动zookeeper-3.4.5服务,进入..\zookeeper-3.4.5\bin目录,执行zkServer.cmd脚本
jmeter脚本编写~dubbo协议(java版)_第2张图片

第五步:ecplise导入dubbo小例子代码
jmeter脚本编写~dubbo协议(java版)_第3张图片

第六步:打开dubboprovider工程的applicationContext.xml配置文件,找到

修改address属性值(修改为前面启动的zookeeper地址,dubboconsumer工程亦如此)程亦如此)在本地测试,不需要修改。

第七步:启动dubbo消费者(dubboconsumer),调用dubbo服务(dubboprovider)(确保启动日志无异常)
jmeter脚本编写~dubbo协议(java版)_第4张图片

4. 查看启动的dubbo服务

第一步:解压dubbo服务管理页面项目(在云盘下载)在tomcat容器中的webapps目录中,如下图:
jmeter脚本编写~dubbo协议(java版)_第5张图片
第二步:修改dubboadmin\WEB-INF\dubbo.properties文件
jmeter脚本编写~dubbo协议(java版)_第6张图片
第三步:启动tomcat
第四步:访问dubbo服务管理页面。输入http://localhost:8080/dubboadmin/,进入
jmeter脚本编写~dubbo协议(java版)_第7张图片
jmeter脚本编写~dubbo协议(java版)_第8张图片
jmeter脚本编写~dubbo协议(java版)_第9张图片
jmeter脚本编写~dubbo协议(java版)_第10张图片
jmeter脚本编写~dubbo协议(java版)_第11张图片
jmeter脚本编写~dubbo协议(java版)_第12张图片

5. 编写jmeter脚本

jmeter脚本时作为dubbo消费者
整个工程下载:链接:http://pan.baidu.com/s/1jI2O4VO 密码:wucl
以为为工程主要代码:

package com.one;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.unj.dubbotest.provider.DemoService;

public class TestConsumer  extends AbstractJavaSamplerClient {

    private static String label = "consumer"; 

    private   String ID;

    //dubbo服务地址
    private  String URL;

    private  String VERSION ;

    private  String SERVICE_NAME;   

    private Object object;

     public void init() {
        // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("hehe_consumer");

        // 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接
        // 引用远程服务
        ReferenceConfig  reference = new ReferenceConfig(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏
        reference.setApplication(application);
        reference.setId(ID);
        reference.setVersion(VERSION);
        //dubbo服务名
        reference.setInterface(SERVICE_NAME);

        //dubboip地址
        reference.setUrl(URL);

        // 和本地bean一样使用xxxService
        object = reference.get(); // 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用\
        }

    public void setupTest(){  
        //定义测试初始值,setupTest只在测试开始前使用  
        System.out.println("setupTest");  
    }  

    @Override
    public SampleResult runTest(JavaSamplerContext arg0) {
        SampleResult sr = new SampleResult(); ; 
        try {
            //获取参数
            ID = arg0.getParameter("ID");  
            URL = arg0.getParameter("URL"); 

            VERSION = arg0.getParameter("VERSION");  
            SERVICE_NAME = arg0.getParameter("SERVICE_NAME"); 

            //dubbo初始化
            init();

            //jmeter结果对象

            sr.setSampleLabel(label);

            sr.sampleStart(); 

            DemoService demoService = (DemoService)object;
            String hello = demoService.sayHello("tom");

            sr.setResponseCode("00000");
            sr.setResponseMessage(hello);

            sr.setSuccessful(true); 
            sr.sampleEnd(); // jmeter 结束统计响应时间标记  

        } catch (Exception e) {
            e.printStackTrace();
            sr.setResponseCode("999");
            sr.setResponseMessage(e.getMessage());
            sr.setSuccessful(false);
        }
        return sr;
    }

    public Arguments getDefaultParameters(){  
        //参数定义,显示在前台,也可以不定义  
        Arguments params = new Arguments();  
        params.addArgument("ID", "");  
        params.addArgument("URL", ""); 
        params.addArgument("VERSION", "");  
        params.addArgument("SERVICE_NAME", "");
        return params;  
        }  

    public void teardownTest(JavaSamplerContext arg0){  
        super.teardownTest(arg0);  
    }  
}

第一步:右击工程,点击Export标签,选择java文件夹,点击【JAR file】
jmeter脚本编写~dubbo协议(java版)_第13张图片

第二步:输入JAR file 文件路径,点击【Finish】按钮
jmeter脚本编写~dubbo协议(java版)_第14张图片
第三步:导致的jar放置../apache-jmeter-2.13\lib\ext目录下
jmeter脚本编写~dubbo协议(java版)_第15张图片

6. jmeter使用

jmeter就不介绍了,网上一大堆
第一步:打开Jmeter软件
jmeter脚本编写~dubbo协议(java版)_第16张图片

新建线程组jmeter脚本编写~dubbo协议(java版)_第17张图片
第二步:新建一个Java请求,选择自己编写的测试类,输入参数
第一个参数:这个参数没有特定的规定,名字取得有意义一些,比如:ID
第二个参数:输入dubbo的服务地址:dubbo://127.0.0.1:20880(是自己项目的具体情况)
第三个参数:输入dubbo的版本号:1.0.0
第四个参数:输入dubbo服务名称:com.unj.dubbotest.provider.DemoService
jmeter脚本编写~dubbo协议(java版)_第18张图片

第三步:新建一个监听器
jmeter脚本编写~dubbo协议(java版)_第19张图片

第四步:Jmeter导入依赖包,(包的目录是在工程(consumer)的lib下)
点击测试计划,右下方点击【浏览】按钮,选择工程下的lib目录,重启Jmeter
jmeter脚本编写~dubbo协议(java版)_第20张图片

第五步:执行Jmeter,查看结果
jmeter脚本编写~dubbo协议(java版)_第21张图片

你可能感兴趣的:(性能测试)