Jmeter实现Dubbo接口测试

news/2024/11/24 9:48:13/

目录

前言:

一、准备

 二、编写我们的测试工程

三、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.ppmy.cn/news/384048.html

相关文章

GUT|IF30+的联合分析文章:宏基因加代谢组

● 代谢组学是基于LC-MS/MS液质联用技术对生物样本中的小分子代谢物进行定性和相对定量分析&#xff1b; ● 宏基因组-代谢组的联合分析可以用来解释差异菌群与差异代谢物的关联性&#xff1b; ● 从而帮助建立微生物-代谢物-表型之间的逻辑关系。 凌恩生物的宏基因组学引入了…

在实现高效解决3D非流体静力、湍流、不可压缩空气/水流问题中,探索RANS与多相RANS模块的深度应用:带您解锁CFD的强大功能

尊敬的读者&#xff0c;您好&#xff01;我非常感谢您的光临&#xff0c;希望您在阅读本篇文章的时候&#xff0c;可以获得一些有价值的信息。在此&#xff0c;我要谦虚地说&#xff0c;我不是一个专家&#xff0c;只是一个热爱研究和分享知识的学者。我期待从您那里得到反馈&a…

【CV大模型SAM(Segment-Anything)】如何一键分割图片中所有对象?并对不同分割对象进行保存?

之前的文章【CV大模型SAM&#xff08;Segment-Anything&#xff09;】真是太强大了&#xff0c;分割一切的SAM大模型使用方法:可通过不同的提示得到想要的分割目标,中详细介绍了大模型SAM&#xff08;Segment-Anything&#xff09;根据不同的提示方式得到不同的目标分割结果。 …

【通信原理实验】基于A律13折线的PCM编码与解码(附完整代码)

一、实验原理 PCM&#xff0c;Pulse Code Modulation&#xff08;脉冲编码调制&#xff09;&#xff0c;即把从模拟信号抽样、量化、编码成为二迚制符号的基本过程&#xff0c; 称为脉冲编码调制。 模拟信号的数字化过程&#xff1a; 1、抽样 – 时间离散&#xff1a;时间连续…

DLNA(明基的返校讲座)

数位家庭技术的两大标准 DLNA是目前产业界最大的标准&#xff0c;DLNA建议采用UPnP这个业界标准。 UPnP世界有七、八百家公司加入&#xff0c;在DLNA这一块有将近快三百家厂商加入&#xff0c;几乎市面上看的到的品牌都有加入这两大协会。这两个是非常显眼的工业标准&#xff0…

[转帖]从光刻机的发展,看懂ASML为何是不可取替

从光刻机的发展&#xff0c;看懂ASML为何是不可取替 http://mini.eastday.com/mobile/171230223351249.html# 2017-12-30 22:33 来源&#xff1a;半导体行业观察 阿斯麦(ASML.O)是全球最大的半导体光刻机设备及服务提供商&#xff0c;在细分领域具备垄断地位。总部位于荷兰费…

蓝牙基本介绍及相关应用

蓝牙(BlueTooth)技术详解 沸沸扬扬的数字和信息的世界不断有活力的注入&#xff0c;而BlueTooth为语音、文字及影像的无线传输大开方便之门&#xff0c;瞬间便带来了移动通讯的新视野。即便BlueTooth仍旧有许多细节亟待解决,但当BlueTooth技术较为完善的那一天&#xff0c;无…

为什么我抓不到baidu的数据包

最近&#xff0c;有位读者问起一个奇怪的事情&#xff0c;他说他想抓一个baidu.com的数据包&#xff0c;体验下看包的乐趣。 但却发现“抓不到”&#xff0c;这就有些奇怪了。 我来还原下他的操作步骤。 首先&#xff0c;通过ping命令&#xff0c;获得访问百度时会请求哪个I…