通常,我们只是使用jemter的GUI做压测,如果希望将jemter作为底层驱动,做一个压测平台时,需要通过java代码调用jemter,同时采集器使用java Request,当然还支持其他的采集器,比如http。
我们这里只讲解使用到的一些组件。而其他组件可以到Jmeter的官网了解(https://jmeter.apache.org/),在Jmeter下每个组件都是节点的方式进行配置。如我们在图形化界面中,都会有一个TestPlan的根节点,其他控件都添加在根节点下。
Jmeter基本组件简介
- TestPlan:测试计划,每一个测试都为一个测试计划。
- ThreadGroup:是一个测试计划的开始。所有的controller、sampler必须在线程组下。不过有一些特许的控件如Listeners可以直接在TestPlan下。
- sampler:采样器,也就是我们各种性能测试和负载测试的收集器。如:http采样器:HTTPSampler等
- Controller:主要用于压力测试逻辑的处理,如我们这里使用了LoopController进行控制线程的循环次数,是永久还是循环压力测试多次。
Jmeter的调用方式
调用Jmeter有5种方式:
- 使用命令的方式
- 使用ANT的方式
- 使用MAVEN的PLUGIN方式
- 使用JAVA代码调用
- 使用blazemeter进行调用
这里只演示JAVA调用,其他方式的调用可以blazemeter的文章(https://www.blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui)
一、导入Jmeter的包
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.0</version>
</dependency>
<!--jmeter组件包-->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_components</artifactId>
<version>5.0</version>
</dependency>
<!--jmeter Http包-->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_http</artifactId>
<version>5.0</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.0</version>
</dependency>
二、下载jemter5.0,放在一个位置,用于java-request采集器获取jar
三、演示代码 - 通过java调用jemter并使用java 采集器
package com.yunzhanghu.yzh_autotest.core;
import org.apache.jmeter.JMeter;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.control.LoopController;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
import org.apache.jmeter.protocol.java.sampler.JavaSampler;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.reporters.Summariser;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.threads.ThreadGroup;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import static com.yunzhanghu.yzh_autotest.common.MysqlUtils.exeSqlApi;
import static com.yunzhanghu.yzh_autotest.common.ParmUtils.getResourceHost;
public class TestPlanLauncher {
public