在某些场景下我们会发现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/
相关推荐
5. **文件“obdnet_test”**:这个文件可能是测试代码、测试脚本或者是用于测试KW1281vw协议的工具。通过分析这个文件,开发者可以了解如何实际应用所述的协议,进行诊断测试,或者调试自己的OBD应用程序。 综上所...
本资源“Appium-sample-code实例”是Appium官方提供的一个完整的示例代码库,特别适合那些刚接触Appium或者希望提升自动化测试技能的学习者。通过这个实例集,你可以了解如何使用Appium进行实际的移动应用测试。 在...
在描述中提到的"pb邮件sample"是一个示例项目,你可以将它集成到自己的程序中,或者作为学习如何在PowerBuilder中处理邮件功能的参考。"随便使用"意味着这个样本代码是开放的,可以自由地进行修改和应用,无需担心...
描述提到的是“sample code for dsr routing protocol”,这表明压缩包内包含的是DSR路由协议的示例代码,这些代码可能是为了教学、测试或理解DSR工作原理而编写的。DSR的工作机制包括源路由、分片和重组等关键特性...
LSP允许开发者添加新的协议层,或者对现有的TCP/IP协议栈进行定制,例如增加加密、代理支持、流量控制等功能。在实际应用中,这可能包括企业级的网络安全解决方案、数据压缩优化,或者是特定行业如医疗设备的定制...
综上所述,ASP.NET MVC 4 Sample(杂志网站)是一个全面展示ASP.NET MVC开发技巧的实例,涵盖了从基本架构到高级特性的众多知识点。通过学习和研究这个示例,开发者可以更好地理解和掌握ASP.NET MVC框架,提升Web...
本示例"ASP.NET_BasicSIP_Sample_visualbasic6.0_"显然是关于在ASP.NET环境中使用Visual Basic 6.0进行基本SIP(会话初始化协议)应用的开发。 SIP是一种应用层控制协议,主要用于多媒体通信系统,如VoIP(Voice ...
1. **协议一致性测试**:用于验证IED是否正确实现了IEC 61850的通信协议,包括MMS(Manufacturing Message Service)、GOOSE(Generic Object Oriented Substation Event)和SV(Sampled Values)服务。 2. **数据...
10. **测试与调试**:源代码中会包含测试用例和调试工具,如JUnit (Android) 或 XCTest (iOS),帮助开发者发现并修复问题。 以上只是可能涵盖的部分知识点,具体源代码中可能还有更多细节,如错误处理、动画效果、...
通过这个驱动,开发者和爱好者可以在Linux平台上进行音频相关的开发工作,例如创建自定义的音频播放器、音频处理工具,或者为嵌入式设备开发音频解决方案。由于是开源共享,用户可以自由查看源代码,学习驱动开发...
8. **调试与测试**:在实际环境中,确保在安全模式下进行测试,以避免影响生产流程。 在"Sample"项目中,你可能会找到一个示例程序,展示了如何实现上述步骤。这个项目可能包含了C#源代码文件、配置文件以及可能的...
4. **测试脚本或工具**:可能会包含一些用于测试和调试的工具,帮助开发者验证硬件和软件的正确性,确保EtherCAT通信的稳定性。 5. **文档**:虽然题目没有明确提及,但通常BSP会附带相关的用户手册或API参考,解释...
RESTful API,全称为Representational State Transfer,是一种网络应用程序的设计风格和开发方式,基于HTTP协议,用于客户端和服务端之间的通信。C#是Microsoft开发的一种面向对象的编程语言,广泛应用于构建Windows...
Jetty是一款开源的、轻量级的Java Web服务器和Servlet容器,广泛用于开发、测试和部署Web应用程序。在这个压缩包中,我们很可能会找到一些Java源代码、配置文件以及可能的部署脚本,用于演示Jetty的功能。 首先,让...
描述中的"ASPNET-WebAPI-Sample-master"暗示了这个压缩包可能包含一个master分支的源代码示例,通常这代表了一个完整的项目或者一组示例,用于展示如何使用ASP.NET Web API的各种特性,例如路由配置、模型绑定、过滤...
总的来说,TKLoadView是Objective-C环境中一个实用的加载指示器组件,通过自定义API和协议支持,为开发者提供了更多的灵活性和控制权,帮助他们打造出更具个性化的用户体验。在实际开发中,掌握TKLoadView的使用方法...
- 使用Visual Studio的内置WCF测试客户端工具(WcfTestClient.exe)调试服务,或者创建独立的客户端应用程序来调用服务。 - 通过IIS部署服务,使其可以在网络环境中被多个客户端访问。 5. **客户端调用WCF服务** ...
在Spring Cloud生态系统中,Eureka和Spring Gateway是两个重要的组件,它们在...在实践中,还需要考虑其他因素,如服务间的通信协议(通常是RESTful API)、服务版本管理、安全策略等,以确保系统的稳定性和可扩展性。
Swift本身不内置数据绑定机制,但可以通过第三方库如ReactiveCocoa、Combine或者自定义的观察者模式实现。 3. **协议和委托**: 在MVVM中,ViewModel通常会遵循一个协议,这个协议定义了它需要暴露给View的方法和...