背景:公司的h5和APP都需要调用许多非http的服务,需要对服务的性能和自动化测试

工具:IDEA ,maven,Jmeter

参考文档:

第一步:创建一个maven项目,可自己百度,不多做描述,创建完成大概结构如下

第二步:配置相关文件

  1. 配置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>
  2. 配置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接口测试的更多相关文章

  1. 用阿里巴巴官方给Jmeter开发的Dubbo sampler取样器进行dubbo接口测试【图解剖析】

    自:https://blog.csdn.net/cyjs1988/article/details/84258046 [一]Dubbo sampler下载地址: 该插件支持jmeter 3.2及3.2以 ...

  2. 【Jmeter】- 使用 jmeter 进行 dubbo 接口测试

    大家都知道 dubbo 是一个优秀 rpc 框架,它一般(dubbox 除外)通过对外提供 tcp协议的接口进行外部调用.而我们日常使用的测试工具 jmeter 并不支持 dubbo 协议的请求.所以 ...

  3. Jmeter官方插件实现Dubbo接口测试

    目前主流的分布式框架有Dubbo和SpringCloud, SpringCloud是基于Http协议的分布式框架,Dubbo是基于RPC的分布式框架,Jmeter没有内置对Dubbo接口的支持,很难直 ...

  4. jmeter(二十四)dubbo接口测试

    最近工作中接到一个需求,需要对一个MQ消息队列进行性能测试,测试其消费能力,开发提供了一个dubbo服务来供我调用发送消息. 这篇博客,介绍下如何利用jmeter来测试dubbo接口,并进行性能测试. ...

  5. jmeter dubbo接口测试

    说在前面,测试熔断降级系统时,要求测试一下对应的dubbo接口性能 1.安装Jmeter 2.将dubbo依赖包下载好放在jmeter路径/lib/ext下, 3.打开jmeter,测试计划下新建线程 ...

  6. jmeter:dubbo接口测试

    最近工作中接到一个需求,需要对一个MQ消息队列进行性能测试,测试其消费能力,开发提供了一个dubbo服务来供我调用发送消息. 这篇博客,介绍下如何利用jmeter来测试dubbo接口,并进行性能测试. ...

  7. jmeter进行dubbo接口测试

    最近工作中接到一个需求,需要对一个MQ消息队列进行性能测试,测试其消费能力,开发提供了一个dubbo服务来供我调用发送消息. 这篇博客,介绍下如何利用jmeter来测试dubbo接口,并进行性能测试. ...

  8. JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置

    众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. ...

  9. JMeter学习2

    JMeter学习(四)参数化 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进行参数化 ...

随机推荐

  1. 商品规格笛卡尔积PHP

    <?php $color = array('red', 'green'); $size = array(39, 40, 41); $local = array('beijing', 'shang ...

  2. Jenkins的详细安装及使用--windows

    操作环境:Windows 一.环境准备 1 安装JDK 本文采用jdk-8u111-windows-x64.exe: 2 配置tomcat 本文采用tomcat8,无需安装,配置JAVA_HOME及J ...

  3. Angular路由——路由基础

    一.路由相关对象 Router和RouterLink作用一样,都是导航.Router是在Controller中用的,RouterLink是在模版中用到. 二.路由对象的位置 1.Routes对象 配置 ...

  4. python之验证码识别 特征向量提取和余弦相似性比较

    0.目录 1.参考2.没事画个流程图3.完整代码4.改进方向 1.参考 https://en.wikipedia.org/wiki/Cosine_similarity https://zh.wikip ...

  5. 前后台得到WEB应用的名称

    前台得到当前应用的名称: ${ pageContext.request.contextPath } 后台得到当前应用的名称: request.getServletContext().getContex ...

  6. JS浅谈原始值与引用值操作

    值的操作分为三大类:复制,传递,比较 一:复制 原始值 let a = 10; let b = a; 注释:2018-7-30 17:33:49 1 原始类型的值都是存放在栈内存当中,所以他们的赋值操 ...

  7. redis初步入门(1)

    一.redis是一款高性能NOSQL系列的非关系型的数据库,其是用C语言开发的一个开源高性能键值对(key-value)数据库. 二.redis的应用场景 1.缓存(数据查询.短连接.新闻内容.商品内 ...

  8. luogu P3952 时间复杂度 模拟

    题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<sta ...

  9. Android的BroadcastReceiver组件

    BroadcastReceiver的作用: BroadcastReceiver,是和Intent有很大关系的Android组件. Android中的 Intent 可以用来: 1. 在应用程序内部和应 ...

  10. S0.0 计算机如何看东西

    标签(空格分隔):数字图像处理 opencv 当我们用特定软件打开一张图片或者更改某些位图的格式为txt时,就会发现图像的本质不过就是一堆数据罢了. 采样 我们可以用相机采样到一幅二维图像,图像的分辨 ...