Jmeter实现Dubbo接口测试

news2025/2/12 7:52:49

目录

前言:

一、准备

 二、编写我们的测试工程

三、Jmeter来测试这个工程


前言:

JMeter可以用来测试Dubbo接口的性能和负载。Dubbo是阿里巴巴的高性能RPC框架,常用于分布式服务的调用。为了测试Dubbo接口,需要使用JMeter提供的Java请求Sampler,并编写Java测试代码来模拟Dubbo服务调用。

一、准备

(1)自行下载安装zookeeper-3.4.6(这里的版本是我用的,可以自行下载自己喜好的版本)

(2)自行下载apache-jmeter-3.1,这是免安装的,解压后\Jmeter\apache-jmeter-3.1\bin目录下执行jmeter.bat即可启动。

(3)开发环境STS(即Spring Tool Suite)

(4)dubbo-admin-2.4.1(这个是非必须的,主要是为了查看Dubbo的服务提供者和消费者)

 二、编写我们的测试工程

先明确下我们编写工程的过程,dubbo主要是通过实现一个接口,将服务暴露出去。所以我们创建工程的时候,最好分开创建。可以分为:

下面我们分别来看:

1.接口工程

通过STS创建一个Spring Project。命名为Interface-service。在这个工程里面只新建一个接口,命名为DubboService.java。其代码如下:

package com.dubbo.provider.Interface_service;

public interface DubboService {
    public abstract void print();
}

其工程目录结构为:

此工程的其他内容都默认即可,不用做任何处理。

2.服务提供者dubbo-provider01的创建

通过STS创建一个Spring Project。命名为dubbo-provider01。其目录结构如下:

(1)通过pom.xml文件引入Interface-service的jar、dubbo服务的jar、zkclient的jar。这三个jar是必须要在pom文件中进行引用的,如果不引用后面会报错。引用代码为:

<dependency>
<groupId>com.dubbo.provider</groupId>
<artifactId>Interface-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>

 其中我们看Interface-service的引用,它的版本号哪里来的,我们在引用前,必须先对Interface-service这个工程进行maven install,生成其jar,其jar包在target目录下,如下图所示:

此时我们获取到Interface-service-0.01-SNAPSHOT.jar,在dubbo-provider01中可以引用了。

(2)编写dubbo-provider.xml文件。其文件内容为:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
http://code.alibabatech.com/schema/dubbo 
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"
default-lazy-init="true">
-->
<!-- 具体实现的bean -->
<bean id="dubboservice" class="com.dubbo.provider.demo.DubboServiceImpl" /> 
<!-- 定义应用名称 --> 
<dubbo:application name="dubbo-provider01"/> 

<!--zk注册中心的地址--> 
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" /> 

<!-- 用dubbo协议在21000端口暴露服务 --> 
<dubbo:protocol name="dubbo" port="21000" /> 

<!-- 配置服务接口 --> 
<dubbo:service interface="com.dubbo.provider.Interface_service.DubboService" ref="dubboservice" /> 

</beans>

 其中在编写xml文件前,必须先在windows->>preferences->>XML Catalog中add,详见我的博客。

(3)配置log4j.properties文件,文件内容为:

log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

(4)在src/main/java下新建包com.dubbo.provider.demo,再在包com.dubbo.provider.dem下新建接口DubboService.java的实现类DubboServiceImpl.java。其源码为:

package com.dubbo.provider.demo;
import org.springframework.stereotype.Service;
import com.dubbo.provider.Interface_service.DubboService;
@Service("dubboservice")
public class DubboServiceImpl implements DubboService{
public void print() {
System.out.println("欢迎您的操作");
}
}

 (5)在src/test/java下新建包com.dubbo.provider.test,再在包com.dubbo.provider.test下新建启动服务的测试类TestProvider.java。其源码为:

package com.dubbo.provider.test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.annotation.CommonAnnotationBeanPostProcessor;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.alibaba.dubbo.common.URL;

public class TestProvider {
    private static final Log log = LogFactory.getLog(TestProvider.class);  
    public static void main(String[] args) {
         try {  
             ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:dubbo-provider.xml");  
             context.start();  
         } catch (Exception e) {  
             log.error("== DubboProvider context start error:",e);  
         }  
         synchronized (TestProvider.class) {  
             while (true) {  
                 try {  
                     TestProvider.class.wait();  
                 } catch (InterruptedException e) {  
                     log.error("== synchronized error:",e);  
                 } 

             }  
         }  
    }
}

