JMeter 测试脚本编写技巧

JMeter 是一款开源软件,用于进行负载测试、性能测试及功能测试。测试人员可以使用 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 步:运行测试计划,查看报告
测试人员完成测试计划的配置后,可以运行测试计划并收集测试结果。测试人员可以通过监听器生成报告,并根据结果调整测试计划的配置。
等用例运行结束,可以在配置不同的监视器中看到对应的结果。
查看结果树:

汇总报告:

图形结果:

以上是JMeter测试脚本编写的基本步骤。测试人员需要根据具体需求和场景,灵活运用JMeter的各种功能和组件,编写高效、准确的测试脚本。
试试比 JMeter 更好用的 API 工具:Apifox
用 Apifox 做测试脚本更容易。以下是用 Apifox 做测试脚本的方法。
创建接口

调用接口
直接点击 “发送” 按钮就可以看到接口的返回。

添加断言

创建测试用例
编辑测试步骤,配置压测参数。

运行测试用例,查看报告

JMeter 可以用来做性能测试,但在日常工作中,我们还有更多的内容要做: API 设计,API 调试,API Mock 等。我们可能会使用多个工具,但在多个工具之间频繁切换(API 设计工具 Swagger、API 测试工具 JMeter)经常会导致数据不一致和团队协作低效率。
Apifox 是一款更加智能化的 API 设计/开发/测试工具,相较于 JMeter 软件,Apifox 有以下优势:

