一、创建一个java工程
- 1、新建一个java Project
Java
- 2、在Eclipse下导入$\jmeter\lib\ext\下的所有jar包;
导入额外的5个jar包,在 $\jmeter\lib\ 下
还有被测的接口的jar包也要导入
- 创建class,将新建的类extends AbstractJavaSamplerClient 类
继承"getDefaultParameters","setupTest","runTest"和"teardownTest"四个方法:
public Arguments getDefaultParameters();设置可用参数及的默认值;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用;
private String getResponseData(ApplyResult rs):将返回进行json格式化
二、继承类AbstractJavaSamplerClient(代码示例为接口getApplyProcess)
- 1、getDefaultParameters: 获取默认参数以及参数值
(这里只有一个参数 certi_code,接口getApplyProcess 只有一个入参,如果多个入参,应全部都添加上)
- 2、setupTest: 测试方法运行之前的工作(初始化记录结果;从参数列表中获取对应变)
(如果是有多个入参,也应都添加)
- 3、runTest:运行测试方法(初始化记录结果,设定开始/结束记录时间,测试调用Service的主方法,测试成功与否的判断方法)
(1)配置获取:(setUrl提供的url,所在的系统地址而定;setInterface是接口的 实现类名)
(2)请求、返回记录:(setSamplerData为请求数据,getResponseData为返回数据)
- 4、teardownTest 固定写法
- 5、返回进行json的格式化
三、导出jar
- 右键点击项目:Export… 直接导出为 jar包就可以
- export后的jar包放在$/jmeter/lib/ext/下($/jmeter为jmeter的安装路径)
四、运行java请求
1、在$\jmeter\bin\下执行jmeter.bat
2、右键点击“测试计划”添加一个Thread Group(线程组)
3、右键点击线程组,添加一个Java Request费用状态查询
五、接口getApplyProcess示例java文件
java文件放在了“文件”页签
备注:JsonFormatTool.java为json格式转换代码
package salesLoad;
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 com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.utils.ReferenceConfigCache;
import com.google.gson.Gson;
import com.ulic.agent.ws.enter.FreshManEnterInterface;
import com.ulic.agent.ws.enter.model.ApplyResult;
import com.ulic.im.client.vo.AppInfo;
public class GetApplyProcess extends AbstractJavaSamplerClient{
private FreshManEnterInterface enterService;
private ReferenceConfig<FreshManEnterInterface> reference;
private ReferenceConfigCache cache;
private String certiCode;
// 这个方法是用来自定义java方法入参的。
// params.addArgument("num1","");表示入参名字叫num1,默认值为空。
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("certi_code", "");
return params;
}
//每个线程测试前执行一次,做一些初始化工作;
public void setupTest(JavaSamplerContext arg0) {
certiCode = arg0.getParameter("certi_code");
}
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
setupTest(arg0);
reference = new ReferenceConfig<FreshManEnterInterface>();
reference.setApplication(new ApplicationConfig("letmetest"));
reference.setTimeout(300000);
reference.setUrl("dubbo://10.10.1.11:20881");
reference.setInterface("com.mims.agent.ws.enter.FreshManEnterInterface");
cache = ReferenceConfigCache.getCache();
enterService = cache.get(reference);
AppInfo app = new AppInfo();
app.setAppCode("MAP");
app.setAppIP("10.51.4.9");
ApplyResult rs = null;
SampleResult sr = new SampleResult();
try {
sr.sampleStart();
sr.setSamplerData("请求参数certi_code:"+certiCode);
rs = enterService.getApplyProcess(app, certiCode);
sr.setResponseData(getResponseData(rs), null);
sr.setDataType(SampleResult.TEXT);
sr.setResponseCode("0000");
Thread.sleep(10);
sr.setSuccessful(true);
}catch(Exception e){
e.printStackTrace();
sr.setResponseCode("0001");
sr.setSuccessful(false);
}finally{
sr.sampleEnd();
}
return sr;
}
private String getResponseData(ApplyResult rs) {
Gson gson = new Gson();
String s = gson.toJson(rs, ApplyResult.class);
JsonFormatTool jft = new JsonFormatTool();
return jft.formatJson(s);
}
public void teardownTest(JavaSamplerContext arg0){
super.teardownTest(arg0);
}
}
1 package com.ulic.loadtest.esales;
2
3 import java.math.BigDecimal;
4
5 import org.apache.jmeter.config.Arguments;
6 import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
7 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
8 import org.apache.jmeter.samplers.SampleResult;
9
10 import com.alibaba.dubbo.config.ApplicationConfig;
11 import com.alibaba.dubbo.config.ReferenceConfig;
12 import com.alibaba.dubbo.config.utils.ReferenceConfigCache;
13 import com.ulic.esales.ws.EsalesServiceInterface;
14 import com.ulic.esales.ws.vo.AoPolicyProductVO;
15 import com.ulic.im.client.vo.AppInfo;
16 import com.ulic.loadtest.util.JsonFormatTool;
17
18 public class CheckAoProductRule extends AbstractJavaSamplerClient {
19
20 private EsalesServiceInterface esalesService;
21 private ReferenceConfig<EsalesServiceInterface> reference;
22 private ReferenceConfigCache cache;
23
24 private AoPolicyProductVO vo;
25
26 // 这个方法是用来自定义java方法入参的。
27 // params.addArgument("num1","");表示入参名字叫num1,默认值为空。
28 public Arguments getDefaultParameters() {
29 Arguments params = new Arguments();
30 params.addArgument("item_id", "0");
31 params.addArgument("policy_id", "0");
32 params.addArgument("product_id", "0");
33 params.addArgument("product_num", "");
34 params.addArgument("master_id", "0");
35 params.addArgument("main_rider", "");
36 params.addArgument("amount", "0");
37 params.addArgument("period_prem", "0");
38 params.addArgument("unit", "0");
39 params.addArgument("relation_1", "0");
40 params.addArgument("insurant_1", "0");
41 params.addArgument("age_1", "0");
42 params.addArgument("bonus_choice", "0");
43 params.addArgument("charge_period", "");
44 params.addArgument("charge_year", "0");
45 params.addArgument("coverage_period", "");
46 params.addArgument("coverage_year", "0");
47 params.addArgument("pay_year", "0");
48 params.addArgument("insert_id", "0");
49 return params;
50 }
51
52 @Override
53 public SampleResult runTest(JavaSamplerContext arg0) {
54 vo = new AoPolicyProductVO();
55 vo.setItemId(Long.parseLong(arg0.getParameter("item_id")));
56 vo.setPolicyId(Long.parseLong(arg0.getParameter("policy_id")));
57 vo.setProductId(Long.parseLong(arg0.getParameter("product_id")));
58 vo.setProductNum(arg0.getParameter("product_num"));
59 vo.setMasterId(Long.parseLong(arg0.getParameter("master_id")));
60 vo.setMainRider(arg0.getParameter("main_rider"));
61 vo.setAmount(new BigDecimal(Float.parseFloat(arg0.getParameter("amount"))));
62 vo.setPeriodPrem(new BigDecimal(Float.parseFloat(arg0.getParameter("period_prem"))));
63 vo.setUnit(new BigDecimal(arg0.getParameter("unit")));
64 vo.setRelation1(Long.parseLong(arg0.getParameter("relation_1")));
65 vo.setInsurant1(Long.parseLong(arg0.getParameter("insurant_1")));
66 vo.setAge1(Long.parseLong(arg0.getParameter("age_1")));
67 vo.setBonusChoice(Long.parseLong(arg0.getParameter("bonus_choice")));
68 vo.setChargePeriod(arg0.getParameter("charge_period"));
69 vo.setChargeYear(Long.parseLong(arg0.getParameter("charge_year")));
70 vo.setCoveragePeriod(arg0.getParameter("coverage_period"));
71 vo.setCoverageYear(Long.parseLong(arg0.getParameter("coverage_year")));
72 vo.setPayYear(Long.parseLong(arg0.getParameter("pay_year")));
73 vo.setInsertId(Long.parseLong(arg0.getParameter("insert_id")));
74
75 reference = new ReferenceConfig<EsalesServiceInterface>();
76 reference.setApplication(new ApplicationConfig("letmetest"));
77 reference.setTimeout(300000);
78 reference.setUrl("dubbo://10.181.3.16:21889");
79 //reference.setRegistry(registry);
80 reference.setInterface("com.ulic.esales.ws.EsalesServiceInterface");
81 cache = ReferenceConfigCache.getCache();
82 esalesService = cache.get(reference);
83 //moaQueryService = reference.get();
84
85 AppInfo app = new AppInfo();
86 app.setAppCode("ESALES");
87 app.setAppIP("10.51.40.4");
88 String rs = null;
89
90 SampleResult sr = new SampleResult();
91 try {
92 sr.sampleStart();
93
94 rs = esalesService.checkAoProductRule(app, vo);
95
96 sr.setResponseData(getResponseData(rs), null);
97 sr.setDataType(SampleResult.TEXT);
98 sr.setResponseCode("0000");
99
100 Thread.sleep(10);
101 sr.setSuccessful(true);
102 }catch(Exception e){
103 e.printStackTrace();
104 sr.setResponseCode("0001");
105 sr.setSuccessful(false);
106 }finally{
107 sr.sampleEnd();
108 }
109 return sr;
110 }
111
112 private String getResponseData(String rs) {
113 JsonFormatTool jft = new JsonFormatTool();
114
115 return jft.formatJson(rs);
116 }
117
118 //每个线程测试前执行一次,做一些初始化工作;
119 public void setupTest(JavaSamplerContext arg0) {
120 super.setupTest(arg0);
121 }
122
123 //每个线程测试结束后执行一次
124 public void teardownTest(JavaSamplerContext arg0){
125 super.teardownTest(arg0);
126 }
127
128 }