(6)首先启动ZK、再次启动estProvider.java,在启动Tomcat。最后查看其服务注册情况:

可以看到我们的服务提供者已经创建成功了。(怎样使用dubbo-admin查看dubbo服务可以参考我的博文:)

 3.消费者dubbo-consumer的创建

通过STS创建一个Spring Project,其目录结构如下图所示:

(1)pom.xml文件的引用,此时我们需要注意一个问题,作为消费者要调用服务提供者,所以必须要引入服务提供者的jar包,请注意我们引用的还应该是Interface-service的jar而并非是dubbo-provider01的jar。代码如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.springframework.samples</groupId>
  <artifactId>dubbo-consumer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <properties>

        <!-- Generic properties -->
        <java.version>1.6</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Spring -->
        <spring-framework.version>3.2.3.RELEASE</spring-framework.version>

        <!-- Hibernate / JPA -->
        <hibernate.version>4.2.1.Final</hibernate.version>

        <!-- Logging -->
        <logback.version>1.0.13</logback.version>
        <slf4j.version>1.7.5</slf4j.version>

        <!-- Test -->
        <junit.version>4.11</junit.version>

    </properties>
    
    <dependencies>
        <!-- Spring and Transactions -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>
        <dependency>
        <groupId>com.dubbo.provider</groupId>
        <artifactId>Interface-service</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.5.3</version>
        </dependency>
        <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>

        <!-- Logging with SLF4J & LogBack -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
            <scope>runtime</scope>
        </dependency>

        <!-- Hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        
        <!-- Test Artifacts -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring-framework.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>    
</project>

(2)编写dubbo-consumer.xml文件,其代码如下:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans    
        http://www.springframework.org/schema/beans/spring-beans.xsd    
        http://code.alibabatech.com/schema/dubbo    
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  
    <!-- 消费方应用名 -->  
    <dubbo:application name="dubbo-consumer" />  
       
    <!-- 填写zk注册中心的地址 -->  
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />  
      
    <!-- 引用服务提供接口的路径 -->  
    <dubbo:reference interface="com.dubbo.provider.Interface_service.DubboService" id="dubboservice" />  
  
</beans>    

(3)编写log4j.properties文件,内容与服务提供者的一致即可,不在赘述。

(4)在src/test/java下新建包com.dubbo.consumer.demo,再在包com.dubbo.consumer.demo下新建测试类TestConsumer.java,启动消费者,其源码如下:

package com.dubbo.consumer.demo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dubbo.provider.Interface_service.DubboService;

public class TestConsumer {
    private static final Log log = LogFactory.getLog(TestConsumer.class);  
    
    public static void main(String[] args) throws InterruptedException {  
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:dubbo-consumer.xml");  
        context.start();  
        DubboService demoService = (DubboService)context.getBean("dubboservice");   
        demoService.print();
       // log.info("打印"+demoService.print());            
        Thread.sleep(100000);    
    }  
}

(5)确保服务提供者正常启用的情况下,运行TestConsumer.java,运行结果如下:

(6)此时在查看dubbo服务:

我们可以看到dubbo-consumer这个dubbo服务业注册成功了,从此这个工程就搭建完毕了。

三、Jmeter来测试这个工程

(1)导出dubbo-consumer工程依赖的所有jar包:导出方法cmd到工程所在路径下执行mvn dependency:copy-dependencies命令即可:此时会在工程的target目录下新增一个

dependency目录

(2)将dependency目录中的jar全部复制粘贴到:Jmeter的lib目录下,如果有重复的jar包,则保留Jmeter的jar包。

(3)Run as工程dubbo-consumer,选择maven install。生成dubbo-consumer-0.0.1-SNAPSHOT.jar。

将dubbo-consumer-0.0.1-SNAPSHOT.jar放到Jmeter的\Jmeter\apache-jmeter-3.1\lib\ext路径下。

(4)以管理员身份打开Jmeter。新建一个线程组,新建一个java请求,增加查看结果树;此时运行java请求:

