目录
【前言】
【步骤】
1. 准备工作
2. 创建线程组
3. 创建HTTP请求
4. 添加正则表达式提取器
5. 添加HTTP请求关联控制器
6. 设置断言和验证器
7. 运行测试
【代码】
【结论】
【前言】
在进行接口测试时,接口之间的关联经常是我们需要重点测试的点之一。有时候,我们需要在多个线程组之间进行接口关联测试,以满足复杂的业务场景。在这种情况下,我们通常需要使用一些专业的工具和技巧来完成这项任务。本文将介绍如何使用JMeter工具进行线程组之间的接口关联测试,并给出详细的代码示例。
【步骤】
1. 准备工作
在开始接口关联测试之前,我们需要准备一些文件和配置。具体如下:
(1)准备JMeter软件(本文使用版本是5.3)
(2)准备测试用例,测试用例中应当包含所有需要测试的接口。
(3)准备必要的配置参数,如请求参数、响应参数等。
2. 创建线程组
在JMeter中,线程组是一个测试计划的基本单元。我们可以在线程组中设置并发数、循环次数、持续时间等参数。在本例中,我们需要创建两个线程组:Thread Group 1和Thread Group 2。其中,Thread Group 1是启动线程组,用于发送第一个接口请求;Thread Group 2则是接收线程组,用于接收并处理第一个接口请求并返回响应给第二个接口。
3. 创建HTTP请求
在线程组中,我们需要创建HTTP请求,以请求目标接口并获取响应。在本例中,我们需要创建两个HTTP请求:Request 1和Request 2。其中,Request 1是由Thread Group 1发送的第一个请求,Request 2是由Thread Group 2接收并处理Request 1的响应,并发送给第二个接口。
4. 添加正则表达式提取器
由于我们需要在第一个请求中提取一个参数,并在第二个请求中使用该参数进行关联,因此我们需要在Request 1中添加一个正则表达式提取器。提取器的设置如下:
- 应用于:响应数据
- 正则表达式:我们需要从响应中提取一个参数,例如“token”。
- 模板:$1$
- 匹配号:0
5. 添加HTTP请求关联控制器
在Request 2中,我们需要使用Request 1中提取的参数。为此,我们需要添加一个HTTP请求关联控制器,并在控制器中设置关联参数。具体设置如下:
- 上游请求:Request 1
- 上游字段名称:上游请求中我们所提取的参数名称,例如“token”。
- 下游请求:Request 2
6. 设置断言和验证器
为了保证我们的接口测试结果准确性,我们需要设置断言和验证器。我们可以设置简单的响应断言来检查响应是否包含所期望的内容,或者复杂的断言以比较响应的结构和值。在这个例子中,我们选择添加一个响应断言,设置响应包含“success”等关键字。
7. 运行测试
一切准备就绪后,我们需要运行测试,并进行测试结果分析和报告。我们可以使用JMeter提供的分析工具来分析测试结果,并生成详细的测试报告。
【代码】
下面是一个简单的Java代码示例,展示了如何使用JMeter工具进行线程组之间的接口关联测试。代码中包含了线程组创建、HTTP请求、正则表达式提取器和HTTP请求关联控制器等设置,可以根据需要进行修改和优化。
import org.apache.jmeter.control.LoopController;
import org.apache.jmeter.control.ThreadGroup;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.reporters.Summariser;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.threads.JMeterThread;
import org.apache.jmeter.threads.JMeterVariables;
import org.apache.jmeter.util.JMeterUtils;
public class CrossThreadGroupTest {
public static void main(String[] args) throws Exception {
// 初始化JMeter
JMeterUtils.loadJMeterProperties("jmeter.properties");
JMeterUtils.initLocale();
// 创建测试计划
TestPlan testPlan = new TestPlan();
testPlan.setName("Cross Thread Group Test");
// 创建启动线程组
ThreadGroup startThreadGroup = new ThreadGroup();
startThreadGroup.setName("Start Thread Group");
startThreadGroup.setNumThreads(1);
startThreadGroup.setRampUp(1);
// 创建启动线程组循环控制器
LoopController startLoopController = new LoopController();
startLoopController.setLoops(1);
startLoopController.setContinueForever(false);
// 将启动线程组循环控制器添加到启动线程组中
startThreadGroup.setSamplerController(startLoopController);
// 创建启动HTTP请求
HTTPSampler startHttpRequest = new HTTPSampler();
startHttpRequest.setName("Start HTTP Request");
startHttpRequest.setDomain("example.com");
startHttpRequest.setPath("/login");
startHttpRequest.setMethod("POST");
// 创建启动HTTP请求参数
startHttpRequest.addArgument("username", "testuser");
startHttpRequest.addArgument("password", "testpass");
// 将启动HTTP请求添加到启动线程组循环控制器中
JMeterThread startJMeterThread = new JMeterThread(startLoopController, startHttpRequest);
startLoopController.addTestElement(startJMeterThread);
// 创建接收线程组
ThreadGroup receiveThreadGroup = new ThreadGroup();
receiveThreadGroup.setName("Receive Thread Group");
receiveThreadGroup.setNumThreads(1);
receiveThreadGroup.setRampUp(1);
// 创建接收线程组循环控制器
LoopController receiveLoopController = new LoopController();
receiveLoopController.setLoops(1);
receiveLoopController.setContinueForever(false);
// 将接收线程组循环控制器添加到接收线程组中
receiveThreadGroup.setSamplerController(receiveLoopController);
// 创建接收HTTP请求
HTTPSampler receiveHttpRequest = new HTTPSampler();
receiveHttpRequest.setName("Receive HTTP Request");
receiveHttpRequest.setDomain("example.com");
receiveHttpRequest.setPath("/data");
receiveHttpRequest.setMethod("POST");
// 添加接收HTTP请求关联控制器
HTTPSampler proxySampler = new HTTPSampler();
proxySampler.setProxyPort(8080);
proxySampler.setProxyHost("localhost");
proxySampler.setProxyScheme("http");
proxySampler.setMethod("GET");
proxySampler.setPath("/");
receiveHttpRequest.addTestElement(proxySampler);
// 获取启动HTTP请求中的token参数,并将其设置到接收HTTP请求中作为参数
JMeterVariables variables = new JMeterVariables();
SampleResult startResult = new SampleResult();
String token = startResult.getResponseDataAsString().replaceAll("\\s", "");
receiveHttpRequest.addArgument("token", token);
// 将接收HTTP请求添加到接收线程组循环控制器中
JMeterThread receiveJMeterThread = new JMeterThread(receiveLoopController, receiveHttpRequest);
receiveLoopController.addTestElement(receiveJMeterThread);
// 创建结果收集器
ResultCollector resultCollector = new ResultCollector(new Summariser());
resultCollector.setName("Result Collector");
// 将所有要测试的组件添加到测试计划中
testPlan.addThreadGroup(startThreadGroup);
testPlan.addThreadGroup(receiveThreadGroup);
testPlan.addTestElement(resultCollector);
// 实例化JMeter引擎并运行测试
StandardJMeterEngine jMeterEngine = new StandardJMeterEngine();
jMeterEngine.configure(testPlan);
jMeterEngine.run();
}
}
【结论】
通过本文的介绍,我们了解了如何使用JMeter工具进行跨线程组接口关联测试。我们可以通过设置线程组、HTTP请求、正则表达式提取器和HTTP请求关联控制器等参数,轻松地完成测试任务。在真实的测试场景中,我们需要根据具体业务需求和接口特点进行优化和调整,以达到更好的测试效果和精度。
作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试的必须品,如果你用得到的话可以直接拿走,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!
方式:留【自动化测试】即可
【自动化测试交流】:574737577(备注ccc)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=h6zeq2LVvPyEHHF2BcDbTsqIQVm0Ptvf&authKey=Y8jWG90Q1TfaYLEj5GSeTa1ZC9pSSZlGaaBY918qh%2FQ4%2FXkC8WcHyuTTootukQWC&noverify=0&group_code=574737577