8年经验之谈 —— 如何用 JMeter 编写性能测试脚本?

news2024/10/5 15:29:38

Apache JMeter 应该是应用最广泛的性能测试工具。怎么用 JMeter 编写性能测试脚本?

1. 编写 HTTP 性能测试脚本

STEP 1. 添加 HTTP 请求

i

STEP 2. 了解配置信息

HTTP 请求各项信息说明(以 JMeter 5.1 为例)。

如下图所示:

  • Web服务器:指定协议、HTTP 请求的主机地址和端口号,不需要加上“http://”,JMeter 会自动加上,一般的 Web 服务端口号默认是 80,如果你访问的地址中带有其他端口号在此填入,协议根据目标地址实际情况填入 http 或 https
  • 客户端实现:实现里面有 HttpClient4 和 Java 两个选项。HTTPClient4 可以看成是一个没有界面的浏览器,可以通过它高效的访问Http协议的资源;Java 选项是使用 JDK 提供的 net 包中的工具类来访问。
  • 方法:下拉列表中有 8 个选项,我们常用的是 POST 和 GET。GET 是提交请求时将参数连接在浏览器地址栏,且长度有限制(1 MB 以内);POST 提交请求没有长度限制,用户一般也看不到提交的内容,相对来说安全些,其他相关选项请大家自行参考 HTTP 协议。
  • 路径:除去主机地址部分的访问链接。
  • 内容编码:字符编码格式,默认是 iso8859,一般写成 UTF-8 即可,当然也可以和开发人员确认。
  • 自动重定向:自动重定向可以自动转向到最终目标页面,但 JMeter 是不记录重定向过程内容的,勾选了这一项后,【跟随重定向】则会失效,且无法做关联。
  • 跟随重定向:HTTP 请求的默认选项,当响应 code 是 3xx 时,自动跳转到目标地址。与自动重定向不同,JMeter 会记录重定向过程中的所有请求响应,在查看结果树中可以看到服务器返回的内容,选了这个可以对响应内容做关联。
  • 使用 KeepAlive:HTTP 请求的默认选项,对应 HTTP 响应投中的 Connection:keep-Alive
  • 对 POST 使用multipart/form-data:这个属性是和方法 POST 绑定的,一般文件上传时会用到它。
  • 与浏览器兼容的头:浏览器兼容模式,若选了【对 POST 使用 multipart/form-data】,建议也勾选此项。
  • 同请求一起发送参数:填要发送的参数和值的区域,参数项是以 key 和 value 形式填写,消息体数据是以JSON 格式填写,文件上传项需要填写文件名称、参数名称和 MIME 类型,如果你不知道 MIME 类型,可咨询开发人员或使用抓包工具查看。

填好以上这些选项后,HTTP 单接口就准备的差不多了,这里给 GET、POST、文件上传三个示例图,供参考。

  1. GET 请求 + 参数

  1. POST 请求 + 消息体数据

  1. POST 请求 + 文件上传

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

STEP 3. 响应断言

脚本制作原则里有说到每个请求必须要有响应断言,是因为若对接口返回不做判断的话,我们无法判断请求的有效性,从而无法评估出性能测试的真实性,故每个请求必须要有响应断言。接下里我们看看响应断言。

断言是通过获取服务器响应数据,再根据断言规则去匹配这些响应数据;若匹配到了是正常现象,不会进行任何提示,若匹配不到,JMeter 则会断定这个请求失败,在后面调试脚本中我们会看到查看结果树中的请求名称是红色字体。断言组件有很多,我这里讲到的响应断言基本能满足 80% 以上的断言需求。

首先,我们增加断言,在请求名称上右键->添加->断言->响应断言:

再说说响应断言中一些参数的意义:

  • 名称和注释:可以随意设置,最后有业务意义。
  • Apply to:应用范围,有 4 个选项
  •  
    • Main sample and sub-samples:匹配范围包括当前父取样器并覆盖子取样器
    • Main sample only:匹配范围是当前父取样器
    • Sub-sample only:仅匹配子取样器
    • JMeter Variable:支持JMeter变量值进行匹配
  • 测试字段:对响应数据的不同部分进行匹配,有 7 个选项。
  •  
    • 响应文本:返回的文本内容

STEP 4. 调试脚本

写好脚本后,接下来是调试脚本,JMeter 一般是结合察看结果树来调试脚本,可以从察看结果树元件中看到服务器的返回信息。察看结果树会显示取样器的每一次请求,若是有大量的请求,在压测时建议关闭,否则会比较消耗压测机资源。

