【转】jmeter 进行java request测试
本周使用jmeter进行一个远程dubbo接口的性能测试,因为没有访问页面,本来开发可以写一个页面,进行http请求的调用,不过已经看到jmeter可以直接对java request进行测试,所以尝试了一下。
记录一下过程,写个demo进行下说明
1、测试脚本的编写
其实这个就是使用jmeter 自己的测试框架,写一个测试用例,实现对被测对象的调用,然后打包即可。
a、引入jmeter框架依赖
使用eclipse的时候,在工程上右键-》properties-》java build path
将jmeter/lib 下的包都进行引入。
b、新建一个测试class JavaTest
c、引入jmeter的框架
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;
d、编写用例
//新建的class必须继承"AbstractJavaSamplerClient"
public class JavaTest extends AbstractJavaSamplerClient {
//定义开始和截止的时间,可以在控制台打印出来时间,看响应情况
private static long start = 0;
private static long end = 0;
Param param;
IService<DataModel, Param> service;
//setup 开始
public void setupTest(JavaSamplerContext arg0) {
start = System.currentTimeMillis();
try {
//try中间是你进行调用的代码
} catch (Throwable e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
@Override
//jmeter的测试框架
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult results = new SampleResult();
try {
results.sampleStart();
//对上面方法的调用,jmeter会对sampleStart和sampleEnd之间的行为进行计时,作为响应时间
results.sampleEnd();
results.setSuccessful(true);
} catch (Throwable e) {
e.printStackTrace();
}
return results;
}
public void teardownTest(JavaSamplerContext arg0) {
end = System.currentTimeMillis();
//可以在调试的时候自己打印时间
System.err.println("cost time:" + (end - start) / 1000);
}
//在eclipse中自行进行调试,新建一个main函数来完成运行
public static void main(String[] args) {
JavaSamplerContext arg0 = new JavaSamplerContext(new Arguments());
PerformenceTest test = new JavaTest();
//这三步可以很清晰的看出框架执行的方式
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}
}
2、jmeter脚本编写
使用jmeter ui客户端,在线程组下添加一个java request,将之前编写的用例放到jmeter的 lib/ext 目录下面,这个时候就可以在类名称下拉菜单中,选择到自己写的用例了。
3、本地和远程调试
在本地调试的时候,将这个脚本依赖到的全部jar包都放到jmeter的 /lib 下面,只有自己实现的测试用例.jar 放到/lib/ext下面,这样jmeter的启动消耗会小一些;放到远程服务上进行压力的时候,和本地环境一样部署即可
写了一个demo,更直观一些
已给被测class为:
public class HelloWorld {
public static int sum = 0;
public static void sum(int a, int b) {
sum = a + b;
// System.out.println(sum);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloWorld a = new HelloWorld();
a.sum(1, 2);
}
}
测试上面这个class的性能,只需要实现一个用例,一直调用他,然后进行结果统计。测试case的实现:
package TestCase;
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 jmeter 的相关外部依赖
import TestCase.HelloWorld;
//import 被测对象
public class PerformenceTest extends AbstractJavaSamplerClient {
private static long start = 0;
private static long end = 0;
public void setupTest(JavaSamplerContext arg0) {
start = System.currentTimeMillis();//获取当前系统时间
// System.out.println(start);
}
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult sr = new SampleResult();
sr.sampleStart();// jmeter 开始统计响应时间标记
try {
HelloWorld test = new HelloWorld();
test.sum(1, 1);
//被测对象调用
} catch (Throwable e) {
sr.setSuccessful(false);
} finally {
sr.sampleEnd();//jmeter 结束统计响应时间标记
}
return sr;
}
public void teardownTest(JavaSamplerContext arg0) {
end = System.currentTimeMillis();
// System.out.println(end);
// System.out.println("The cost is"+(end-start)/1000);
}
//测试本地调试
public static void main(String[] args) {
// TODO Auto-generated method stub
JavaSamplerContext arg0 = new JavaSamplerContext(new Arguments());
PerformenceTest test = new PerformenceTest();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}
}
有了上面的case,打包将jar放到jmeter/lib/ext中,可以在新建的jmeter脚本中获取测试方法,然后配置并发和启动延时,就可以了
【转】jmeter 进行java request测试的更多相关文章
- jmeter之Java request报错:java.lang.NoClassDefFoundError: redis/clients/jedis/Jedis
今天在学习Jmeter的java request,请求内容是连接redis并获取其中的一个字段值.结果在运行时报如下错误: 2018/05/24 13:08:20 ERROR - jmeter.thr ...
- 转:JMeter进行Java 请求测试
本文转自:http://blog.csdn.net/xiazdong/article/details/7873767 向原作者致敬,看了他的文章才让我顺利解决了JMeter测试中的问题,万分感谢! 目 ...
- Jmeter 执行java脚本结束时提示:he JVM should have exitted but did not
使用jmeter执行java协议测试结束时会提示:he JVM should have exitted but did not ,jmeter2.11以后的可以 通过设置: jmeteren ...
- JMeter入门(4):Java Request实例
目的:对Java程序进行测试: 一.核心步骤 1.创建一个Java工程: 2.将JMeter的lib目录下的jar文件添加进此工程的Build Path: 3.创建一个类并实现JavaSamplerC ...
- Jmeter性能测试之进阶Java request的使用
在IDE中引用Jmeter的安装目录lib/ext中两个文件ApacheJMeter_core.jar和ApacheJMeter_java.jar Java request的类需要继承Abstract ...
- JMeter入门:Java Request实例 (转)
转自:http://blog.csdn.net/czp11210/article/details/26174969 目的:对Java程序进行测试: 一.核心步骤 1.创建一个Java工程: 2 ...
- JMeter 压测基础(四)——Java工程测试
JMeter Java工程测试 1.eclipse中新建工程 2.导入需要的jar包 从JMeter安装目录lib/ext中两个jar包buildPath到Java project中,分别是“Apac ...
- 自定义编写jmeter的Java测试代码
我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","JavaV ...
- JMETER通过java代码通过代码/ JMETER API实现示例进行负载测试
本教程试图解释Jmeter的基本设计,功能和用法,Jmeter是用于在应用程序上执行负载测试的优秀工具.通过使用jmeter GUI,我们可以根据我们的要求为请求创建测试样本并执行具有多个用户负载的样 ...
随机推荐
- log4.net
1 简介 1.1Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统 ...
- 【转】Android 防破解技术简介
http://www.cnblogs.com/likeandroid/p/4888808.html Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是 ...
- CSS选择器 使用小结
==> .x-boundlist-floating[style$="px;"] .x-boundlist-item 元素中含有Style属性,并且属性值以"px;& ...
- 编写一个JavaScript函数 parseQueryString,把URL参数解析为一个对象
var url="http://www.taobao.com/index.php?key0=0&key1=1&key2=2"; function parseQuer ...
- Javascript如何访问和处理系统文件
一.功能实现核心:FileSystemObject 对象 要在javascript中实现文件操作功能,主要就是依靠FileSystemobject对象. 二.FileSystemObject编程 使用 ...
- UVA 674 Coin Change (DP)
Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We want to make c ...
- iOS开发——多线程OC篇&(十一)多线程NSOperation高级用法
自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewC ...
- JAVA设置SimpleDateFormat函数时区
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZo ...
- HTTP/HTTPS自动加密上网方案
方案介绍 涉及到的软件 BIND: 一个流行的域名解析服务器,我们可以设置哪些域名需要走加密线路. Stunnel: 使用TLS对tcp协议进行加密,也就是对tcp建立一条加密线路. SNI Prox ...
- oracle中to_date() 与 to_char() 日期和字符串转换
to_date("要转换的字符串","转换的格式") 两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,& ...