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

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 性能测试脚本的步骤,并且给出了性能测试脚本的参考规范,希望对大家有帮助。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

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

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

相关文章

Vue3路由引入报错解决:无法找到模块“xxx.vue”的声明文件 xxx隐式拥有 “any“ 类型。

这类情况应该遇见过吧,这是因为 TypeScript只能理解 .ts 文件,无法理解 .vue 文件。 解决方法:在项目的根目录或者src文件夹下创建一个后辍为 文件名.d.ts 的文件,并写入一下内容: declare module *.vue {import { …

前端基础一:用Formdata对象来上传图片的原因

最近有人问:你是否能用json来传图片,其实应该这么理解就对了。 一、上传的数据体格式Content-Type 1.application/x-www-form-urlencoded 2.application/json 3.multipart/form-data 以上三种类型旨在告诉服务器需要接收的数据类型同事要…

OpenCV实现人脸关键点检测

目录 实现过程 1,代码解读 1.1 导入工具包 1.2导入所需图像,以及训练好的人脸预测模型 1.3 将 dlib 的关键点对象转换为 NumPy 数组,以便后续处理 1.4图像上可视化面部关键点 1.5# 读取输入数据,预处理 1.6进行人脸检测 1…

解决Win10电脑无线网卡的移动热点无法开启问题

一、目的 利用无线网卡连接网络,然后又用无线网卡通过移动热点分享该网络。 移动热点,简单地说,就是将台式机或笔记本的 Internet 连接转化成 WIFI 信号以供移动设备无线上网的功能,硬件前提是电脑须安装有无线网卡。 二、问题 …

JVM第三讲:JVM 基础-字节码的增强技术详解

JVM 基础-字节码的增强技术详解 本文是JVM第三讲,JVM 基础-字节码的增强技术。在上文中,着重介绍了字节码的结构,这为我们了解字节码增强技术的实现打下了基础。字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术…

Stable Diffusion 动画animatediff-cli-prompt-travel

基于 sd-webui-animatediff 生成动画或者动态图的基础功能,animatediff-cli-prompt-travel突破了部分限制,能让视频生成的时间更长,并且能加入controlnet和提示词信息控制每个片段,并不像之前 sd-webui-animatediff 的一套关键词控制全部画面。 动图太大传不上来,凑合看每…

10月14日,每日信息差

今天是2023年10月14日,以下是为您准备的8条信息差 第一、中国石油摘得日本碳信用实货交易首单。据了解,日本交易所集团旗下的东京证券交易所11日宣布,交易二氧化碳排放量的“碳信用市场”正式开始运营 第二、前三季度全国铁路投产新线1402公…

【C++】哈希对unordered_map和unodered_set的封装

🚀write in front🚀 📜所属专栏: C学习 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最大…

Godot 单元测试

前言 单元测试是我们常用的功能,Godot作为一个游戏,单元测试和热重载是我们常用的功能。这里我们讲解最简单的单元测试的情况。 Godot 配置 我们添加一个最简单的节点,挂载一个最简单的脚本。 添加测试方法(只能是静态方法&…

【Python】Python语言基础(中)

第十章 Python的数据类型 基本数据类型 数字 整数 整数就是整数 浮点数 在编程中,小数都称之为浮点数 浮点数的精度问题 print(0.1 0.2) --------------- 0.30000000000000004 ​​1.可以通过round()函数来控制小数点后位数 round(a b),则表示…

Linux该如何学习,给你支招

如果你已经确定对 Linux 产生了兴趣,那么接下来我们介绍一下学习 Linux 的方法。这只是自己关于学习Linux的建议。 一、如何去学习 学习大多类似庖丁解牛,对事物的认识一般都是由浅入深、由表及里的过程,循序才能渐进。学习 Linux 同样要有一…

关于RNNoise、webrtc_ns、三角带通滤波器、对数能量

语音特征参数MFCC提取过程详解 其中讲解了:三角带通滤波器 、计算每个滤波器组输出的对数能量、对数能量、经离散余弦变换(DCT)得到MFCC系数 推荐阅读某乎这位大佬的全部文章: 下面是几篇出自这位大佬的很好的文章: …

SSH 基础学习使用

什么是SSH 1.SSH SSH(Secure Shell) 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议,利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。 实际应用中,主要用于保证远程登录和远程通信的安全&#…

微信小程序入门讲解【超详细】

一. 微信小程序简介 1.1 什么是小程序 2017年度百度百科十大热词之一 微信小程序(wei xin xiao cheng xu),简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用( 张小龙对其的定义是无需安装&#xf…

如何创建自定义前端组件?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

VScode运行C/C++

VScode运行C/C VScode的安装这里不讲 一、mingw64的下载 二、VS code打开文件夹与创建C文件 ----------------这一步给萌新看,有C和VScode的基础可跳过---------------- 1.创建一个文件夹 2.vscode打开刚刚创建的文件夹 3.新建文件,在输入文件名1.c后…

Unity实现摄像机向屏幕中间发射射线射击物体

1.创建一个准星放在屏幕中间 外部找个PNG透明图,拖到Unity文件夹,右上角改成精灵sprite2d 2.添加到UI画布 3.写脚本 首先,我们需要引入一些 "工具",就像我们在玩游戏时要先下载游戏客户端一样。这里的 "工具&quo…

iOS- flutter flavor 多环境Configurations配置

一、点击PROJECT的Runner,选择Info选项,在Configurations下方的号添加不同环境的配置,如下图: 二、选择TAGETS的Runner项目,选择Build Settings选项,在输入框输入package,为不同环境配置相应的…

UML组件图综合指南:设计清晰、可维护的软件系统

介绍: UML(Unified Modeling Language)组件图是软件系统设计中的重要工具,用于描绘系统的物理结构和组件之间的关系。在软件工程中,通过创建清晰的组件图,团队能够更好地理解系统的模块化结构和组织关系&a…

二十四、【参考素描三大面和五大调】

文章目录 三种色面(黑白灰)五种色调 这个可以参考素描对物体受光的理解:素描调子的基本规律与素描三大面五大调物体的明暗规律 三种色面(黑白灰) 如下图所示,我们可以看到光源是从亮面所对应的方向射过来的,所以我们去分析图形的时候,首先要…