JMeter 接口自动化测试:从入门到精通的完全指南
JMeter 是一个开源的负载测试工具,它可以模拟多种协议和应用程序的负载,包括 HTTP、FTP、SMTP、JMS、SOAP 和 JDBC 等。在进行接口自动化测试时,使用 JMeter 可以帮助我们快速地构建测试用例,模拟多种场景,发现接口的性能问题。下面是一些 JMeter 接口自动化测试的步骤和技巧。
步骤
第 1 步:创建测试计划
在 JMeter 中,测试计划是测试的最高级别,它包含了各种元素和配置,如线程组、断言、监听器等。测试人员需要在 JMeter 中创建一个新的测试计划,并添加必要的元素和配置。
要创建新的测试计划,请选择: 文件 > 新建 > 填写计划名称。

第 2 步:添加线程组
在 测试 计划中,测试人员需要添加一个或多个线程组。线程组是测试的基本单位,它定义了测试的并发用户数量、持续时间和其他属性。测试人员需要根据需求设置线程组的属性。
要创建线程组,请右击测试计划并选择: 添加 > 线程(用户) > 线程组。

填写线程组信息。

- 线程数:10 个线程就是模拟 10 个用户。
- Ramp-Up 时间 (秒):线程准备时长。如果线程数为 10,准备时长为 10,那么需要 1秒钟启动 1 个线程。
- 循环次数。如果线程数为 10,循环次数为 10,那么每个线程发送 10 次请求。总请求数为 10*10 = 100。如果勾选了“永远”,那么所有线程会一直发送请求,直到手动停止。
第 3 步:添加取样器
取样器 是 JMeter 测试的核心组件,它模拟了用户执行的操作。测试人员需要添加一个或多个取样器,并设置它们的属性。常见的取样器类型包括 HTTP 请求、TCP 请求、FTP 请求、JDBC 请求等。
这边以添加 HTTP 请求为例。添加 HTTP 请求,右击线程组并选择:添加 > 取样器 > HTTP 请求。

填写 HTTP 的调用信息。

传过去的数据是 json 格式的,因此要添加头信息:Content-Type:application/json。右击 HTTP 请求并选择:添加 > 配置元件 > HTTP 信息头管理。

添加头信息:Content-Type:application/json。

第 4 步:添加断言
断言是 JMeter 测试中的重要组件,它用于验证服务器的响应是否符合预期。测试人员需要添加一个或多个断言,并设置它们的属性。
常见的断言类型包括响应断言 和 JSON 断言:
- 响应断言包括:文本、响应代码、响应头、响应时间等。
- JSON 断言允许用户指定 JSON 路径表达式并验证 JSON 响应是否符合该表达式。
响应断言
添加响应断言: 右击接口 > 添加 > 断言 > 响应断言。

对 响应文本中 包含字符串 “Apple” 做断言:

对 HTTP 的响应码 做断言:

JSON 断言
添加 JSON 断言: 右击接口 > 添加 > 断言 > JSON断言。

对接口返回的 total 做断言:

对接口返回的 data 的第 1 项 name 做断言:

上面的 JSON Path 指的是 JSON 路径表达式。表达式由一系列的属性名和数组索引组成:以 “$.” 开头,用“.”和“[]”分隔。例如,以下 JSON 响应:
"name": "John","age": 30,"cars": [{"name": "Ford","models": ["Fiesta","Focus","Mustang"]},{"name": "BMW","models": ["320","X3","X5"]}]
}
可以使用以下表达式获取相应的值:
- $.name:获取 "John"。
- $.cars[0].name:获取 "Ford"。
- $.cars[1].models[2]:获取 "X5"。
断言结果
运行用例。如果 响应符合断言,则什么都不会发生。否则,在 结果树监听器 中会看到报错信息。

