在某些场景下我们会发现Jmeter里面提供的各种Sample不能满足自己的需求,应为这个世界上的压力测试的逻辑本来就是千变万化的,所以这个时候我们如果自己实现一套测试逻辑,这个时候需要使用jmeter 的扩展性。下面我们通过一个简单的例子来看看如何开发这样的一个自定义Sample? 自定Sample的生命周期是怎样的?
package com.bijian.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; public class LifecycleJMeterSample extends AbstractJavaSamplerClient { @Override public Arguments getDefaultParameters() { System.out.println("Get Parameter name! [getDefaultParameters]"); return super.getDefaultParameters(); } @Override public void setupTest(JavaSamplerContext context) { System.out.println("[setupTest]"); super.setupTest(context); } @Override public void teardownTest(JavaSamplerContext context) { System.out.println("[teardownTest]"); super.teardownTest(context); } @Override public SampleResult runTest(JavaSamplerContext ctx) { SampleResult result = new SampleResult(); result.sampleStart(); System.out.println("[runTest]"); result.setSuccessful(true); result.sampleEnd(); return result; } }
其中AbstractJavaSamplerClient是从ApacheJmeter_Java.jar 中获得(为了工程不报错,我简单粗暴地把Jmeter-2.13\lib\ext下的所有jar包都拷贝到工程中)。编写的类文件打包JMeter_Java.jar, 把这个Jar放到Jmeter的解压目录下的lib/ext下,重新启动jmeter。
一次先加入线程组,和聚合报告两个组件,在聚合报告组件之前加入一个新的Sample(Java Sample ), 如图:
运行测试,可以看到控制台的输出。调整几次线程组的线程数目的控制,我们会发现我们的这个自定义类中的teardowntest 和 setupuptest方法都是正对线程组中的某一个线程来执行的,线程组中线程的调用数目其实就是指runtest方法的运行次数。
JMeter的配置文件可以下载附件《Java请求.zip》获得。
附:Jmeter的分布式测试(优缺点)
下面是分布式测试的使用方法,即使用一台机器控制多台机器给目标机器产生压力。由于Linux和Windows上的方法有些不一样,这里说下Linux下是怎么来配置的。
首先总控的机器我们叫master,产生压力的肉鸡我们叫JmeterServer,待我们测试的系统我们叫Target。
第一步:启动JmeterServer。我们可以找到Jmeter/bin 目录下的jmeter-server这个脚本,运行即可,当然如果你需要调整这个测试负载产生服务器的内存等性能参数的话,我们修改这个脚本jmeter中的内存参数。
第二步 : 修改Master机器上jmeter/bin目录下的jmeter.properties文件,修改remote_hosts=localhost:1099,localhost:2010这个为你自己的JmeterServer的实际IP,如果有多台可以用逗号分开。
第三步 : 启动master jmeter,运行测试脚本的时候选:运行 --> 远程运行 --> 选择IP 或者 运行所有远程。JmeterServer就会运行Master机器上设定的运行脚本了。
问题:我在实际使用中发现使用这种模式下的Jmeter在Master观测实际测试结果,发现TPS远远低于使用传统的一台Jmeter来测试所能达到的TPS,我感觉可能是由于Jmeter这种多机器协作中传递信息是使用RMI技术,可能这种技术本身还对Jmeter的性能产生了影响导致压力上去的很慢。该问题还没有得到完全认证,所以我现在如果在一台机器测试产生的压力不够的情况下我直接使用多台机器测把TPS加起来就是结果,比较傻,期待大侠指点迷津。
文章来源:http://blog.csdn.net/chenleixing/article/details/43418185/
相关推荐
kibana sample自己找的测试数据 kibana sample自己找的测试数据
一个关于WPF自定义开发的小例子 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#资料合辑二[C#桌面编程入门篇] http://download.csdn.net/album/detail/957 C#资料合辑一[C#入门篇] ...
VS2005 C++编写 很完整的如何修改添加winlogon安全桌面的DLL DEBUG建议两台电脑或者虚拟机形式! 主代码38MB传不了那么多分开传吧
openMVS_sample 算法所用的测试图片资源, 这个不太好找;GIT环境不太好,很难下载;放在这里,方便大家使用了;
利用TCP/IP开发的一个聊天程序,可用来作为学习Socket开发参考。
c#sample c#sample c#sample c#sample c#sample c#sample c#sample c#sample
sample-Ao测试暂停与恢复
精通软件性能测试与LoadRunner最佳实战sample
http://www.gladman.me.uk/ aes加密解密的测试例子,vs2012 project AesTestOnLibAesByCoderBrianGladman.zip
附件包含C语言实现的UDP广播sample代码 broadcast_receive.c broadcast_send.c。 供学习参考
kibana sample自己搭建k8s测试数据,搭建elk后使用的测试数据
AV_SAMPLE_FMT_FLTP转为AV_SAMPLE_FMT_S16P(ffmpeg),在使用ffmpeg解码aac的时候,如果使用avcodec_decode_audio4函数解码,那么解码出来的会是AV_SAMPLE_FMT_FLTP 格式的数据( float, 4bit , planar), 如果我们希望...
渗透测试报告范本PenTest Report Sample, Offensive Security 出品,值得拥有!
java 定义模板生成word,word转换pdf,dwr半反推测试,其中使用word转换pdf使用jacob时需要office2007(需要安装发布pdf或xps插件)以上版本,使用dwr半推时可以模拟两个不同浏览器使用servlet(Main)建立会话发送格式...
zemax sample
SampleTest:测试
sample_page:测试示例页面
sap sample sap sample sample sample sap sample sap sample sample samplesap sample sap sample sample sample sap sample sap sample sample samplevsap sample sap sample sample sample
IBM Cognos 8 SDK custom authentication JDBC provider Sample。 包含jar文件、java代码和表结构,可以在Java Provider中使用。 For Oracle Only。