剩下的事情就是如何写测试脚本了。

 作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Yg3Y37fdTkAHAEyqD-gLuGbCI8UEiRA1&authKey=wJQ7hIhE9p%2FQDdwXXPjwolJnDMyBoIU%2FtVbTLbNFIvzIWoA7LZfVmSNccWx15jwG&noverify=0&group_code=574737577

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Chrome Custom Tabs

参考文档 API文档 链接 Chrome Custom Tabs 参考文档 https://developer.chrome.com/docs/android/custom-tabs/ Chrome Custom Tabs最佳实践_customtabs_Just_Sanpark的博客-CSDN博客 Chrome Custom Tabs最佳实践_chrome custom tabs集成_wxx614817的博客-CSDN博客 Chrome…

红黑树(RBTree)c++实现

目录 红黑树介绍 红黑树的性质&#xff1a; 红黑树的结点类 搜索(红黑)树的旋转 旋转分为4种(左旋&#xff0c;右旋&#xff0c;左右双旋&#xff0c;右左双旋)&#xff1a; 左旋(RotateL) 右旋(RotateR) 左右双旋(RotateLR) 右左双旋(RotateRL) 红黑树的插入 插入结…

计算机中丢失MSVCP140.dll无法启动此程序怎么办,可以使用这个方法修复

计算机中丢失MSVCP140.dll会导致很多软件跟游戏无法启动运行&#xff0c;这个问题相信困扰着不少小伙伴&#xff0c;遇到这个问题其实不用慌&#xff0c;也无需重装系统。需要先了解清楚MSVCP140.dll文件是什么&#xff0c;已经在我们电脑系统中的作用&#xff0c;了解清楚以后…

【技术干货】数字电路电平标准

信号的逻辑电平经历了从单端信号到差分信号、从低速信号到高速信号的发展过程。最基本的单端信号逻辑电平为CMOS、TTL&#xff0c;在此基础上随着电压摆幅的降低&#xff0c;出现LVCMOS、LVTTL等逻辑电平&#xff0c;随着信号速率的提升又出现ECL、PECL、LVPECL、LVDS、CML等差…

2.7V至25V宽输入电压15A 峰值电流

HT7179是一款高功率异步升压转换器&#xff0c;集成 20mΩ功率开关管&#xff0c;为便携式系统提供高效的 小尺寸解决方案。 HT7179具有2.7V至25V宽输入电压范围&#xff0c;可为 采用单节或两节锂电池&#xff0c;或12V铅酸电池的应 用提供支持。该器件具备15A开关电流能力&a…

【Java基础学习打卡05】命令提示符

目录 引言一、命令提示符是什么二、命令提示符常用命令1.打开命令提示符2.命令演示3.常用命令 总结 引言 知道命令提示符是什么&#xff0c;熟练打开命令提示符&#xff0c;熟练使用常用命令&#xff0c;并自行尝试其他命令。本文只是对命令提示符进行简单介绍和使用。 一、命…

绝版功能回归,Win11开始向Win7进化了

如果将 Win11 上架到 Steam 提供评论打分&#xff0c;那么 Win11 会和很多有争议的游戏一样&#xff1a;褒贬不一。 许多功能是吸引人的&#xff0c;但微软总会在什么时候突然给你一击。 前有 VBS 影响性能、谜之卡顿&#xff0c;后有各种广告、自动安装微软电脑管家。 以及我…

运营活动类项目测试方案设计

1、背景 随着业务的不断发展成熟&#xff0c;商业业务逐渐向重运营、重策略的模式发展&#xff0c;提出的需求中运营活动类需求数量也不断增多。而通过项目的积累、与其他业务的讨论共创&#xff0c;我们也积累了一批对运营活动类项目的测试点和对应的测试方案。下面我将从设计…

List容器(Java)

文章目录 1.容器介绍1.1 容器接口结构1.2 简单解析 2. List容器创建3. 访问操作(get, iterator, for)4. 修改操作(add, remove, set)5. 容量操作(clear, contains, isEmpty, size)6. 其他操作(toArray, )7. 泛型操作 1.容器介绍 1.1 容器接口结构 a. Java存储结构划分   Java…