第 5 步:添加监听器
监听器是 JMeter 测试中的另一个重要组件,它用于收集测试结果并生成报告。测试人员需要添加一个或多个监听器,并设置它们的属性。以下是一些常用的 JMeter 监听器:
- 聚合报告:提供有关事务响应时间、吞吐量和错误率的信息。
- 查看结果树:显示每个请求的响应,包括请求头、请求正文和响应正文。
- 监听器图形结果:将测试结果可视化,以便更轻松地分析性能问题。
- 断言结果:验证响应是否满足特定条件。
- 分布式负载测试图:显示不同服务器上的负载情况。
添加监听器:请右键单击线程组(或取样器) > 添加 > 监视器 > 具体的监视器。这里以最常用的 “查看结果树” 为例。

第 6 步:运行测试计划,查看报告
测试人员完成测试计划的配置后,可以运行测试计划并收集测试结果。测试人员可以通过监听器生成报告,并根据结果调整测试计划的配置。
等用例运行结束,可以在配置不同的监视器中看到对应的结果。
查看结果树:

汇总报告:

图形结果:

技巧
使用 CSV 数据文件
如果你需要模拟多种场景,可以使用 CSV 数据文件。你可以将不同的请求参数保存在 CSV 文件中,然后在 JMeter 中使用 CSV 数据文件配置请求参数。这样可以快速地生成多个测试用例,提高测试效率。
使用 JMeter 插件
JMeter 插件 有很多可以扩展其功能。例如,你可以使用 JSON Path Extractor 插件,从接口返回的 JSON 数据中提取特定的字段。你还可以使用 Response Assertion 插件,验证接口返回的结果是否符合预期。
如果你需要使用插件,你需要按照以下步骤进行安装:
1、下载插件管理器
首先,你需要下载 JMeter 插件管理器。插件管理器是一个用于安装和升级 JMeter 插件的工具。你可以在官方网站上下载最新版本的插件管理器。
2、安装插件管理器
将下载好的插件管理器文件复制到 JMeter 的 lib/ext 目录下,并重启 JMeter。
3、安装插件
打开 JMeter 并选择 Options -> Plugins Manager。在 Plugins Manager 界面中,你可以搜索要安装的插件,并点击 Install 按钮进行安装。
4、重启 JMeter
完成插件的安装后,你需要重启 JMeter 才能使其生效。
使用分布式测试
如果你需要模拟大量并发用户访问接口,可以使用 JMeter 的分布式测试功能。你可以将测试计划分发到多个 JMeter 客户端,同时运行多个线程组,模拟大量并发用户访问接口。这样可以提高测试效率,发现接口的性能问题。
总之,使用 JMeter 进行接口 自动化测试 是一种快速、高效、可靠的测试方法。通过合理的配置和技巧,可以发现接口的性能问题,提高应用程序的质量和稳定性。
更多 Jmeter 使用技巧:
- JMeter 压力测试入门指南
- 如何使用 JMeter 进行 HTTPS 请求测试?
相关文章:
JMeter 接口自动化测试:从入门到精通的完全指南
JMeter 是一个开源的负载测试工具,它可以模拟多种协议和应用程序的负载,包括 HTTP、FTP、SMTP、JMS、SOAP 和 JDBC 等。在进行接口自动化测试时,使用 JMeter 可以帮助我们快速地构建测试用例,模拟多种场景,发现接口的性…...
【Java】集合List的toArray()方法及其重载
在Java中,集合(List 接口的实现类)提供了一个名为 toArray 的方法,用于将集合中的元素转换成数组。该方法有两个主要的重载形式,分别用于不同的情况。 toArray()重载方法1 <T> T[] toArray(T[] a)这个方法将集…...
Python学习笔记:Requests库安装、通过url下载文件
1.下载安装requests库 在pipy或者github下载,通常是个zip,解压缩后在路径输入cmd,并运行以下代码 Python setup.py install 安装完成后,输入python再输入import requests得到可以判断时候完成安装 2.通过url下载文件 使用的是u…...
git pull --rebase 用法
git pull --rebase git pull --rebase 是 Git 命令中的一个选项,它的作用是在从远程仓库拉取更新时使用 rebase 而不是默认的合并方式。使用这个命令会使您的提交历史更加整洁,因为它将您的本地提交在远程更新之前重新应用到新的提交之上。 这个命令的…...
react antd框架中的徽标获取数据对应状态的数量
实现思路:获取数量的思路是通过filter过滤符合数据来实现。 列表数组.filter(item > item.status 值).length; 例子:以下这个例子是判断data数组中的status中在职的数量。 data.filter((item) > item.status 在职).length 效果展示ÿ…...
【多线程】Thread类的用法
文章目录 1. Thread类的创建1.1 自己创建类继承Thread类1.2 实现Runnable接口1.3 使用匿名内部类创建Thread子类对象1.4 使用匿名内部类创建Runnable子类对象1.5 使用lambda创建 2. Thread常见的构造方法2.1 Thread()2.2 Thread(Runnable target)2.3 Thread(String name)2.4 Th…...
第八章 贪心算法 part03 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果 (day34补)
本文章代码以c为例! 一、力扣第1005题:K 次取反后最大化的数组和 题目: 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择…...
Android Activity启动过程一:从Intent到Activity创建
关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、概览二、应用内启动源码流程 (startActivity)2.1 startActivit…...
第9章:聚类
聚类任务 性能度量 距离度量 非度量距离 原型聚类 有很好的统计学上的意义,但是只能找到椭球形的聚类。 密度聚类 层次聚类...
程序员为什么要写bug,不能一次性写好吗?
仅仅听到“Bug”这个词就会让你作为一个开发人员感到畏缩。我们相信,优秀的程序员是那些编写无错误代码的人。随着一些开发人员强调要成为一名零错误程序员,我们进行了更深刻的思考,并发现事实的准确性。 所有制作的软件都应该没有错误。对此…...
Nginx反向代理其他服务
Nginx反向代理 嘿,你的网络遇到了限制,不能直接通过服务的端口进行访问?别担心,我们可以借助Nginx这个超级英雄来解决这个问题!让我给你讲讲关于Nginx反向代理的故事吧。 首先,让我们明确一下反向代理的概…...
MQ 简介-RabbitMQ
一. MQ 简介 消息队列作为高并发系统的核心组件之一,能够帮助业务系统结构提升开发效率和系统 稳定性,消息队列主要具有以下特点: 削峰填谷:主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题系统解耦:解决不同重要程度、不…...
强化学习(2)
强化学习(1) 1.多智能体深度强化学习重要性采样 多智能体深度强化学习(Multi-Agent Deep Reinforcement Learning,MADRL)是指在多智能体环境下使用深度强化学习算法进行协同学习。重要性采样(Importance Sampling)是…...
Visual Studio 2022的MFC框架——theApp全局对象
我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 MFC中的WinMain函数是如何与MFC程序中的各个类组织在一起的呢?MFC程序中的类是如何与WinMain函数关联起来的呢?…...
SpringBoot Cache
一、基本概念 Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如: • EHCache • Caffeine …...
vue 简单实验 自定义组件 component
1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"components-demo"><button-counter></button-counter> </div> <script> // 创建一个Vue 应用 const ap…...
C++ 改善程序的具体做法 学习笔记
1、尽量用const enum inline替换#define 因为#define是做预处理操作,编译器从未看见该常量,编译器刚开始编译,它就被预处理器移走了,而#define的本质就是做替换,它可能从来未进入记号表 解决方法是用常量替换宏 语言…...
Unity 之 GameObject.Find()在场景中查找指定名称的游戏对象
文章目录 GameObject.Find 是 Unity 中的一个函数,用于在场景中查找指定名称的游戏对象。这个函数的主要作用是根据游戏对象的名称来查找并返回一个引用,使您能够在代码中操作该对象。以下是有关 GameObject.Find 的详细介绍: 函数签名&…...
flink on yarn with kerberos 边缘提交
flink on yarn 带kerberos 远程提交 实现 flink kerberos 配置 先使用ugi进行一次认证正常提交 import com.google.common.io.Files; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.flink.client.cli.CliFrontend; import o…...
NodeJS的简介以及下载和安装
本章节会带大家下载并安装NodeJs 以及简单的入门,配有超详细的图片,一步步带大家进行下载与安装 NodeJs简介关于前端与后端Node是什么?为什么要学习NodeNodeJS的优点: NodeJS的下载与安装NodeJS的下载: NodeJS的快速入…...
如何使用Tutorial-Codebase-Knowledge实现Docker Swarm集群部署的终极指南
如何使用Tutorial-Codebase-Knowledge实现Docker Swarm集群部署的终极指南 【免费下载链接】Tutorial-Codebase-Knowledge Pocket Flow: Codebase to Tutorial 项目地址: https://gitcode.com/gh_mirrors/tu/Tutorial-Codebase-Knowledge Tutorial-Codebase-Knowledge&a…...
React与Next.js构建电商前端:从技术选型到性能优化的完整实践
1. 项目概述:一个电商前端的“肌肉记忆”式构建最近在逛GitHub的时候,看到了一个名为“Nike-Ecommerce”的项目,作者是ItsSanthoshHere。点进去一看,是一个仿耐克官网的电商前端项目。说实话,这类项目在开发者社区里并…...
孔子学院年度报告(2006-2024)缺2019
2024年是孔子学院成立20周年,全球孔子学院以“20岁,孔子学院正青春”为主题,在教育教学、文化交流、数字化建设等多方面取得丰硕成果,持续成为中外语言互通与文明互鉴的重要桥梁。截至2024年底,全球161个国家和地区已设…...
宇树科技推全球首款65万美元可量产载人机甲GD01,变形能力却有局限?
宇树科技跨界:小众科幻技术新尝试在人形机器人领域已小有名气的宇树科技,此次将触角伸向了更为小众的科幻技术——巨型机甲套装,推出了号称“全球首款可量产的载人机甲”GD01,售价仅65万美元。这一举动,无疑是其在机器…...
AI智能体如何通过MCP协议标准化调用外部工具
1. 项目概述:当AI智能体学会“使用工具” 最近在探索AI智能体开发时,我遇到了一个非常有意思的项目: agentsimdev/agentsim-mcp 。乍一看这个名字,可能有些朋友会感到困惑,这“MCP”是什么?是“模型上下文…...
ESP32-S3物联网开发实战:从ADC采样到MQTT云端通信
1. 项目概述:从传感器到云端的数据之旅在物联网项目的开发中,我们常常需要解决一个核心问题:如何让物理世界的信息被数字系统感知、处理,并最终在云端呈现或接受远程控制?这背后涉及三个关键环节:感知、处理…...
立创EDA专业版保姆级避坑指南:从原理图到PCB的53个关键操作点详解
立创EDA专业版高效避坑实战手册:53个关键操作点深度解析 在电子设计自动化领域,立创EDA专业版以其友好的中文界面和丰富的功能库,成为众多工程师和学生首选的PCB设计工具。然而,从原理图设计到PCB布局的完整流程中,存在…...
基于GPT的学术论文智能阅读工具:ChatGPT-Paper-Reader实战指南
1. 项目概述与核心价值如果你和我一样,经常需要阅读大量的学术论文,尤其是那些动辄十几页、公式图表密布的PDF文件,那你一定体会过那种“望文生畏”的感觉。一篇论文的核心创新点、实验细节、数据对比,往往散落在各个章节…...
5分钟掌握Windows免安装:Postman便携版终极实战指南
5分钟掌握Windows免安装:Postman便携版终极实战指南 【免费下载链接】postman-portable 🚀 Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable 你是否曾在客户现场调试API时,因系统权限限制…...
Midjourney Pro订阅后必须立即配置的4项安全策略(含会话隔离等级、生成日志留存周期与团队权限熔断机制)
更多请点击: https://intelliparadigm.com 第一章:Midjourney Pro订阅后的安全策略总览 完成 Midjourney Pro 订阅后,账户权限提升与 API 接入能力开放同步带来新的安全责任。平台虽默认启用双因素认证(2FA)和会话隔…...
