Jmeter学习之--dubbo接口测试
背景:公司的h5和APP都需要调用许多非http的服务,需要对服务的性能和自动化测试
工具:IDEA ,maven,Jmeter
参考文档:
- https://testerhome.com/topics/10474
- https://testerhome.com/topics/9980
- https://blog.csdn.net/qq_34021712/article/details/78956600
第一步:创建一个maven项目,可自己百度,不多做描述,创建完成大概结构如下
第二步:配置相关文件
- 配置pom文件(配置完成后reimport即可)
<?xml version="1.0" encoding="UTF-8"?>
<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>JmeterDemo</groupId>
<artifactId>JmeterDemo</artifactId>
<version>1.0-SNAPSHOT</version> <properties>
<spring.version>3.2.4.RELEASE</spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <!--配置镜像,加快下载jar包的速度(这里配置公司的私服,根据公司不同配置)-->
<repositories>
<repository>
<id>public</id>
<name>Public Repositories</name>
<url>
http://nexus.guahao-inc.com/nexus/content/groups/public
</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>Public Repositories</name>
<url>
http://nexus.guahao-inc.com/nexus/content/groups/public
</url>
</pluginRepository>
</pluginRepositories>
<!--配置依赖包-->
<dependencies> <!--dubbo依赖包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency> <!--Jmeter需要的jar包,!!!注意,这里的版本号需要和使用的Jmeter的版本号一致,否则到jmeter上会报各种错-->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.0</version>
</dependency> <dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.0</version>
</dependency> <!--spring核心pom依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring AOP -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency> <!-- consult-service依赖包,即要测试的接口依赖-->
<dependency>
<groupId>com.greenline.consult</groupId>
<artifactId>greenline-consult-service-share</artifactId>
<version>2.3.94-SNAPSHOT</version>
</dependency>
</dependencies>
<!--打包需要的-->
<build>
<plugins>
<!--复制jar包插件,将使用到的jar包,复制到target/lib中-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin> <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-resource</id>
<phase>generate-resources</phase>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin> <plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>TestMain.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project> - 配置dubbo-config.xml文件(在resources文件夹下新建一个文件dubbo-config.xml,配置内容如下)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consult-service" /> <!-- 测试的dubbo服务的信息-->
<dubbo:reference id="consultOrderService"
interface="com.greenline.consult.hessian.share.consultorder.service.ConsultOrderService"
timeout="650000" url="dubbo://192.168.1.103:11006/consultOrder" />
</beans>
这里的http://code.alibabatech.com/schema/dubbo/dubbo.xsd" 已经停止服务了,会导致文件不能读取,需要从网上下载该文件,或者从dubbo-2.5.3.jar META-INF 目录下导出,然后设置一下引用本地资源,参考https://blog.csdn.net/qq_36654870/article/details/80603302dubbo.xsd
第三步:开始写代码,需要继承Jmeter的AbstractJavaSamplerClient 类,并实现runTest方法
TestQueryConsultOrderReplyList
import com.greenline.consult.hessian.share.consultorder.request.ConsultOrderReplyPageListReq;
import com.greenline.consult.hessian.share.consultorder.response.ConsultOrderReplyListResult;
import com.greenline.consult.hessian.share.consultorder.service.ConsultOrderService;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestQueryConsultOrderReplyList extends AbstractJavaSamplerClient{ private static final ApplicationContext context = new ClassPathXmlApplicationContext("dubbo-config.xml");
private static ConsultOrderService consultOrderService;
private static final Logger logger = LoggerFactory.getLogger(TestQueryConsultOrderReplyList.class); @Override
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("orderKey", "");
return params;
} /**
* 每个线程测试前执行一次,做一些初始化工作
* 获取输入的参数,赋值给变量
*
* @param arg0
*/
@Override
public void setupTest(JavaSamplerContext arg0) {
consultOrderService = (ConsultOrderService) context.getBean("consultOrderService");
} public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult sr = new SampleResult();
/*获取之前的请求参数*/
String orderKey = javaSamplerContext.getParameter("orderKey");
sr.setSamplerData("请求参数orderKey:" + orderKey); try {
// jmeter 开始统计响应时间标记
sr.sampleStart(); // 该类是dubbo接口需要的参数
ConsultOrderReplyPageListReq consultOrderReplyReq = new ConsultOrderReplyPageListReq();
consultOrderReplyReq.setOrderKey(orderKey); //该类是dubbo接口的返回
ConsultOrderReplyListResult response = consultOrderService.queryConsultOrderReplyList(consultOrderReplyReq);
System.out.println("响应结果: " + response); if (response != null && response.getResultCode().equals("0")) {
// 返回正确
sr.setSuccessful(true);
sr.setResponseData("code : " + response.getResultCode() + "message: " + response.getResultDesc(), "utf-8");
} else {
sr.setSuccessful(false);
}
// jmeter 结束统计响应时间标记
sr.sampleEnd(); } catch (Exception e) {
e.printStackTrace();
}
return sr;
} public void teardownTest(JavaSamplerContext arg0) {
logger.info("方法调用结束");
}
}
使用main方法调试,调试成功后再放入Jmeter中运行
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; public class TestMain {
public static void main(String[] args) {
Arguments params = new Arguments();
// 设置参数
params.addArgument("orderKey", "p90xb3z3gy181107090819856");
JavaSamplerContext arg0 = new JavaSamplerContext(params);
TestQueryConsultOrderReplyList test = new TestQueryConsultOrderReplyList();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}
}
调试过程遇到的报错及解决方案:
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
解决方法:在classpath下(即resources)添加log4j2.xml文件,内容如下,添加log4j2.xml 文件后运行成功
第四步:打jar包,然后在Jmeter下运行 ,
- 打jar包

