快速定位接口问题,JMeter方法论,跨线程组接口关联测试!

news2024/11/27 8:27:02

 目录

【前言】

【步骤】

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)icon-default.png?t=N4P3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=h6zeq2LVvPyEHHF2BcDbTsqIQVm0Ptvf&authKey=Y8jWG90Q1TfaYLEj5GSeTa1ZC9pSSZlGaaBY918qh%2FQ4%2FXkC8WcHyuTTootukQWC&noverify=0&group_code=574737577

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何手写网络协议栈

哈喽,我是子牙,一个很卷的硬核男人。喜欢研究底层,聚焦做那些大家想学没地方学的课程:手写操作系统、手写虚拟机、手写编程语言…目前做了两门课:手写OS、手写JVM 今天想跟大家聊一个黑科技:手写网络协议栈…

Python的编码规范

目录 1、每个 import 语句只导入一个模块,尽量避免一次导入多个模块, 2、不要在行尾添加分号,也不要用分号将两条命令放在同一行, 3、建议每行不超过 80 个字符, 4、使用必要的空行可以增加代码的可读性 5、通常情…

让百万大学生崩溃的在线OJ,如何破局?

目录 一、在线OJ的的原理 二、在线OJ的使用规则 三、注意事项 1.关于作弊 2.如何防止作弊 3.输入输出格式 4.换行问题 四、经典在线OJ坑人题目以及博主被坑经历 五、提交不成功及解决方法 六、如何得心应手的拿下OJ系统 七、在线OJ的骗分技巧 在线OJ(Onl…

OpenGL简介

1.简介 一般它被认为是一个API,包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。…

为何要用分布式锁Redis实现分布式锁

为何要用分布式锁 一、为什么要使用分布式锁 为了保证一个方法在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或synchronized)进行互斥控制。但是,随着业务…

《论文阅读》连续前缀提示Prompt:table-to-text和摘要生成 ACL2021

《论文阅读》连续前缀提示Prompt:table-to-text和摘要生成 ACL2021 前言相关知识Table-to-Text Generation自编码语言模型自回归语言模型简介任务定义部分参数更新代码实验结果前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后…

高级算法工程师的工作职责(合集)

高级算法工程师的工作职责1 职责: 1、调研跟踪智能穿戴产品相关算法,为公司产品决策提供参考; 2、设计开发智能穿戴产品的计步、睡眠、心率、血氧饱和度、血压、心率变异性等相关参数的提取算法; 3、撰写算法开发文档,包括算法流程、测试方案…

小黑西安归来,政审完毕,眼睛手术做完一直在家躺着第5天的leetcode之旅:852. 山脉数组的峰顶索引

小黑代码 class Solution:def peakIndexInMountainArray(self, arr: List[int]) -> int:# 数组长度n len(arr)# 寻求山峰for i in range(n-1):if arr[i1] < arr[i]:return ireturn -1小黑二分模版 class Solution:def peakIndexInMountainArray(self, arr: List[int])…

Linux——内存和DMA

目录 本章目标&#xff1a; 一、内存组织 二、按页分配内存 三、slab分配器 四、不连续内存页分配 五、per-CPU变量 本章目标&#xff1a; 在前面的所有例子中&#xff0c;我们使用的都是全局变量或在栈上分配的内存。本章我们将先讨论如何动态分配内存和per-CPU变量。类…

实战-k8s中部署tomcat(四)

先下载资源&#xff1a;k8s中安装Tomcat 测试 k8s 集群中部署 tomcat 服务 #把 tomcat.tar.gz 上传到 k8s-node1&#xff0c;手动解压 [rootk8s-node1 ~]# ctr images import tomcat.tar.gz [rootk8s-master ~]# kubectl apply -f tomcat.yaml apiVersion: v1 #pod属于k8…

Augmentation Matters:一种简单而有效的半监督语义分割方法(CVPR2023)