通过使用动态ip解决网络连接问题

互联网的使用已经成为我们生活中不可或缺的一种生活方式。但是&#xff0c;有时候我们会遇到网络连接问题&#xff0c;如IP地址冲突、网络瘫痪等等。这种情况往往会影响我们的工作&#xff0c;现在我们一般使用动态ip地址来解决这些问题。 一、什么是动态ip地址 动态IP地址是由…

小白也可以做智慧大屏?我来帮你踩踩坑!【华为云Astro低代码体验季】

前提 进入华为云官网进行操作&#xff1a;https://www.huaweicloud.com/ Astro的便捷 其内部丰富的组件&#xff0c;简洁的操作&#xff0c;可支持独立空间管理&#xff0c;让人可以在短时间内就完成非常炫酷以及功能完善的页面 进入编辑页面后&#xff0c;可通过选择左侧的…

GPIO(嵌入式学习)

GPIO知识学习 1. GPIO的基本概念2. GPIO的实际应用3. 功能描述3.1 IO结构框图3.2 知识铺垫模拟/数字信号VDD、VSS、VCC施密特触发器片上外设 3.3 功能详述浮空输入上拉输入下拉输入模拟输入开漏输出推挽输出 4. GPIO相关寄存器4.1 寄存器4.2 功能 1. GPIO的基本概念 GPIO是英文…

java面经1

String, StringBuffer, StringBuilder区别 第一点是可变性。String不可变&#xff0c;String Buffer和StringBuider可变。这是因为String被final修饰&#xff0c;每次操作都生成新的对象。StringBuffer和StringBuilder的父类AbstractStringBuilder没有被final修饰。 第二点是…

视频点播系统

服务端功能模块划分 数据管理模块&#xff1a;负责针对客户端上传的视频信息进行管理。 网络通信模块&#xff1a;搭建网络通信服务器&#xff0c;实现与客户端通信。 业务处理模块&#xff1a;针对客户端的各个请求进行对应业务处理并响应结果。 前端界面模块&#xff1a;…

openEuler 开源汇智赢未来|2023开放原子全球开源峰会OpenAtom openEuler 论坛成功召开

6 月 12 日&#xff0c;2023 开放原子全球开源峰会 OpenAtom openEuler 分论坛在北京成功召开。分论坛以“openEuler 汇众智&#xff0c;奔涌向前赢未来”为主题&#xff0c;展示了 openEuler 社区的最新成果&#xff0c;阐述了 openEuler 开源开放的发展模式&#xff0c;介绍了…

jmeter模拟多用户并发

目录 前言&#xff1a; 一、100个真实的用户 二、100个用户同时登录 前言&#xff1a; JMeter可以轻松地模拟多用户并发&#xff0c;从而测试Web应用程序的性能和稳定性。 一、100个真实的用户 1、一个账号模拟100虚拟用户同时登录和100账号同时登录 区别 &#xff08;…

如何使用Github搭建个人博客

介绍 在本文中&#xff0c;我将介绍如何使用GitHub搭建个人博客&#xff08;免费&#xff09;。GitHub是一个功能强大的版本控制和协作平台&#xff0c;它也可以用来托管和发布静态网页。通过将你的个人博客托管在GitHub上&#xff0c;你可以享受到版本控制的好处&#xff0c;…

STL之stack和queue

目录 stack和queue模拟实现一.介绍1.stack的类模板2.queue的类模板3.容器适配器 二. deque类1. 简介2.常用成员函数 三. stack模拟实现1.成员函数2.代码 四.queue的模拟实现1.成员函数2.代码 五.小结1.容器适配器 stack和queue模拟实现 一.介绍 1.stack的类模板 LIFO&#xf…

剖析Linux文件系统

Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数&#xff0c;Linux 可以在许多种存储设备上支持许多种文件系统。例如&#xff0c;read 函数调用可以从指定的文件描述符读取一定数量的字节。read 函数不了解文件系统的类型&#xff…

外包,以后再也不去了....

先说一下自己的个人情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近3年的点点点&#xff0c;后来我面了几家公司都没面上&#xff0c;最后把我想去外包混几个月的想法和我在腾讯的老哥讲了&#xff0c;他说外包&#xff0c;狗都不去&am…