- 打包完成在target目录下生成两个jar文件,将后缀为-jar-with-dependencies.jar的文件(即下图所示文件)复制到jmeter的 lib/ext路径下

- 运行Jmeter,输出接口的参数,即可运行
Jmeter学习之--dubbo接口测试的更多相关文章
- 用阿里巴巴官方给Jmeter开发的Dubbo sampler取样器进行dubbo接口测试【图解剖析】
自:https://blog.csdn.net/cyjs1988/article/details/84258046 [一]Dubbo sampler下载地址: 该插件支持jmeter 3.2及3.2以 ...
- 【Jmeter】- 使用 jmeter 进行 dubbo 接口测试
大家都知道 dubbo 是一个优秀 rpc 框架,它一般(dubbox 除外)通过对外提供 tcp协议的接口进行外部调用.而我们日常使用的测试工具 jmeter 并不支持 dubbo 协议的请求.所以 ...
- Jmeter官方插件实现Dubbo接口测试
目前主流的分布式框架有Dubbo和SpringCloud, SpringCloud是基于Http协议的分布式框架,Dubbo是基于RPC的分布式框架,Jmeter没有内置对Dubbo接口的支持,很难直 ...
- jmeter(二十四)dubbo接口测试
最近工作中接到一个需求,需要对一个MQ消息队列进行性能测试,测试其消费能力,开发提供了一个dubbo服务来供我调用发送消息. 这篇博客,介绍下如何利用jmeter来测试dubbo接口,并进行性能测试. ...
- jmeter dubbo接口测试
说在前面,测试熔断降级系统时,要求测试一下对应的dubbo接口性能 1.安装Jmeter 2.将dubbo依赖包下载好放在jmeter路径/lib/ext下, 3.打开jmeter,测试计划下新建线程 ...
- jmeter:dubbo接口测试
最近工作中接到一个需求,需要对一个MQ消息队列进行性能测试,测试其消费能力,开发提供了一个dubbo服务来供我调用发送消息. 这篇博客,介绍下如何利用jmeter来测试dubbo接口,并进行性能测试. ...
- jmeter进行dubbo接口测试
最近工作中接到一个需求,需要对一个MQ消息队列进行性能测试,测试其消费能力,开发提供了一个dubbo服务来供我调用发送消息. 这篇博客,介绍下如何利用jmeter来测试dubbo接口,并进行性能测试. ...
- JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置
众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. ...
- JMeter学习2
JMeter学习(四)参数化 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进行参数化 ...
随机推荐
- iOS -- Effective Objective-C 阅读笔记 (9)
// 将类的实现方法代码反三到便于管理的数个分类之中. // 类中经常容易填满各种方法, 而这些方法的代码则全部堆在一个巨大的实现文件中, 有时这么做事不合理的,因为即使通过重构把这个类 ...
- Razor---服务器端标记语言
Razor 是一种允许您向网页中嵌入基于服务器的代码(Visual Basic 和 C#)的标记语法<ul> @for (int i = 0; i < 10; i++) { < ...
- Windows Internals 笔记——进程的权限
1.大多数用户都用一个管理员账户来登录Windows,在Vista之前,这样的登录会创建一个安全令牌.每当有代码试图使用一个受保护的安全资源时,操作系统就会出示这个令牌.从包括Windows资源管理器 ...
- pip错误-failed to create process/fatal error in launcher
电脑同时装了python2和python3,并且都配置了环境变量 将python2的python.exe改成python2.exe,python3的python.exe没有改(主要用python2时则 ...
- centos7安装elasticsearch
[root@aaron tools]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zi ...
- matplotlib 3D数据-【老鱼学matplotlib】
直接上代码: import numpy as np import matplotlib.pyplot as plt # 导入显示3D的库 from mpl_toolkits.mplot3d impor ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-10项目各种全局帮助类
本文目录 1. 前沿2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装3.XmlHelper快速操作xml文档4.SerializationHe ...
- CodeForces 623E Transforming Sequence 动态规划 倍增 多项式 FFT 组合数学
原文链接http://www.cnblogs.com/zhouzhendong/p/8848990.html 题目传送门 - CodeForces 623E 题意 给定$n,k$. 让你构造序列$a( ...
- 这里主要展示在Win7下怎么用IIS发布局域网站
首先对IIS做一个简要的介绍: IIS(InternetInformationServices)互联网信息服务的简称.本质是一种Web(网页)服务组件,其中包含Web.FTP和SMTP三大服务器,分别 ...
- 《XXX重大技术需求征集系统》的可用性和可修改性战术分析
在网站的界面完整有效的呈现在最终用户面前前,其中经历的每一环节出现问题都会导致网站页面不可访问.原因如,如DNS被劫持.网站交换机失效,硬盘损坏,网卡松掉,机房停电等都可能导致网站不可用(网站故障)情 ...