java 性能测试文档模板_JMeter性能测试自定义Java脚本

7248162f8d6dc231d9310ff5c2ec9c9e.png

》》》推荐阅读《《《

1、性能测试学习笔记-场景设计

2、性能测试的重要意义

3、性能分析流程及方法

4、应用系统性能调优之性能分析

使用JMeter做性能测试时,我们通常都是需要自己编写测试脚本,才能满足测试用例的需求,Jmeter也是支持我们自定义编写测试脚本的,而且支持Java、Python等多种语言。在这里,我们选择使用Java语言开发测试脚本,是因为Jmeter本身也是用Java实现的,所以使用Java开发脚本会更好。

首先,使用Eclipse或者IntelliJ IDEA来新建一个项目,然后新建一个包,再从Jmeter的lib/ext目录下中拷贝ApacheJMeter_java.jar和ApacheJMeter_core.jar两个文件,然后引入这两个JAR包到项目中。在IntelliJ IDEA中的操作如下:


点击File->Project Structure
点击Project Structure界面左侧的Modules
在Dependencies标签界面下
点击底部的+号,
选择第一个选项JARs or directories…
选择相应的jar包,点击OK


然后,我们在包中新建一个TestNum类,该类继承ApacheJMeter_java.jar包中的AbstractJavaSamplerClient类,引用它就可以调用了。在继承AbstractJavaSamplerClient类的时候,我们需要实现4个方法:


setupTest():初始化方法,用于初始化性能测试时的每个线程,实际运行时每个线程仅执行一次
getDefaultParameters():用于设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter参数列表中
runTest():性能测试时的线程运行体,即测试执行的循环体,根据线程数和循环次数的不同可执行多次
teardownTest():测试结束方法,用于结束性能测试中的每个线程,实际运行时,每个线程仅执行一次,在测试方法运行结束后执行


具体的代码实现如下:

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 TestNum extends AbstractJavaSamplerClient {
    // SampleResult类封装了从入口样本返回的各种信息
    private SampleResult results;
    // 输入的数字
    private String inNum;
    // 需要匹配的数字
    private String resultNum;

    // 用于设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter参数列表中
    // Arguments类表示一组参数对象
    public Arguments getDefaultParameters() {
        // 声明定义Arguments类
        Arguments params = new Arguments();
        // 添加一个新参数
        params.addArgument("inNum", "");
        params.addArgument("resultNum", "66");
        return params;
    }

    // 初始化方法,用于初始化性能测试时的每个线程,实际运行时每个线程仅执行一次
    //
    // JavaSamplerContext类用于向JavaSamplerClient实现提供上下文信息
    // 这当前由在GUI中指定的初始化参数组成,其他数据将来可以通过JavaSamplerContext访问
    public void setupTest(JavaSamplerContext jsc) {
        // 定义SampleResult类
        results = new SampleResult();
        // 以String形式获取指定参数的值,或者如果未指定该值,则返回指定的默认值
        inNum = jsc.getParameter("inNum", "");
        resultNum = jsc.getParameter("resultNum", "");
        if (inNum != null && inNum.length() > 0) {
            // 设置采样器数据
            results.setSamplerData(inNum);
        }
        if (resultNum != null && resultNum.length() > 0) {
            results.setSamplerData(resultNum);
        }
    }

    // 性能测试时的线程运行体,即测试执行的循环体,根据线程数和循环次数的不同可执行多次
    public SampleResult runTest(JavaSamplerContext arg0) {
        boolean flag = false;
        // 定义一个事务,表示这是事务的起始点
        results.sampleStart();
        for (int i = inNum.length(); --i >= 0; ) {
            // 使用isDigit判断是否为数字,charAt方法用于返回指定索引处的字符
            if (!Character.isDigit(inNum.charAt(i))) {
                flag = false;
            } else {
                flag = true;
            }
        }
        for (int j = resultNum.length(); --j >= 0; ) {
            if (!Character.isDigit(resultNum.charAt(j))) {
                flag = false;
            } else {
                flag = true;
            }
        }
        // 定义一个事务,表示这是事务的结束点
        results.sampleEnd();
        if (flag) {
            Integer num = Integer.parseInt(inNum);
            Integer rsNum = Integer.parseInt(resultNum);
            if (num == rsNum) {
                // 设置SampleResult对象的编码和响应数据
                results.setResponseData("恭喜你,答对了O(∩_∩)O~\n答案是【" + resultNum + "】", "UTF-8");
                // 设置SampleResult对象的成功属性,即返回正确还是错误
                results.setSuccessful(true);
            } else if (num > rsNum) {
                results.setResponseData("好像大了点~~~~(>_                results.setSuccessful(false);
            } else {
                results.setResponseData("好像小了点~~~~(>_                results.setSuccessful(false);
            }
        } else {
            results.setResponseData("请输入数字:~~~~(>_            results.setSuccessful(false);
        }
        return results;
    }

    // 测试结束方法,用于结束性能测试中的每个线程,实际运行时,每个线程仅执行一次,在测试方法运行结束后执行
    public void teardownTest(JavaSamplerContext arg0) {
    }
}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091

然后将上面的代码打包成jar包,生成的包名称为TestNum.jar,在IntelliJ IDEA中的操作如下:


点击File->Project Structure
点击Project Structure界面左侧的Artifact
依次点击底部的+>JAR>Empty
输入这个jar的Name,下面有这个jar包生成的路径Output directory
在Output Layout中点击+>Module Output给这个jar包添加Module Output
点击OK退出Project Structure面板
最后依次点击Build>Build Artifacts…>TestNum>Build/Rebuild


生成jar包后,将jar包拷贝到Jmeter的lib/ext目录下。之后启动Jmeter,添加线程组和Java请求,同时为了方便,我们用随机数函数来随机抽取数字,验证与resultNum匹配的结果,再添加察看结果树和聚合报告。

设置线程数为10,执行后可以看到,10个请求中,有3个请求回答正确,响应数据对应了我们的代码,表示执行成功。

通过使用Jmeter自定义Java测试代码,再配合Jmeter自带的各种函数,就可以实现绝大多数的性能测试需求。

》》》推荐阅读《《《

1、性能测试学习笔记-场景设计

2、Web站点性能调优完全攻略

3、应用系统性能调优之性能分析

4、Windows监控——性能指标详解

6、性能测试的重要意义

7、软件性能测试的本质_致命版

8、性能分析流程及方法

9、性能测试流程

10、性能测试从需求分析开始

11、性能测试指标

12、双活数据中心揭秘之—DB2 PureScale

13、循序渐进学习oracle

14、软件项目管理中的十个误区

15、功能测试方法总结及常见面试问题

16、MQ来账通道及队列配置

17、Linux命令大全整理

18、JMeter工具简单介绍

19、性能瓶颈分析方法

20、性能测试-LoadRunner操作流程之一

22、性能测试-LoadRunner操作流程之二

23、性能测试-LoadRunner操作流程之三

24、性能测试-脚本编写之一

25、性能测试-脚本编写之二

26、性能测试-脚本编写之三

27、性能测试-性能调优之一

28、性能测试-性能调优之二

f55cfdcd850a4fc991e438a7e3fc5606.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值