易于使用
Apifox 提供简单易用的界面和交互方式,用户不需要编写脚本或进行复杂的配置即可完成 API 测试。此外,Apifox 还提供了免费的模板和示例,帮助用户更快地创建 API 请求。
自动化测试
Apifox 提供了自动化测试的功能,用户可以通过自动化测试来减少测试时间和人力成本。用户只需要设置测试计划,Apifox 就可以自动运行测试,并生成测试结果和报告。此外,Apifox 还支持测试套件,可以一次性运行多个测试用例,提高测试效率。
多环境支持
Apifox 支持多个测试环境,用户可以通过切换环境来测试不同的 API。用户只需要设置环境变量,Apifox 就可以自动切换 API 请求的 URL 和参数。此外,Apifox 还支持环境导入和导出,方便用户在不同的设备或团队之间共享测试环境。
协作和分享
Apifox 提供了协作和分享的功能,用户可以与团队成员或其他人分享测试结果和测试数据。用户还可以将测试结果和报告导出为 HTML 格式。此外,Apifox 还支持团队协作和权限管理,可以让团队成员共享 API 设计和测试资源。
总之,相较于 JMeter,Apifox 更加易于使用和智能化,可以帮助用户更高效地进行 API 测试和管理。无论是个人开发者还是企业团队,都可以通过 Apifox 提高 API 测试的效率和质量。因此,越来越多人开始选择使用 Apifox 替代 JMeter。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:
JMeter 测试脚本编写技巧
JMeter 是一款开源软件,用于进行负载测试、性能测试及功能测试。测试人员可以使用 JMeter 编写测试脚本,模拟多种不同的负载情况,从而评估系统的性能和稳定性。以下是编写 JMeter 测试脚本的步骤。 第 1 步:创建测试计划 在JMet…...
力扣6:N字形变化
代码: class Solution { public:string convert(string s, int numRows){int lens.size();if(numRows1){return s;}int d2*numRows-2;int count0;string ret;//第一行!for(int i0;i<len;id){rets[i];}//第k行!for(int i1;i<numRows-1;…...
【上海大学数字逻辑实验报告】一、基本门电路
一、 实验目的 熟悉TTL中、小规模集成电路的外形、管脚和使用方法;了解和掌握基本逻辑门电路的输入与输出之间的逻辑关系及使用规则。 二、 实验原理 实现基本逻辑运算和常用逻辑运算的单元电路称为逻辑门电路。门电路通常用高电平VH表示逻辑值“1”,…...
基于xml配置的AOP
目录 xml方式AOP快速入门 xml方式AOP配置详解 xml方式AOP快速入门 xml方式配置AOP的步骤 导入AOP相关坐标 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version></de…...
java学习part12多态
99-面向对象(进阶)-面向对象的特征三:多态性_哔哩哔哩_bilibili 1.多态(仅限方法) 父类引用指向子类对象。 调用重写的方法,就会执行子类重写的方法。 编译看引用表面类型,执行看实际变量类型。 2.父子同名属性是否…...
前置任务之安装jdk
已经安装过很多次了,但是每次安装都要搜好几次才能找到正确的,离大谱。 1.打开 oracle官网 https://www.oracle.com 然后切换到Java archive 下载192版本的,页面搜索ctrlF,【Java SE Development Kit】或者【jdk-8u192-windows-…...
C++ 常见异常
关于C异常(包括但不限于编译器异常)先开个头,有空都记下来吧: 1:_DllMain12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 有效的解决办法: Debug版本: 项目-属性-链接器-输入:忽略特…...
语音识别学习笔记
目录 开源的语音识别项目 端到端的多说话人语音识别序列化训练方法简介 新一代 Kaldi: Two-pass 实时语音识别 开源的语音识别项目 有哪些语音识别的开源项目? - 知乎 端到端的多说话人语音识别序列化训练方法简介 端到端的多说话人语音识别序列化训练方法简介 …...
深入了解Java8新特性-日期时间API
阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概2000多字,预计阅读时间长需要3分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…...
【数据结构】二叉树概念 | 满二叉树 | 完全二叉树
二叉树的概念 二叉树在实践中用的很多。 一棵二叉树是结点的一个有限集合,该集合: 或者为空;由一个根结点加上两棵别称为左子树和右子树的二叉树组成。二叉树最多两个孩子。 这里注意:二叉树并不是度为2的树。 二叉树的度最大值是…...
第 373 场 LeetCode 周赛题解
A 循环移位后的矩阵相似检查 模拟 class Solution { public:bool areSimilar(vector<vector<int>> &mat, int k) {int m mat.size(), n mat[0].size();k % n;auto g mat;for (int i 0; i < m; i)if (i & 1)rotate(mat[i].begin(), mat[i].begin() …...
C#,《小白学程序》第二十五课:大数乘法(BigInteger Multiply)的Karatsuba算法及源代码
1 文本格式 /// <summary> /// 《小白学程序》第二十五课:大数(BigInteger)的Karatsuba乘法 /// Multiplies two bit strings X and Y and returns result as long integer /// </summary> /// <param name"a">&…...
Redis的五大数据类型详细用法
我们说 Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。本篇博客我们就将介绍这些数据类型的详细使用…...
C++类与对象(6)—初始化列表、explicit关键字、static成员
目录 一、初始化列表 1、定义 2、注意事项 3、尽量使用初始化列表初始化 4、初始化顺序 二、 explicit关键字 1、定义 2、特点 三、static成员 1、定义 2、特性 3、例题 一、初始化列表 下面这段代码可以正常编译: class A { private:int _a1;//成员…...
vue3+tsx的使用
<template><div><xiaoman on-click"getItem" name"似懂非懂"></xiaoman></div> </template><script setup langts>import xiaoman from "./App"const getItem(item:any)>{console.log(item,it…...
JMeter 设置请求头信息的详细步骤
在使用 JMeter 的过程中,我们会遇到需要设置请求头信息的场景。比如: POST 传过去的 Body 数据是 json 格式的。需要填添加头信息:Content-Type:application/json。 在 header 中用 token 来传用户的认证信息。 下面,…...
从零构建属于自己的GPT系列1:预处理模块
1 训练数据 在本任务的训练数据中,我选择了金庸的15本小说,全部都是txt文件 数据打开后的样子 2 数据预处理 数据预处理需要做的事情就是使用huggingface的transformers包的tokenizer模块,将文本转化为token 最后生成的文件就是train_n…...
002、ArkTS
之——开发语言 目录 之——开发语言 杂谈 正文 1.TypeScript基础 1.1 基础类型 1.2 条件语句 1.3 函数 1.4 类 1.5 模块 1.6 迭代器 2.ArkTS 2.1 JAVA SCRIPT 2.2 TS 2.3 ArkTS 编辑 3.示例 3.1 概述性示例 3.2 自定义组件 3.3 渲染控制语法 3.4 状态管…...
如何通过nginx进行服务的负载均衡
简单介绍 随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障的出现。应用集群是将同一应用部署到多台…...
FPGA程序前仿真和后仿真问题处理
参考链接:FPGA程序前仿真和后仿真问题处理 - 知乎...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