文章目录 Augmentation Matters: A Simple-yet-Effective Approach to Semi-supervised Semantic Segmentation摘要本文方法Random Intensity-based AugmentationsAdaptive Label-aided CutMix 实验结果 Augmentation Matters: A Simple-yet-Effective Approach to Semi-superv…

迅为RK3568开发板2800页手册+220集视频

iTOP-3568开发板采用瑞芯微RK3568处理器&#xff0c;内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz&#xff0c;RK809动态调频。集成了双核心架构GPU&#xff0c;ARM G52 2EE、支持OpenGLES1.1/2.0/3.2OpenCL2.0、Vulkan 1.1、内高性能2D加速硬件。 内置NPU 内置独立NP…

港联证券|AI概念股继续活跃 科创50指数逆势走高

周三&#xff0c;A股市场出现极致分化态势。得益于存储芯片为代表的硬科技股的强势&#xff0c;科创50指数逆势走高。但创业板指、深证成指等主要股指仍然跌跌不休&#xff0c;沪指险守3200点关口。AI概念股继续逆势活跃&#xff0c;国资云、数据方向领涨&#xff0c;算力概念股…

坂田杨美自然村旧改,已立项,直接签约。

这个将由佳兆业与信义地产联合改造的坂田杨美自然村城市更新&#xff0c;已立项测绘&#xff0c;也公布了草案和村屋认定范围&#xff0c;正启动签约收楼中。名校附近的改造&#xff0c;深圳实验学校坂田校区附近&#xff0c;项目地处杨美地铁附近&#xff0c;还有佳兆业上品雅…

【企业化架构部署】Nginx网站服务

文章目录 一、Nginx 概述1.什么是 Nginx2.Nginx 的特点3.Nginx 应用场景 二、Nginx 服务基础1.编译安装 Nginx 服务1.1 布置环境1.2 安装依赖包1.3 创建运行用户、组1.4 编译安装 2.Nginx 的运行控制2.1 检查配置文件2.2 启动、停止 Nginx2.3 日志分割以及升级 Nginx 服务2.4 添…

39 KVM管理设备-管理快照

文章目录 39 KVM管理设备-管理快照39.1 概述39.2 操作步骤 39 KVM管理设备-管理快照 39.1 概述 虚拟机在使用过程中可能由于病毒对系统的破坏、系统文件被误删除或误格式化等原因造成虚拟机系统损坏导致系统无法启动。为了使损坏的系统快速恢复&#xff0c;openEuler提供了存…

每日学术速递5.30

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Accelerated Coordinate Encoding: Learning to Relocalize in Minutes using RGB and Poses(CVPR 2023 Highlight) 标题&#xff1a;加速坐标编码&#xff1a;学习使用 RGB 和姿势…

阿里邮箱POP3/SMTP服务

最近发现一个问题&#xff0c;小伙伴给我发的邮件&#xff0c;收和回都不及时。于是我现在将所有的邮箱&#xff0c;通过POP3/SMTP协议整合到了一起。再配合小米手环&#xff0c;就能做到邮件无遗漏。 一、邮箱常用协议 邮箱中常用三类协议 POP3 Post Office Protocol versi…

Python numpy - 数组与矩阵的运算

目录 数组array 一 数组的函数 unique函数 sum函数 max函数 二 数组的加减 三 数组的乘除 矩阵matrix 一 矩阵的生成 二 矩阵的加减 三 矩阵的乘法 数组array 创建数组a和b用来运算&#xff08;至少两个&#xff09; import numpy as np a np.random.randint(10,siz…

Java网络开发(Tomcat)—— web的 请求request (post和get请求)和 响应response

目录 引出请求request1.带数据的请求初步2.用注解WebServlet代替配置文件3.表单form的请求4.get请求和post请求 响应response1.用户登陆前端显示一段话2.如何在前端显示一张表 转发和重定向1.请求转发---request2.响应重定向----response 【需求】表格显示在网页方案一&#xf…