`

自定义Sample或者协议完成测试

阅读更多

        在某些场景下我们会发现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/

  • 大小: 54.9 KB
  • 大小: 88.3 KB
  • 大小: 59.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics