jmeter性能测试脚本的编写

 

一、http请求的脚本编写

以线上打款接口为例:

1、启动jmeter,建立一个测试计划。

启动:打开jmeter文件夹,bin文件→jmeter.bat(Windows执行文件)文件,就可以启动jmeter了

2、添加用户定义参数,定义IP和端口号

3、添加Http信息头管理器

4、添加Http Cookie管理器

5、添加逻辑控制器及登录http接口的请求

6、添加线上打款Http接口的请求

7、添加聚合报告查看结果

 

二、Java请求的脚本编写

?perfOpenApiTest.rar

以扫码支付接口为例:

目的:对开放平台的加密接口进行测试

(1)、核心步骤

1.创建一个Java maven工程;

 

2.将JMeter的lib目录下的jar文件添加进此工程的POM.xml中

<dependencies>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>4.1.8</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>21.0-rc1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_java</artifactId>
        <version>5.0</version>
    </dependency>

</dependencies>

 

3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;

public Arguments getDefaultParameters();设置可用参数及的默认值;

public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;

public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;

public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

4.打包成Runnable Jar File;

mvn install

5.将此jar包放入JMETER_HOME\lib\ext目录;

6.以管理员身份打开JMeter;

7.创建线程组、Java Request、查看结果树,进行测试;

(2)、实例

public class perfOrderScan implements JavaSamplerClient {
    private SampleResult results;
    private String type;
    private String total_fee;
    private String store_id;
    private String cashier_id;

    // 设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("type", "0");// 设置参数,并赋予默认值0
        params.addArgument("total_fee", "0");// 设置参数,并赋予默认值0
        params.addArgument("store_id", "0");// 设置参数,并赋予默认值0
        params.addArgument("cashier_id", "0");// 设置参数,并赋予默认值0
        return params;
    }

    // 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
    public void setupTest(JavaSamplerContext arg0) {
        results = new SampleResult();
    }

    // 测试执行的循环体,根据线程数和循环次数的不同可执行多次
    public SampleResult runTest(JavaSamplerContext arg0) {
        type = arg0.getParameter("type"); // 获取在Jmeter中设置的参数值
        total_fee = arg0.getParameter("total_fee"); // 获取在Jmeter中设置的参数值
        store_id = arg0.getParameter("store_id"); // 获取在Jmeter中设置的参数值
        cashier_id = arg0.getParameter("cashier_id"); // 获取在Jmeter中设置的参数值
        results.sampleStart();// jmeter 开始统计响应时间标记
        try {
            String method = "openapi.payment.order.scan";
            String merchant_order_sn = RandomUtil.simpleUUID();
            Map content = Maps.newHashMap();
            content.put("merchant_order_sn", merchant_order_sn);
            content.put("type",type);
            content.put("total_fee",total_fee);
            content.put("store_id",store_id);
            content.put("cashier_id",cashier_id);

            String biz_content = JSONUtil.toJsonStr(content);
            JSONObject response = ATSBaseTest.postOpenapiRequest(method,biz_content,null,null);
            // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
            if (response != null && response.size() > 0) {
                results.setResponseData("结果是:"+response, null);
                results.setDataType(SampleResult.TEXT);
            }
            results.setSuccessful(true);
//            System.out.println(response);
            // 被测对象调用
        } catch (Throwable e) {
            results.setSuccessful(false);
            e.printStackTrace();
        } finally {
            results.sampleEnd();// jmeter 结束统计响应时间标记
        }
        return results;
    }

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

      //调试代码
//    public static void main(String[] args) {
//        // TODO Auto-generated method stub
//        Arguments params = new Arguments();
//        params.addArgument("type", "1");// 设置参数,并赋予默认值0
//        params.addArgument("total_fee", "0.01");// 设置参数,并赋予默认值0
//        params.addArgument("store_id","7771");
//        params.addArgument("store_id","1512948");
//        JavaSamplerContext arg0 = new JavaSamplerContext(params);
//        perfOrderScan test = new perfOrderScan();
//        test.setupTest(arg0);
//        test.runTest(arg0);
//        test.teardownTest(arg0);
//    }

}

(3)、JMeter Java Sampler介绍

Arguments

getDefaultParameters() 用于获取界面的参数

SampleResult

runTest(JavaSamplerContext context) 类似于LR的Action,result.sampleStart()一个事务开始,result.sampleEnd()一个事务 结束

void

setupTest(JavaSamplerContext context) 初始化方法,类似于LR的init和Junit中的setUp()

void

teardownTest(JavaSamplerContext context) 类似于LR的end和Junit中的tearDown()

执行的先后顺序为:

getDefaultParameters() --> setupTest(JavaSamplerContext context)

--> runTest(JavaSamplerContext context)

--> teardownTest(JavaSamplerContext context)

 

常用的方法:

①、addArgument("name", "value")    定义参数

②、sampleStart()    定义事务的开始,类似于LR的lr_start_transaction,和LR一样事务间不要放无关代码

③、sampleEnd()    定义事务的结束,类似于LR的lr_end_transaction

④、setSuccessful(true、false)    设置运行结果的成功或失败,Jmeter统计成功失败的次数,在聚合报告中能够体现。

(4)、添加线程组和Java Request

 

 

对于编写 JMeter 性能测试脚本,您可以按照以下步骤进行操作: 1. 下载和安装 JMeter:首先,您需要从官方网站(https://jmeter.apache.org/)下载并安装 JMeter。 2. 创建测试计划:打开 JMeter,您将创建一个新的测试计划。右键单击“测试计划”,选择“添加”>“Threads (Users)”>“线程组”。在线程组中,您可以设置并发用户数、循环次数等。 3. 添加 Samplers:Sampler 用于发送请求并模拟用户行为。右键单击线程组,选择“添加”>“Sampler”> 您所需的 Sampler(如 HTTP 请求或 JDBC 请求)。 4. 配置 Samplers:配置所选 Sampler 的属性,例如服务器地址、端口号、请求路径等。您还可以设置参数、请求头和身份验证。 5. 添加断言:断言用于验证服务器响应是否符合预期。在 Sampler 下,右键单击“添加”>“断言”> 您所需的断言类型(如响应代码或响应内容)。 6. 添加监听器:监听器用于收集和分析测试结果。右键单击线程组,选择“添加”>“监听器”> 您所需的监听器类型(如查看结果树或聚合报告)。 7. 配置测试计划属性:在测试计划上右键单击,选择“添加”>“配置元件”> “CSV 数据文件配置”。使用 CSV 文件提供测试数据,以便模拟不同的用户行为。 8. 运行测试:保存测试计划并点击工具栏上的“运行”按钮,以启动性能测试。您可以观察监视器中的结果,并根据需要进行优化。 请注意,这只是 JMeter 性能测试脚本编写的基本步骤。根据您的具体需求,您可能需要深入了解 JMeter 的各种功能和特性。建议参考 JMeter 官方文档和其他在线资源,以获得更详细的指导和示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值