察看结果树这元件一般只用来调试脚本,这里也大概科普下察看结果树各项参数用途。

  • 名称:自定义内容,默认为察看结果树,可为空。
  • 注释:默认为空,可以为空,自定义内容。
  • 所有数据写入一个文件:可以将结果保存,这里是一个路劲地址。
  • Text 下拉列表:显示请求内容的形式列表,这个下拉列表里有 Text、Xpath Tester、JSON 等。
  • 取样器结果:显示取样器结果,这里的信息和浏览器上展示的内容差不多。
  • 请求:展现请求表单内容,不同的取样器有不同显示格式。
  • 响应数据:显示服务器响应数据,分为 Response Body 和 Response headers,提供了查询功能,也可以区分大小写查询和正则表达式查询。

2. 编写 Dubbo 性能测试脚本

STEP 1. 将我们自己实现的请求 Dubbo 的服务打成 jar 包放到 JMeter/lib/ext 目录下。

STEP 2. 打开 JMeter,添加线程组,在线程组中添加 Java 请求。

STEP 3. 在 Java 请求中类名称中选择自己上传的类,在参数栏填入相关参数内容。

STEP 4. 对 Java 请求增加相应断言以及通过察看结果树调试脚本,和 HTTP 脚本一致,不再赘述。

3. 编写性能测试脚本的参考规范

代码有编码规范,写脚本也有规范,比较推荐的规范是:

  • 脚本中只能有一个测试计划。JMeter 脚本在客户端界面中展示的树型结构,测试计划是根节点,根节点只能是一个。
  • 测试计划中至少有一个线程组。JMeter 执行压测都是从线程组发起的,所以测试计划中至少要有一个线程组,另外 JMeter 支持多个线程组。
  • 至少要有一个取样器。脚本中若无取样器则是一个空脚本,无法模拟用户请求,无任何执行意义。
  • 每个取样器必须有断言。无断言则无法判断请求是否成功,更无法判断压测有效性。
  • 至少要有一个监听器。非命令行执行脚本时,需要查看执行结果,则会需要有聚合报告等监听器;若使用命令行执行脚本时,则可生成结果文件。监听器是用来展示执行结果,而执行结果则是用来分析系统性能的。
  • 非调试时禁用察看结果树。察看结果树一般是用来调试脚本的,但压测时使用的话,大量的请求返回数据会消耗压测机资源,可能导致压力机性能下降。
  • 减少使用不必要的插件。JMeter 插件是很丰富,但使用不当会影响 JMeter 本身性能,从而导致压力机自身成为压测瓶颈,比如使用监控插件,大量的服务器资源采集会影响压测机的磁盘 IO 及消耗压测机其他资源。

遵循这些规则可以让我们养成良好的习惯,避免不必要的错误。

总结

本文简单介绍了编写 HTTP 和 Dubbo 性能测试脚本的步骤,并且给出了性能测试脚本的参考规范,希望对大家有帮助。

下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

资料获取方式 :

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

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

相关文章

MindsDB为许多不支持内置机器学习的数据库带来了机器学习功能

选择平台的首要原则是“靠近数据”,让代码靠近数据是保持低延迟的必要条件。 机器学习,特别是深度学习往往会多次遍历所有数据(遍历一次被称为一个epoch)。对于非常大的数据集来说,理想的情况是在存储数据的地方建立模型,这样就不需要大量的数据传输。目前已经有部分数据…

如何基于CEETRON ENVISON快速打造桌面、Web端仿真后处理系统?

数十年来,计算机数字模拟技术在物理、化学、工程等领域取得巨大进展。但实现完整的数字孪生 以模拟现实,仍需应对高维度、高精度建模的挑战以及计算机算力需求指数的增长。那该如何解决 这些更复杂的问题?采用具有高性能算力的云端资源进行…

【单片机】有人 WH-LTE-7S1 4G cat1 模块,HTTPD模式,字符串传输,文件传输。GPRS模块连接服务器教程。

文章目录 1、配置模块为HTTPD模式 POST字符串传输2、配置模块为HTTPD模式 GET请求3、 上一篇文章:https://qq742971636.blog.csdn.net/article/details/132571592 在上一篇文章里,已经通过TCP 长链接进行服务器与Cat1 GPRS 模块进行双向通信。已经能够满…

【Pinia状态管理】Pinia和Vuex的对比;创建Pinia的Store;Pinia核心概念State、Getters、Actions

目录 1_Pinia和Vuex的对比1.1_介绍pinia1.2_Pinia和Vuex的区别 2_创建Pinia的Store2.1_安装使用2.2_Store2.3_定义一个Store 3_Pinia核心概念State3.1_认识和定义State3.2_操作State 4_Pinia核心概念Getters4.1_认识2.2_访问Getters 5_Pinia核心概念Actions5.1_认识5.2_Actions…

Nat. Mach. Intell 2023 | DrugBAN+:域自适应的可解释双线性插值网络改进药物-靶标预测(DTI)

DrugBAN:Interpretable bilinear attention network with domain adaptation improves drug–target prediction 论文:Interpretable bilinear attention network with domain adaptation improves drug–target prediction | Nature Machine Intellige…

Python爬虫基础之正则表达式

目录 一、什么是正则表达式? 二、re.compile()编译函数 三、group()获取匹配结果函数 四、常用匹配规则 4.1匹配单个字符 4.2匹配前字符次数 4.3匹配原生字符串 4.4匹配字符串开头和结尾 4.5分组匹配 五、re.match()开头匹配函数 六、re.search()全文搜索…

MusicBrainz Picard for Mac :音乐文件ID3编辑器

MusicBrainz Picard for Mac是一款macOS平台的音乐文件ID3编辑器,能够帮助我们在Mac电脑上编辑音乐文件的ID3标签信息,包括艺人、专辑等信息,非常快速和简单方便。Picard是下一代MusicBrainz标记应用程序。 这个新的标签概念是面向专辑的&…

Socks5代理 vs. Socks4代理:特点和区别解析

在网络通信中,使用代理服务器可以提供更安全、匿名的连接。其中,Socks5和Socks4是两种常见的代理协议。本文将深入探讨它们之间的特点和区别,帮助您选择适合自己需求的代理类型。 1.特点概述 -Socks5(Socket Secure 5&#xff0…

数字孪生+燃气管理,解锁智慧燃气管理新模式

文章来源:网络 关键词:智慧燃气、智慧燃气数字化、数字孪生、智慧燃气平台、设备设施数字化 智慧燃气作为新兴行业应用,是智慧城市必不可少的一部分,而数字孪生是推动智慧燃气数字化、智能化发展的新动能。 01燃气行业现状 1…

vue3-vuex持久化实现

vue3-vuex持久化实现 一、背景描述二、实现思路1.定义数据结构2.存值3.取值4.清空 三、具体代码1.定义插件2.使用插件 四、最终效果 一、背景描述 有时候我们可能需要在vuex中存储一些静态数据,比如一些下拉选项的字典数据。这种数据基本很少会变化,所以…

element表格底部合计功能--给定的多维数组和键值获取函数,创建一个可查找特定键对应值的函数(JS自己写函数)

效果图如下: 代码: import { flattenDeep } from "lodash";export function getFinder(array, getKey, getVal (item, index) > item) {const store new Map();const eles flattenDeep(array);eles.forEach((ele, index) > {const ke…

opencv鼠标事件函数setMouseCallback()详解

文章目录 opencv鼠标事件函数setMouseCallback()详解1、鼠标事件函数:(1)鼠标事件函数原型:setMouseCallback(),此函数会在调用之后不断查询回调函数onMouse(),直到窗口销毁(2)回调函…

Virtuoso: 工艺库、仿真模型

1、添加仿真模型时,仿真模型有.scs和.lib的格式, 感谢这个大佬的解惑!附上他的文章链接:Virtuoso 工艺库安装方法(小白版) - 知乎 添加.lib格式模型就如下: 2、各大MOS的Level仿真模型 引用: H…

pytorch异常——RuntimeError:Given groups=1, weight of size..., expected of...

文章目录 省流异常报错异常截图异常代码原因解释修正代码执行结果 省流 nn.Conv2d 需要的输入张量格式为 (batch_size, channels, height, width),但您的示例输入张量 x 是 (batch_size, height, width, channels)。因此,需要对输入张量进行转置。 注意…

Mybatis中 list.size() = 1 但显示 All elements are null

一、Bug展示 二、原因分析 2.1.情形一&#xff1a;Mybatis的XML中返回类型映射错误 <select id"selectByDesc" parameterType"com.task.bean.OrderInfo"resultType"com.task.bean.OrderInfo">select MER_ID,SETTLE_DATE,ICE_NAME,ORDER_S…

十七、命令模式

一、什么是命令模式 命令&#xff08;Command&#xff09;模式的定义&#xff1a;将一个请求封装为一个对象&#xff0c;使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通&#xff0c;这样方便将命令对象进行储存、传递、调用、增加与管理。   命令…

使用element-ui中的el-table回显已选中数据时toggleRowSelection报错

最近在写一个后台&#xff0c;需要在表格中多选&#xff0c;然后点击编辑按钮的时候&#xff0c;需要回显已经选中的表单项 <el-table v-loading"loading" :data"discountList" :row-key"(row) > row.id" refmultipleTable selection-cha…

蓝牙链接上的标准串行 (COMx)

1 Preface/Foreword 电脑与蓝牙设备&#xff08;手机&#xff0c;音响&#xff09;连接时&#xff0c;电脑会虚拟出一个串口设备&#xff0c;并在设备管理其中的串口模块下列出。 2 删除方法 在已配对的设备列表中将设备移除。

【Centos8_配置单节点伪分布式Spark环境】

安装centos8 jdk部署伪分布式spark环境 安装Centos8 环境下的JDK 下载jdk linux版本 下载链接&#xff1a; jdk-8u381-linux-x64.tar.gz 将该文件上传到Centos8 主机 部署配置jdk&#xff08;java8&#xff09; # 解压到指定路径 [lhangtigerkeen Downloads]$ sudo tar …