jmeter取样器javaRequest脚本8
1,创建一个maven工程
在pom.xml文件中添加
maven下载地址:https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_java/5.4.1
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_java -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_core -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.4.1</version>
</dependency>
</dependencies>
新建一个类继承jmeter的AbstractJavaSamplerClient父类,继承后重新父类中的方法
类名 | 方法名 | 说明 |
---|---|---|
Arguments params = new Arguments(); | params.addArgument("Sleep_Time","100"); | 添加到参数的key和value,这个参数添加后在java request的参数中显示 |
JMeterVariables jmeterVar = javaSamplerContext.getJMeterVariables(); | jmeterVar.get("username") | 获取jmeter全局变量中的值,比如获取界面上用户自定义变量配置元件中的变量值,csv导入数据的变量等,通过变量名获取 |
SampleResult sampleResult = new SampleResult(); | sampleResult.sampleStart(); | 在请求开始之前记录一下开始时间,然后在请求结束后在记录结束时间sampleResult.sampleEndt();,就能统计出每次请求所需的时间 |
sampleResult.setSuccessful(true或者false); | 记录请求的结果为成功或失败为true则记录成功,为false则记录为失败 | |
sampleResult.sampleEnd(); | 在请求开始之前记录一下开始时间,然后在请求结束后在记录结束时间sampleResult.sampleEndt();,就能统计出每次请求所需的时间 | |
sampleResult.setResponseData("".getBytes()); | 获取每次请求返回的结果 |
获取java request取样器中的参数列表,不继承父类的话参数列表就是空的,定义后,添加对应的参数名和参数值,就会显示到参数列表
//父类的方法,可以不继承
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("Sleep_Time","100");
return params;
}
这两个方法是继承父类中的用例执行之前的方法和用例执行之后清理数据的方法
@Override
public void setupTest(JavaSamplerContext context) {
System.out.println("用例开始数据生成");
}
@Override
public void teardownTest(JavaSamplerContext context) {
System.out.println("测试结束清理数据");
}
继承父类中的runTest方法
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
//从jmeter全局变量中获取值,获取界面上用户自定义变量配置元件中的变量值,通过变量名获取
JMeterVariables jmeterVar = javaSamplerContext.getJMeterVariables();
String username = jmeterVar.get("username");
String password = jmeterVar.get("password");
String hostname = jmeterVar.get("hostname");
String port = jmeterVar.get("port");
SampleResult sampleResult = new SampleResult();
sampleResult.sampleStart();
JHttpRequestSample.apiTest(hostname,port,username,password);
sampleResult.setResponseData("".getBytes());//获取每次请求返回的结果
String code ="200";
if (code == "200"){
sampleResult.setSuccessful(true);
}else {
sampleResult.setSuccessful(false);
}
sampleResult.sampleEnd();
return sampleResult;
}
public static void apiTest(String hostname, String port, String username, String password){
// 接口
String path1 = "/api/v1/user/login";
String loginUrl ="http://" + hostname + ":" + port + path1;
String data = "{\n" +
"\t\"authRequest\": {\n" +
"\t \"userName\": \"" + username + "\",\n" +
"\t \"password\": \"" + password + "\"\n" +
"\t}\n" +
"}";
String respData1 = HttpClient.sendPost(loginUrl, data);
System.out.println("返回的结过筛是:"+respData1);
}
可以通过main方法调试一下脚本是否正常
public static void main(String[] args) {
//实验代码
String hostname = "localhost";
String port = "9091";
String username = "user01";
String password = "pwd";
boolean result = JHttpRequestSample.menuRestfulAPITest(hostname, port, username, password);
System.out.println("最终结果:" + result);
}
2,通过maven编译打包生成一个jar包
生成的jar复制到对应jmeter的lib/ext目录下
3,重启jmeter,新建java request请求
新建java requst请求后,选择自定义的jar包,可以看出这里的两个参数数在getDefaultParameters方法添加进来的,这这里可以修改
4,开始执行脚本
在执行前,先进行1个并发进行调试一下如果没有报错,在进行多并发测试
如果报错在jmeter启用的控制台查看报错日志