9.Jmeter自定义Sample(自定义测试内容)完成测试

问题:在某些场景下我们会发现Jmeter里面提供的各种Sample不能满足自己的需求,应为这个世界上的压力测试的逻辑本来就是千变万化的,所以这个时候我们如果自己实现一套测试逻辑(当Jmeter的基本elements和sample无法满足我们的需求时, 例如我们要测试一个udp服务, 而协议的内容是我们自定义的),这个时候需要使用jmeter 的扩展性。下面我们通过一个简单的例子来看看如何开发这样的一个自定义Sample? 自定Sample的生命周期是怎样的?

  1. package com.alibaba.stress.load;
  2. import org.apache.jmeter.config.Arguments;
  3. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
  4. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
  5. import org.apache.jmeter.samplers.SampleResult;
  6. public class LifecycleJMeterSampleextends AbstractJavaSamplerClient {
  7. @Override
  8. public Arguments getDefaultParameters() {
  9. System.out.println("Get Parameter name! [getDefaultParameters]");
  10. return super.getDefaultParameters();
  11. }
  12. @Override
  13. public void setupTest(JavaSamplerContext context) {
  14. System.out.println("[setupTest]");
  15. super.setupTest(context);
  16. }
  17. @Override
  18. public void teardownTest(JavaSamplerContext context) {
  19. System.out.println("[teardownTest]");
  20. super.teardownTest(context);
  21. }
  22. @Override
  23. public SampleResult runTest(JavaSamplerContext ctx) {
  24. SampleResult result = new SampleResult();
  25. result.sampleStart();
  26. System.out.println("[runTest]");
  27. result.setSuccessful(true);
  28. result.sampleEnd();
  29. return result;
  30. }
  31. }
 
  1. package com.alibaba.stress.load;  
  2. import org.apache.jmeter.config.Arguments;  
  3. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;  
  4. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;  
  5. import org.apache.jmeter.samplers.SampleResult;  
  6. public class LifecycleJMeterSample extends AbstractJavaSamplerClient {  
  7.       
  8.     @Override  
  9.     public Arguments getDefaultParameters() {  
  10.         System.out.println("Get Parameter name! [getDefaultParameters]");  
  11.         return super.getDefaultParameters();  
  12.     }  
  13.     @Override  
  14.     public void setupTest(JavaSamplerContext context) {  
  15.         System.out.println("[setupTest]");  
  16.         super.setupTest(context);  
  17.     }  
  18.     @Override  
  19.     public void teardownTest(JavaSamplerContext context) {  
  20.         System.out.println("[teardownTest]");  
  21.         super.teardownTest(context);  
  22.     }  
  23.     @Override  
  24.     public SampleResult runTest(JavaSamplerContext ctx) {  
  25.         SampleResult result = new SampleResult();  
  26.         result.sampleStart();  
  27.         System.out.println("[runTest]");  
  28.         result.setSuccessful(true);  
  29.         result.sampleEnd();  
  30.         return result;  
  31.     }  
  32. }  
 
其中AbstractJavaSamplerClient是从ApacheJmeter_Java.jar 中获得。编写的类文件打包xxx.jar, 把这个Jar放到Jmeter

的解压目录下的lib/ext下。重新启动jmeter.

一次先加入线程组,和聚合报告两个组件,在聚合报告组件之前加入一个新的Sample(Java Sample ), 如图:

jmeter

 

运行测试。可以看到控制台的输出。调整几次线程组的线程数目的控制,我们会发现我们的这个自定义类中的teardowntest 和 setupuptest方法都是正对线程组中的某一个线程来执行的,线程组中线程的调用数目其实就是指runtest方法的运行次数。

posted @ 2018-08-09 17:05  张飞博客  阅读(1054)  评论(0编辑  收藏  举报