Jmeter之JAVA Request的应用
当我们使用Jmeter进行接口测试的时候,我们一定会遇到一个问题,那就是如果这些接口不是http协议的,是经过封装以后的接口,用Jmeter该怎么解决呢?
当你想到这个问题,说明你已经了解Jmeter的一些初级应用了,接下来的应用就涉及一些编程能力了,首先我们知道Jmter是纯JAVA开发的工具,也就是说只要你能通过JAVA代码实现的接口请求,在Jmeter中都可以实现,比如JAVA Request,接下来将介绍一些JAVA Request的使用,这次使用的接口是我上次使用的HTTPS请求接口。如果嫌这样麻烦可以找其他实例中的接口,我这里为了方便,并且是有目的性的,实践遇到过坑,所以就这么用了。
1,首先创建一个JAVA工程,这个就不仔细说了。
2,将Jmter的lib目录下的jar文件添加进此工程的Build Path,主要是为了接下来我们要集成Jmeter中的抽象类,所以相当于引用jar包,具体哪几个是必须要引用的还是不太清楚,所以就干脆全引用了。
3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写:
1)public Arguments getDefaultParameters():设置可用参数及的默认值;
2)public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
3)public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
4)public void teardownTest(JavaSamplerContext arg0):测试结束时调用;
4.Export为Runnable Jar File;
5.将此jar包放入JMETER_HOME\lib\ext目录;
6.以管理员身份打开JMeter;
7.创建线程组、Java Request、结果树,进行测试;
好了,接下来就上实例
一个是我写好的接口,另一个是JAVA Request类,
这里主要讲JAVA Request的应用,那个类参考我的HTTPS POST JSON的JAVA实现
package https;
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 https.PostJson;
import java.net.MalformedURLException;
public class JavaTest extends AbstractJavaSamplerClient {
private PostJson postjson = null;
private String url;
private String charset;
private String content;
private static long start;
private static long end;
private String resultData;
@Override
public Arguments getDefaultParameters(){
Arguments params = new Arguments();
params.addArgument("url", "0");
params.addArgument("charset", "0");
return params;
}
@Override
public void setupTest(JavaSamplerContext arg0){
postjson = new PostJson();
url = arg0.getParameter("url");
charset = arg0.getParameter("charset");
start = System.currentTimeMillis();
}
@Override
public SampleResult runTest(JavaSamplerContext arg0){
SampleResult sr = new SampleResult();
sr.setSamplerData("请求地址"+url+"编码格式"+charset);
try {
sr.sampleStart();// jmeter 开始统计响应时间标记
String str = new String(postjson.post(url, charset).getBytes(),"UTF-8");
resultData = str;
if (resultData != null && resultData.length() > 0) {
sr.setResponseData("结果是:"+resultData, null);
sr.setDataType(SampleResult.TEXT);
}
Thread.sleep(10);
System.out.println(resultData);
sr.setSuccessful(true);
} catch (Throwable e) {
sr.setSuccessful(false);
e.printStackTrace();
} finally {
sr.sampleEnd();// jmeter 结束统计响应时间标记
}
return sr;
}
@Override
public void teardownTest(JavaSamplerContext arg0) {
end = System.currentTimeMillis();
// 总体耗时
System.err.println("cost time:" + (end - start) + "毫秒");
}
public static void main(String[] args) {
Arguments params = new Arguments();
/*Arguments params = new Arguments();
params.addArgument("url", "https://bapi.txffp.com/api/service/fpkk");
params.addArgument("charset", "UTF-9");
*/
// JavaSamplerContext arg0 = new JavaSamplerContext(params);
JavaTest test = new JavaTest();
// test.getDefaultParameters();
JavaSamplerContext arg0 = new JavaSamplerContext(test.getDefaultParameters());
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}
}
重写的第一个方法getDefaultParameters,这里是我们请求这个接口是的一些参数,我这里传了URL和CHARSET,为什么不传报文后边会说,这个方法的主要作用就是,
当我们在Jmeter中未传递这个接口的参数时,它做的默认处理,直接写在这里,这样当我们不传参数的时候就自动填写了。
重写的第二个方法setupTest,这里是我们在每个线程执行任务的时候进行的一些初始化工作,将我们已经初始化好的参数作为形参传入第二个函数中,然后通过arg0.getParameter
的方法获得参数
重写的第三个方法runTest,在这个方法里面主要是设置请求报文,并添加测试结果,通过程序进行判断请求成功或者失败,相当于断言。
重写的第四个方法tearDownTest,主要是请求结束后需要我们做的一些事情,我这里记录了请求结束的时间,用来计算请求耗时
在运行时我们既可以通过添加主函数运行也可以通过Jmeter运行,但是我这里试了两种方法,1,在主函数中自己构建参数,2,直接引用getDefaultParameters,这里遇到的问题就是
即使,你自己构建了参数,在Jmeter运行时依然显示默认构造的参数,而且运行时也是传的默认构造的参数,也就是说自己构建的参数没有生效,但是如果通过eclipse运行,那么他取得
参数就是你自己构建的。这个也是自己第一天没写完的原因,当时写到这里心生疑惑,后来看了一下官方api便试了一下,所以大家还是要多动手。
Jmeter之JAVA Request的应用相关推荐
- java jmeter_使用Jmeter中的Java Request进行性能测试
在使用jmeter进行性能测试的时候,有可能会需要通过一些脚本去测试性能,(比如通过sokeeper的api去测试sokeeper的读写性能).这时,我们可以通过Java Request实现,以下是操 ...
- jmeter测试java接口测试_简单易学的测试攻略:JMeter测试Java请求示例
JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现,大家可以到官网下载源代码和查看相关文档. 关于使用JMeter进行JDBC数据库测试.HTTP请求接 ...
- Jmeter之HTTP Request Defaults
Jmeter之HTTP Request Defaults 一.HTTP Request Defaults的作用: 该组件可以为我们的http请求设置默认的值.假如,我们创建一个测试计划有很多个请求且都 ...
- 【转】JMeter学习(十七)JMeter测试Java
目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带java Request Sampler 一.核心步骤 1.创建一个Java工程: ...
- jmeter里看java的log,jmeter中java协议请求
5.Export为Runnable Jar File:hello.jar 注意:不需要将整个工程导出,只需要选中包名(test)在file菜单中点击export->选java项的jar file ...
- 使用JMeter的Java Sampler轻松定制自己的benchmark
做性能测试,接口测试,非常好 转自 http://www.iteye.com/topic/1123432 以前碰到更多的是WEB APP的性能测试,也许用得最多的是Loadrunner, Web S ...
- jmeter的java请求(socket接口)
socket简介:网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流 ...
- 使用jmeter测试java程序
最近在用jmeter进行性能测试,防止被忘记,把步骤写下. 场景:测试java程序 1.右击测试计划-> 添加 -> Threads(Users) -> 线程组 2.设置线程属性,用 ...
- jmeter测试java代码
有时候总是要写代码的,不得不说你也得会,这不往下看 java请求了,就的写代码,那么先来实现一个类, package com.company.jemeters;public class Hello { ...
最新文章
- 将图片的二进制字节 在HTML页面中显示
- 胶囊网络(Capsule)实战——keras算法练习
- python numba库是什么,如何给python代码加速?JIT、autoit、LLVM
- Vue本地执行build之后打开dist目录下index.html正常访问
- mysql1064 at line 6,MySQL错误1064语法,但一切似乎都很好
- Java内存原型分析:基本知识
- 《C语言深度解剖》中的.c/.h 程序模板及函数注释风格
- Android 系统(146)----Android进程保活招数概览
- vue仿今日头条_字节跳动今日头条前端面经(4轮技术面+hr面)
- Windows 7 SP1意味着XP降级的结束
- 苹果或弃用Java 称Java已经过时
- 3.11 同时创建多个工作表的表头 [原创Excel教程]
- 恢复数据的原理和方法
- EBS之JTF_Grid 开发总结
- opencv答题卡识别
- win10创建新的计算机用户名和密码,win10如何新建一个账号用户
- k8s部署EFK实现日志管理(mac desktop)
- 手机查看html代码工具栏,【Meta标签】实现wap网页去掉手机浏览器默认工具栏
- iperf工具的安装和使用
- window系统 node.js安装 (node-v14安装配置、node-v16及其他版本安装配置)
热门文章
- c++利用飞信API免费发短信
- 算法与程序设计(二):递归
- 仿真器+编程器+实验板与开发板的区别
- 新媒体管家插件永久停服了
- session与token的区别
- java deep clone util_实现对象深度克隆(deepClone)的三种方案
- 找到一个TRACE32-ICD使用说明解除了不少疑惑
- 关于注册页面上传头像并在后台处理数据
- 有趣的Python图片制作,用QQ好友头像拼接出里昂
- 信息安全web服务器安全配置,web服务器的安全设置与管理实验(11页)-原创力文档...