【测试沉思录】21. 如何用 JMeter 编写性能测试脚本?

news2024/11/18 5:52:56

作者:宋赟 编辑:毕小烦

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

1. 编写 HTTP 性能测试脚本

STEP 1. 添加 HTTP 请求

img

STEP 2. 了解配置信息

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

如下图所示:

  • **Web服务器:**指定协议、HTTP 请求的主机地址和端口号,不需要加上“http://”,JMeter 会自动加上,一般的 Web 服务端口号默认是 80,如果你访问的地址中带有其他端口号在此填入,协议根据目标地址实际情况填入 httphttps
  • **客户端实现:**实现里面有 HttpClient4Java 两个选项。HTTPClient4 可以看成是一个没有界面的浏览器,可以通过它高效的访问Http协议的资源;Java 选项是使用 JDK 提供的 net 包中的工具类来访问。
  • **方法:**下拉列表中有 8 个选项,我们常用的是 POST 和 GET。GET 是提交请求时将参数连接在浏览器地址栏,且长度有限制(1 MB 以内);POST 提交请求没有长度限制,用户一般也看不到提交的内容,相对来说安全些,其他相关选项请大家自行参考 HTTP 协议。
  • **路径:**除去主机地址部分的访问链接。
  • **内容编码:**字符编码格式,默认是 iso8859,一般写成 UTF-8 即可,当然也可以和开发人员确认。
  • **自动重定向:**自动重定向可以自动转向到最终目标页面,但 JMeter 是不记录重定向过程内容的,勾选了这一项后,【跟随重定向】则会失效,且无法做关联。
  • **跟随重定向:**HTTP 请求的默认选项,当响应 code3xx 时,自动跳转到目标地址。与自动重定向不同,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 请求 + 消息体数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vTHhiZC-1670241566972)(https://cdn.nlark.com/yuque/0/2022/png/12443024/1667203503971-476b6771-2798-4e1c-8d9f-a64f506fe5e0.png)]

  1. POST 请求 + 文件上传

STEP 3. 响应断言

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89EQa4zd-1670241566972)(https://cdn.nlark.com/yuque/0/2022/png/12443024/1667207902090-aac27328-8832-4eb6-abf4-ac2f7d59c16f.png)]

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

  • **名称和注释:**可以随意设置,最后有业务意义。

  • **Apply to:**应用范围,有 4 个选项

    • **Main sample and sub-samples:**匹配范围包括当前父取样器并覆盖子取样器
    • **Main sample only:**匹配范围是当前父取样器
    • **Sub-sample only:**仅匹配子取样器
    • **JMeter Variable:**支持JMeter变量值进行匹配
  • 测试字段:对响应数据的不同部分进行匹配,有 7 个选项。

    • **响应文本:**返回的文本内容

STEP 4. 调试脚本

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0uvgrP7-1670241566973)(https://cdn.nlark.com/yuque/0/2022/png/12443024/1669282076262-23ec4d07-bc66-4f00-85f7-97657f4ca628.png)]

  • **名称:**自定义内容,默认为察看结果树,可为空。
  • **注释:**默认为空,可以为空,自定义内容。
  • **所有数据写入一个文件:**可以将结果保存,这里是一个路劲地址。
  • **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 请求中类名称中选择自己上传的类,在参数栏填入相关参数内容。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4de3G87B-1670241566974)(https://cdn.nlark.com/yuque/0/2022/png/12443024/1669362853559-76be1d85-0a8e-4e18-8dc1-5c6fbfdf64ab.png)]

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

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

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

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

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

总结

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

(完)

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

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

相关文章

【强化学习论文合集】十.2018智能体和多智能体系统国际联合会议论文(AAMAS2018)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

十四、SpringBoot-自动装配原理

十四、SpringBoot-自动装配原理 SpringBoot与Spring比较起来,优化的点主要有: 自动配置:是一个运行时(应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪…

软件测试基础丨测试工程师之间要善于发现闪光点——测试理念篇

测试理念有多种,有一些理念,深藏于我的心中, 而这些理念,您或许偶尔想到,却没有说出,或许您感受到了,却因为工作生活的忙碌,没有将其背后的含义想具体, 在此我非常愿意和…

零基础小白hadoop分布式集群环境搭建(超详细)

搭建集群所需要安装包 虚拟机、ubuntu镜像文件、jdk安装包、hadoop安装包 百度云盘地址: 链接:https://pan.baidu.com/s/1ejVamlrlyoWtJRo1QQqlsA提取码:fcqm 本文的环境是两台windows笔记本,在每台笔记本上安装一个虚拟机&…

超详细的水果FL Studio21最新版更新全功能详细介绍!80项更新与改进!

万众期待的 FL Studio 21 版本将于正式发布上线,目前在紧锣密鼓的安排上线中,届时所有购买正版 FL Studio 的用户,都可以免费升级到21版!按照惯例,本次新版也会增加全新插件,来帮助大家更好地创作。今天先给…

SMART原则介绍

一、SMART原则简介 什么是SMART原则? SMART原则(S=Specific、M=Measurable、A=Attainable、R=Relevant、T=Time-bound)是为了利于员工更加明确高效地工作,更是为了管理者将来对员工实施绩效考核提供了考核目标和考核标准,使考核更加科学化、规范化,更能保证考核的公正、…

五万字详解“GoF”的23种设计模式

大家好,我是栗筝i,近期我总结梳理了 “GoF”的 23 种设计模式,并使用 Java 对每种设计模式都进行了伪代码与 Demo 实现,并总结了每种设计模式的应用场景,优缺点,UML图等相关内容,字/词数达到了5…

Java中的String

/*** 关于java.lang.String类* 1、String表示字符串类型,属于引用数据类型,不属于基本数据类型* 2、在java中用双引号括起来的都是String对象* 3、java中规定,字符串是不可变的* 4、字符串存储在方法区的字符串常量池当中*/ …

单例模式(python)

一、模式定义 1. 单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 2. 单例模式的要点有三个: 某个类只能有一个实例 必须自…

[激光原理与应用-41]:《光电检测技术-8》- 白光干涉仪

目录 第1章 白光干涉仪概述 第2章 常见干涉仪 2.1 激光量块干涉仪 2.2 白光干涉测量表面形貌的系统 第1章 白光干涉仪概述 用于光在两个不同表面反射后形成的干涉条纹进行分析的设备。 干涉仪是一种对光在两个不同表面反射后形成的干涉条纹进行分析的仪器。 其基本原理就…

SpringColud——Ribbon(负载均衡)Hystrix(熔断器)

目录 1、Ribbon 1.1、什么是Ribbon(负载均衡) 1.2、创建两个user-service实例 1.3、开启负载均衡 2、Histrix(熔断器) 2.1、什么是Histrix 2.2、雪崩问题 2.3、服务降级 2.4、开启熔断 2.5、编写降级逻辑 2.6、编写降级…

顶象App加固——助力微投证券融入IOS生态

过去十年里,App几乎重新定义了互联网,如今所有人的智能手机里都有着无数个App。 以App store 为例。最新数据显示,当前61个国家/地区在 App Store 现存的App总数为29,085,727。其中虽包含重复的App,但也可见在不同国家/地区&…

毕业设计 基于STM32单片机的老人防摔倒报警系统 - 物联网 嵌入式

文章目录0 前言1 整体设计2 硬件电路3 软件设计4 跌倒检测算法5 关键代码6 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉…

Partition of an interval

In mathematics, a partition of an interval [a, b] on the real line is a finite sequence x0, x1, x2, …, xn of real numbers such that a x0 < x1 < x2 < … < xn b. In other terms, a partition of a compact interval I is a strictly increasing seq…

《小白WEB安全入门》01. 扫盲篇

扫盲篇基础知识什么是WEB什么是前端什么是后端什么是数据库什么是协议什么是WEB安全什么是服务器什么是IP地址、端口什么是局域网、广域网、内网、外网什么是URL什么是MAC地址什么是&#xff08;端口&#xff09;映射什么是域名、DNS什么是网卡、网关什么是IPv4/IPv6什么是Linu…

51单片机的温控风扇设计

一.硬件方案 系统采用51单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值&#xff0c;测得温度值在高低温度之间时打开风扇弱风档&#xff0c;当温度升高超过所设定的温度时自动切换到大风档&#xff0c;当温度小于所设定的温度时自动关闭风扇。风扇控制状态随…

论坛系统设计与实现

摘 要 网络技术的快速发展给各行各业带来了很大的突破&#xff0c;也给各行各业提供了一种新的管理模块&#xff0c;对于论坛交流将是又一个传统管理到智能化信息管理的改革&#xff0c;设计论坛系统设计与实现的目的就是借助计算机让复杂的论坛交流操作变简单&#xff0c;变…

第8部分 帧中继

帧中继线路是中小企业常用的广域网线路&#xff0c;其通信费用较低。由于帧中继技术的一些特殊性使得帧中继的配置较为复杂&#xff0c;特别是在帧中继上运行路由协议时更是如此。作为入门&#xff0c;对帧中继的理解应着重放在DLCI、PVC、帧中继映射和子接口等概念上。本章通过…

Redis--高级篇 D5 多级缓存(JVM进程缓存、Lua语法、OpenResty安装(通过lua扩展nginx))

1、JVM进程缓存 1.1 导入商品查询案例 案例导入说明 为了演示多级缓存&#xff0c;我们先导入一个商品管理的案例&#xff0c;其中包含商品的CRUD功能。我们将来会给查询商品添加多级缓存。 1.安装MySQL 后期做数据同步需要用到MySQL的主从功能&#xff0c;所以需要大家在虚…

【Pytorch】.item() 方法介绍

文章目录一、.item() 方法介绍1. 方法介绍2. 那么有什么用呢&#xff1f;二、实例参考链接一、.item() 方法介绍 1. 方法介绍 我们先看官网中是怎么介绍的&#xff1a; 返回这个张量的值作为一个标准的Python数字。 详情页中说&#xff1a; # TORCH.TENSOR.ITEM Tensor.ite…