jmeter根据业务接口开发自定义java request测试

  • 写在前面

学习了jmeter测试之后,学会了简单的接口请求测试,但是在现实场景中,很多情况下需要根据业务场景来进行接口测试,这是需要编码来完成的。这篇博文简单叙述了如何编写自定义的java 接口请求,从而达到根据业务需求来测试接口。

  • 创建一个maven工程(这里创建过程就不叙述了)

这里直接给出maven依赖 

	<!-- 防止打出jar包后,中文参数乱码 -->
	<properties>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.apache.jmeter</groupId>
			<artifactId>ApacheJMeter_java</artifactId>
			<version>3.2</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.58</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>jmeter-test</finalName>
		<!-- 把以来jar包要打入jar内,不然运行时报类找不到错误 -->
		<plugins>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
					<archive>
						<manifest>
                            <!-- 指定运行主类 -->
							<mainClass>com.demo.Test</mainClass>
						</manifest>
					</archive>
				</configuration>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
  • 创建测试类
package com.demo;

import java.util.Random;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

import com.alibaba.fastjson.JSONObject;


public class Test implements JavaSamplerClient {

    private static final String[] apps = {"109000", "109001", "109002", "109003", "109004", "109005", "109006",
            "109007", "109008", "109009",};
    private static final String[] mobiles = {"19956596670", "19956596671", "19956596672", "19956596673", "19956596674",
            "19956596675", "19956596676", "19956596677", "19956596678", "19956596679",};

    // URLNAME 就是在图形化界面当中显示的变量名称
    private static final String ACCOUNT = "account";

    private static final String PSWD = "pswd";

    private static final String MOBILE = "mobile";

    private static final String MSG = "msg";

    private static final String NEEDSTATUS = "needstatus";


    // 用来存储响应的数据,目的是将响应结果放到察看结果树当中
    private String resultData;

    //这个就是用来初始化一些固定参数的,如果不需要可以删除
    public Arguments getDefaultParameters() {
        System.out.println("getDefaultParameters run");
        Arguments arguments = new Arguments();
        arguments.addArgument(PSWD, "123456");
        arguments.addArgument(MSG, "【云树科技】测试短信");
        arguments.addArgument(NEEDSTATUS, "true");
        return arguments;
    }

    /**
     * 这个方法就是一个初始化方法,我们所有的初始化的动作都可以在这里写
     * 
     * @param javaSamplerContext
     */
    public void setupTest(JavaSamplerContext javaSamplerContext) {
    }

    /**
     * 这个方法就是实现你具体功能逻辑的方法
     * 
     * @param javaSamplerContext
     * @return
     */
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        SampleResult result = new SampleResult();
        System.out.println("runTest run");
        String pswd = javaSamplerContext.getParameter(PSWD);
        String msg = javaSamplerContext.getParameter(MSG);
        String needStatus = javaSamplerContext.getParameter(NEEDSTATUS);
        String url = "http://192.168.20.121/test";
        JSONObject json = new JSONObject();
        json.put(ACCOUNT, apps[new Random().nextInt(10)]);
        json.put(PSWD, pswd);
        json.put(MOBILE, mobiles[new Random().nextInt(10)]);
        json.put(MSG, msg);
        json.put(NEEDSTATUS, needStatus);
        // resultData = "这就是响应结果";
        resultData = HttpUtil.sendJsonPost(url, json);
        System.out.println(resultData);
        result.setSampleLabel("自定义java请求访问");
        result.setSuccessful(true);// 告诉查看结果树访问是否成功
        result.setResponseData(resultData, null);
        result.setDataType(SampleResult.TEXT);
        return result;
    }

    /**
     * 这个方法就是来做一些收尾的工作的。
     * 
     * @param javaSamplerContext
     */
    public void teardownTest(JavaSamplerContext javaSamplerContext) {
        System.out.println("teardownTest run");
    }

    public static void main(String[] args) {
        Second request = new Second();
        Arguments arguments = new Arguments();
        arguments.addArgument(PSWD, "123456");
        arguments.addArgument(MSG, "【云树科技】测试短信");
        arguments.addArgument(NEEDSTATUS, "true");
        JavaSamplerContext javaSamplerContext = new JavaSamplerContext(arguments);
        request.runTest(javaSamplerContext);
    }

}

注意:

       1.测试类中一定要用main方法,且一定要运行一次main方法,保证可以顺利调通接口,收到返回值,不然即使达成jar包后也不能运行

        2.runTest()方法为业务逻辑实现的地方,所有业务逻辑都可以在这里面做处理。

           getDefaultParameters()是初始化一些固定的请求参数,如果参数是变动的,可以不用在这里面初始化,可以在runTest()里面进行参数初始化,具体请看我 json.put(ACCOUNT, apps[new Random().nextInt(10)]);这一行代码,我的ACCOUNT就是变量。

  • 打包测试

利用maven命令mvn clean package打包,打包时会生成两个包,注意,一定要选择包名中有jar-with-dependencies的jar包,然后放入jmeter -->lib --> ext 目录下

  • 运行jmeter

在jmeter -->bin 目录下,直接运行jmeter.bat,如下图

  • 添加测试计划(如果界面是英文,直接修改bin目录下jmeter.properties中第37行,修改为language=zh_CN即可)

1.右击测试任务,如下图

2.第一步后,在测试计划下会有个setUp线程(可以自定义命名)组目录,右击,添加jave请求。

 3.第二步后,在setUp线程下会有个java请求,选择类名称,找到你刚才编写的测试类

4.根据自己需求,添加结果树,聚合结果等,这里演示添加汇总报告,继续右击setUp线程,添加汇总报告

添加成功后如下图

 5.配置测试计划。左键单击setUp线程组,会看到如下图片:

主要修改以下参数:

线程数:一次性启动多少线程,根据自己测试标准来填写

Ramp-UP时间:表示多少秒内启动完成这些线程,比如我设置的是1,则表示1秒内要启动线程数配置的所有线程

循环次数:表示上面线程数一共循环执行多少次,比如我线程数设置的是50,循环次数是10,则最后请求次数应该为500次

下面的调度器配置,可以自行去研究下,这里不做详细说明。

持续时间:代表测试一共要持续多少时间,上面循环次数勾上永久时,需要填写这个参数

启动延迟:启动后多长时间才开始测试,有点定时测试的意思

至此,jmeter测试演示完毕。注意,运行前要保存配置,一般保存在bin目录下。

 编写不易,如需转载,请标明原文地址,多谢观看。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值