背景:公司的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. js通过高德地图获取当前位置的经度纬度

    效果图如下: 已经获取到了经度纬度了 代码如下: <!doctype html> <html> <head> <meta charset="utf- ...

  2. file_get_contents函数偶尔报错的抑制显示

    $result = @file_get_contents($url);可以使用@进行抑制file_get_contents()的报错 @是为了抑制错误显示,让用户看不到,提升用户体验.注意:只是抑制错 ...

  3. FM算法(一):算法理论

    主要内容: 动机 FM算法模型 FM算法VS 其他算法   一.动机 在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接的交互作用,可能需要人工对特征进行交叉组合:非线性SVM可 ...

  4. Zabbix告警发送邮件时附带性能图

    脚本处理逻辑分析: 通过zabbix传递给脚本的message参数,筛选出报警信息的itemid; 通过itemid获取到图片并保存; 将报警信息和图片组装成html; 发送邮件. 后续脚本里面的处理 ...

  5. javascript数组去重 String字符串去掉两端空格 javascript Array二分法排序 比较 javascript 求和

    通过原形添加方法: ==================数组去重(对象去重法)======================= Array.prototype.unique=function(){ va ...

  6. Win7+keras+tensorflow使用YOLO-v3训练自己的数据集

    一.下载和测试模型 1. 下载YOLO-v3 git clone https://github.com/qqwweee/keras-yolo3.git 这是在Ubuntu里的命令,windows直接去 ...

  7. Python学习计划

    ---恢复内容开始--- Python学习计划   https://edu.csdn.net/topic/python2?utm_source=blog4   匠人之心,成就真正Python全栈工程师 ...

  8. python 用xlwt包把数据导出到excel表中

    def write_excel(): f = xlwt.Workbook() #创建工作簿 ''' 创建第一个sheet: sheet1 ''' sheet1 = f.add_sheet(u'shee ...

  9. C# SortedDictionary以及SortedList的浅谈

    msdn叙述:The SortedDictionary<TKey, TValue> generic class is a binary search tree with O(log n) ...

  10. 大数据集群ssh登录其他机器失败 RSA host key for zb03 has changed and you have requested strict checking. Host key verification failed.

    [hadoop@zb02 .ssh]$ scp authorized_keys hadoop@zb03:/home/hadoop/.ssh @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...