【Dubbo】利用Jmeter对Dubbo接口进行压力测试
2016-12-20 09:48
525 查看
Dubbo接口压力测试
2017-03-30更新:忘记了之前有个问题没有在blog里面跟大家说,由于Dubbo工程师引入了Spring相关的jar包了,但是Jmeter默认也是自带了spring-core-2.5.6.jar包的(在lib目录下),所以当我们将测试jar放到jmeter对应目录下,重启jmeter的时候回报spring的jar包冲突,所以在利用就jmeter做Dubbo接口测试的时候,我们需要将Jmeter自带的spring-core-2.5.6.jar包去掉。
一、简介
1、 需要环境工具:
需要环境:Jdk1.7、Maven;
开发工具:intellij idea(也可自行选择eclipse);
测试工具:Jmeter3.0;
2、 Dubbo接口压力测试:
编写dubbo接口测试代码调用dubbo服务,利用jmeter运行测试代码,进行压力测试
3、 Jmeter测试java接口:http://jmeter.apache.org/api/org/apache/jmeter/protocol/java/sampler/AbstractJavaSamplerClient.html
4、 代码下载地址:
二、编写dubbo测试代码
1、 新建dubbo接口测试工程(建议一个dubbo服务工程对应一个dubbo接口测试工程,这样方便代码的管理)
1) .打开file -> new-> Project -> maven -> next, 新建maven工程
2) .填写groupId、artifactId、version
GroupId:项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。
ArtifactId:就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
Version:版本号。
3) 填写project name
2、 配置pom.xml文件,注意:maven一定要配置成你本地的
1) 配置需要测试的dubbo服务
2) 配置需要的一些工具jar包(dubbo工程会有,可参考父工程pom.xml文件)。篇幅所致,此处只截图展示部分。
3) 配置Jmeter相关的jar包,使用的是ApacheJMeter_java,版本号此处使用2.13,可自行在jmeter官网查看版本号,根据需要配置。
4) 配置build相关(打包需要),建议就使用如下配置,不要做其他更改,使用其他配置,可能导致产生一些无法预知的问题。
3、 Dubbo配置
1) 编写dubbo消费端配置文件
Resources文件夹下面新建dubbo-client.xml
<dubbo:registry > : dubbo服务注册配置
<dubbo:application> : dubbo应用名称
<dubbo:reference> : 生成远程服务代理,可以像使用本地bean一样使用远程服务。
<dubbo:consumer> : 消费端的一些缺省配置。
2) Dubbo初始化工具类编写DubboInit。
1) 新建util包,新建DubboInit类,代码如下
3) 编写测试代码(此处建议现行编写Junit测试代码,测试通过之后,再编写jmeter所需的测试代码)
1) 编写junit测试代码
在test/java中新建package:directRegisterInfoService(根据自己喜好命名即可,我的喜好是测试一个服务接口就新建一个包,因为一个服务里面有很多方法,我们测试这些方法的时候,会针对每一个方法写一个测试类)
此处用例为测试取号列表(queryTakeRegNo),新建TqueryTakeRegNo类,编写测试代码如下:
2) 启用debug调试,确认junit测试是否通过。(此处不做详解)
3) Junit测试通过之后,编写jmeter需要的测试代码。
Main/java新建directRegisterInfoService包,新建LqueryTakeRegNo测试类,该测试类需要extendsAbstractJavaSamplerClient,
主要实现setupTest():初始化操作
getDefaultParameters():设置默认的jmeter的Parameters
SetValues(JavaSamplerContextarg0):根据jmeter填写的参数设置变量值
runTest(JavaSamplerContextjavaSamplerContext):运行测试代码。teardownTest(JavaSamplerContext arg0):测试收尾操作。
用例代码如下(供参考):
4) 生成jar包:
Idea右侧->mavenproject->Lifecycle->package即可生成jar包(******service_dubbo_test-1.0-SNAPSHOT.jar)
Jar包位置如下:
三、Jmeter运行测试用例
1、 导入jar包
将******service_dubbo_test-1.0-SNAPSHOT.jar放到\apache-jmeter-3.0\lib\ext目录下。
2、 编写jmeter测试脚本
新建线程组->java请求(右键sampler选择java请求);
新建查看结果树(做性能测试的时候,选择)、聚合报告等组件。
类名称选择我们之前编写的测试类即可。
进行性能测试的时候,填写线程数、启动线程时间、循环次数等。
进行性能测试的时候,查看结果树务必勾选仅显示日志错误。
后面Jmeter运行用例,分析报告此文不做详解
2017-03-30更新:忘记了之前有个问题没有在blog里面跟大家说,由于Dubbo工程师引入了Spring相关的jar包了,但是Jmeter默认也是自带了spring-core-2.5.6.jar包的(在lib目录下),所以当我们将测试jar放到jmeter对应目录下,重启jmeter的时候回报spring的jar包冲突,所以在利用就jmeter做Dubbo接口测试的时候,我们需要将Jmeter自带的spring-core-2.5.6.jar包去掉。
一、简介
1、 需要环境工具:
需要环境:Jdk1.7、Maven;
开发工具:intellij idea(也可自行选择eclipse);
测试工具:Jmeter3.0;
2、 Dubbo接口压力测试:
编写dubbo接口测试代码调用dubbo服务,利用jmeter运行测试代码,进行压力测试
3、 Jmeter测试java接口:http://jmeter.apache.org/api/org/apache/jmeter/protocol/java/sampler/AbstractJavaSamplerClient.html
4、 代码下载地址:
二、编写dubbo测试代码
1、 新建dubbo接口测试工程(建议一个dubbo服务工程对应一个dubbo接口测试工程,这样方便代码的管理)
1) .打开file -> new-> Project -> maven -> next, 新建maven工程
2) .填写groupId、artifactId、version
GroupId:项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。
ArtifactId:就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
Version:版本号。
3) 填写project name
2、 配置pom.xml文件,注意:maven一定要配置成你本地的
1) 配置需要测试的dubbo服务
2) 配置需要的一些工具jar包(dubbo工程会有,可参考父工程pom.xml文件)。篇幅所致,此处只截图展示部分。
3) 配置Jmeter相关的jar包,使用的是ApacheJMeter_java,版本号此处使用2.13,可自行在jmeter官网查看版本号,根据需要配置。
4) 配置build相关(打包需要),建议就使用如下配置,不要做其他更改,使用其他配置,可能导致产生一些无法预知的问题。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.fxc.rpc.impl.member.MemberProvider</mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
3、 Dubbo配置
1) 编写dubbo消费端配置文件
Resources文件夹下面新建dubbo-client.xml
<dubbo:registry > : dubbo服务注册配置
<dubbo:application> : dubbo应用名称
<dubbo:reference> : 生成远程服务代理,可以像使用本地bean一样使用远程服务。
<dubbo:consumer> : 消费端的一些缺省配置。
2) Dubbo初始化工具类编写DubboInit。
1) 新建util包,新建DubboInit类,代码如下
package util; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Created by wangdingjin on 2016/9/2. */ public class DubboInit { private static DubboInit init = null; private DubboInit(){} private static ApplicationContext context; public synchronized static DubboInit getInstance(){ if(init == null){ init = new DubboInit(); } return init; } public static void initApplicationContext(){ context = new ClassPathXmlApplicationContext("classpath:/dubbo-client.xml"); if(context==null) { throw new IllegalArgumentException("Load dubbo-client.xml fail"); } } public Object getBean(String beanName) { return context.getBean(beanName); } }
3) 编写测试代码(此处建议现行编写Junit测试代码,测试通过之后,再编写jmeter所需的测试代码)
1) 编写junit测试代码
在test/java中新建package:directRegisterInfoService(根据自己喜好命名即可,我的喜好是测试一个服务接口就新建一个包,因为一个服务里面有很多方法,我们测试这些方法的时候,会针对每一个方法写一个测试类)
此处用例为测试取号列表(queryTakeRegNo),新建TqueryTakeRegNo类,编写测试代码如下:
package directRegisterInfoService; import com.saohuobang.web.platform.bjmedicalcard.po.DirectRegisterInfo; import com.saohuobang.web.platform.bjmedicalcard.service.DirectRegisterInfoInf; import org.joda.time.DateTime; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import util.DubboInit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by Administrator on 2016/9/2. */ public class TqueryTakeRegNo { /* *定义DirectRegisterInfoInf的变量 */ @Autowired private DirectRegisterInfoInf directRegisterInfoInf; /* *初始化directRegisterInfoService服务 */ @Before public void setupTest() { DubboInit init = DubboInit.getInstance(); init.initApplicationContext(); directRegisterInfoInf = (DirectRegisterInfoInf)init.getBean("directRegisterInfoService"); } /* *测试代码 */ @Test public void runTest() { List<DirectRegisterInfo> list = new ArrayList<DirectRegisterInfo>(); try { Map map = new HashMap(); map.put("dateTime", new DateTime().toString("yyyy-MM-dd 00:00:00"));// TODO // map.put("dateTime","2016-01-26 00:00:00"); map.put("hosCode", "T113411"); map.put("cardNo", "98000001004327"); list = directRegisterInfoInf.getTakeNoList(map); System.out.println("\n\n\n\n================"+list.get(0).getDeptname() + "==================\n\n\n\n"); } catch (Exception e) { e.printStackTrace(); } System.out.println(); System.out.println(); } }
2) 启用debug调试,确认junit测试是否通过。(此处不做详解)
3) Junit测试通过之后,编写jmeter需要的测试代码。
Main/java新建directRegisterInfoService包,新建LqueryTakeRegNo测试类,该测试类需要extendsAbstractJavaSamplerClient,
主要实现setupTest():初始化操作
getDefaultParameters():设置默认的jmeter的Parameters
SetValues(JavaSamplerContextarg0):根据jmeter填写的参数设置变量值
runTest(JavaSamplerContextjavaSamplerContext):运行测试代码。teardownTest(JavaSamplerContext arg0):测试收尾操作。
用例代码如下(供参考):
package directRegisterInfoService; import com.saohuobang.web.platform.bjmedicalcard.po.DirectRegisterInfo; import com.saohuobang.web.platform.bjmedicalcard.service.DirectRegisterInfoInf; 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.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import util.DubboInit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by Administrator on 2016/9/2. */ public class LqueryTakeRegNo extends AbstractJavaSamplerClient { //需要测试的接口 @Autowired private DirectRegisterInfoInf directRegisterInfoInf; private long start = 0;//记录测试开始时间; private long end = 0;//记录测试结束时间; private String hosCode = "T113411"; private String cardNo = "98000001004327"; //初始化操作 @Override public void setupTest(JavaSamplerContext arg0) { DubboInit init = DubboInit.getInstance(); init.initApplicationContext(); directRegisterInfoInf = (DirectRegisterInfoInf) init.getBean("directRegisterInfoService"); } /** * * 设置默认值 * * @return */ public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("hosCode", hosCode); params.addArgument("cardNo", cardNo); return params; } /** * 获取jmeter输入的参数值 * * @return */ public void setValues(JavaSamplerContext arg0) { hosCode = arg0.getParameter("hosCode",hosCode); cardNo = arg0.getParameter("cardNo",cardNo); } public SampleResult runTest(JavaSamplerContext javaSamplerContext) { SampleResult sr = new SampleResult(); setValues(javaSamplerContext); sr.sampleStart(); start = System.currentTimeMillis(); try { List<DirectRegisterInfo> list = new ArrayList<DirectRegisterInfo>(); Map map = new HashMap(); map.put("dateTime", new DateTime().toString("yyyy-MM-dd 00:00:00"));// TODO // map.put("dateTime","2016-01-26 00:00:00"); map.put("hosCode", hosCode); map.put("cardNo", cardNo); list = directRegisterInfoInf.getTakeNoList(map); if (list != null && list.size() != 0) { sr.setSuccessful(true); sr.setResponseData("医院:" + list.get(0).getHospname(), null); sr.setDataType(SampleResult.TEXT); } else { sr.setSuccessful(false); getLogger().error("LqueryTakeRegNo response is null"); } } catch (Exception e) { getLogger().error("LqueryTakeRegNo response error : " + e.getMessage()); sr.setSuccessful(false); } finally { sr.sampleEnd(); } return sr; } @Override public void teardownTest(JavaSamplerContext arg0) { end = System.currentTimeMillis(); getLogger().info(" cost time: " + (end - start) + "ms"); } }
4) 生成jar包:
Idea右侧->mavenproject->Lifecycle->package即可生成jar包(******service_dubbo_test-1.0-SNAPSHOT.jar)
Jar包位置如下:
三、Jmeter运行测试用例
1、 导入jar包
将******service_dubbo_test-1.0-SNAPSHOT.jar放到\apache-jmeter-3.0\lib\ext目录下。
2、 编写jmeter测试脚本
新建线程组->java请求(右键sampler选择java请求);
新建查看结果树(做性能测试的时候,选择)、聚合报告等组件。
类名称选择我们之前编写的测试类即可。
进行性能测试的时候,填写线程数、启动线程时间、循环次数等。
进行性能测试的时候,查看结果树务必勾选仅显示日志错误。
后面Jmeter运行用例,分析报告此文不做详解
相关文章推荐
- 利用jmeter+JAVA对RPC的单接口(dubbo接口等)进行性能测试,零基础(2)
- 利用jmeter+JAVA对RPC的单接口(dubbo接口等)进行性能测试
- 利用JMeter进行压力测试(1)
- 利用Jmeter进行压力测试的步骤
- 利用jmeter和jconsole进行压力测试
- jmeter发送soap请求进行webservice接口压力测试
- 利用JMeter进行压力测试(2)
- 利用JMeter的Java请求采样器进行rpc接口的性能测试
- 用Jmeter进行接口压力测试的步骤
- 利用JMeter进行压力测试(1)(转)
- 用jmeter进行接口压力测试的步骤
- 利用JMeter进行压力测试(3)
- 【自动化测试】利用Jmeter对Http接口的文件上传进行测试
- 利用JMeter的录制功能对Web网页进行压力测试
- 利用jmeter对mysql数据库进行压力测试
- JMeter对接口进行压力测试
- 利用Spring Insight + JMeter 对Web应用进行压力测试和性能评估
- JMeter对接口进行压力测试
- 使用jmeter进行接口压力测试的一个简单例子
- 【转】用Jmeter进行接口压力测试的步骤