怎么用JMeter写性能测试脚本

2023-05-16

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

一、脚本制作原则

我们一般写代码,都会有代码规范,比如写java有java规范,写python有python开发规范,做测试也有测试规范,那我们写JMeter也有JMeter的脚本原则,那JMeter脚本的制作原则有哪些呢?

比较推荐的规范是:

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

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

二、编写Http脚本

1. 添加 HTTP 请求

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、文件上传三个示例图,供参考。

  • GET 请求 + 参数

  • POST 请求 + 消息体数据

  • POST 请求 + 文件上传

3. 响应断言

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

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

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

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

  • 名称和注释:可以随意设置,最后有业务意义。
  • Apply to:应用范围,有 4 个选项
    • Main sample and sub-samples:匹配范围包括当前父取样器并覆盖子取样器
    • Main sample only:匹配范围是当前父取样器
    • Sub-sample only:仅匹配子取样器
    • JMeter Variable:支持JMeter变量值进行匹配
  • 测试字段:对响应数据的不同部分进行匹配,有 7 个选项。
    • 响应文本:返回的文本内容
    • 响应代码:返回的响应代码,例如http请求返回code为【200】代表成功
    • 响应信息:返回的响应信息,例如服务端返回【sucess】或【0000000】等字样
    • 响应头:返回响应中的头信息
    • 请求头:请求的头信息
    • URL样本:匹配URL链接
    • 文档(文本):对文档内容进行匹配断言
    • 忽略状态:一个请求有多个响应断言,当第一个响应断言失败时忽略此断言,继续进行下一个断言,若下一个断言成功了可以判定该请求是成功的。
    • 请求数据:匹配请求的数据

4. 调试脚本

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

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

  • 名称:自定义内容,默认为察看结果树,可为空。
  • 注释:默认为空,可以为空,自定义内容。
  • 所有数据写入一个文件:可以将结果保存,这里是一个路劲地址。
  • Text 下拉列表:显示请求内容的形式列表,这个下拉列表里有 Text、Xpath Tester、JSON 等。
  • 取样器结果:显示取样器结果,这里的信息和浏览器上展示的内容差不多。
  • 请求:展现请求表单内容,不同的取样器有不同显示格式。
  • 响应数据:显示服务器响应数据,分为 Response Body 和 Response headers,提供了查询功能,也可以区分大小写查询和正则表达式查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

怎么用JMeter写性能测试脚本 的相关文章

  • PCI-E 1x, 4x, 8x, 16x 接口定义

    1 PCI E插槽及金手指实物图 xff08 1 xff09 PCI E插槽 从上至下依次为PCI E 4X PCI E 16X PCI E 1X xff08 2 xff09 PCI E金手指 PCI E 1X金手指PCI E 4X金手指P
  • Lattice USB下载线使用说明及CPLD程序烧写

    目录 1 下载并安装ispLEVER Classic 软件 1 1 软件下载 1 2 软件的安装 2 Lattice USB下载线介绍 2 1 实物介绍
  • E-96系列电阻值代号对照表

    1 说明 2 E 96系列电阻值代号对照表 E 96系列 标准阻值表阻值代码阻值代码阻值代码阻值代码阻值代码阻值代码1001X10001A1 00K01B10 0K01C100K01D1M01E10 202X10202A1 02K02B10
  • Altium Designer10铺铜技巧小结

    目录 1 铜皮操作分类 2 铺铜技巧 2 1 过孔处理 2 1 1 过孔与绿油 2 1 2 过孔的十字连接与直接连接 2 2 设置灌铜安全间距 xff08 Clearance xff09 2 3 设置空心灌铜 2 4 调整灌铜形状 2 5
  • 基于MFC的USB上位机开发(3)数据传输模块

    延伸阅读 基于MFC的USB上位机开发 1 概述 基于MFC的USB上位机开发 2 速度测试模块 基于MFC的USB上位机开发 3 数据传输模块 基于MFC的USB上位机开发 4 环路模块 基于MFC的USB上位机开发 5 下环路模块 目录
  • 虚拟现实的起源、发展、爆发与沉淀

    虚拟现实的三生三世 闲来无事翻篇外文 xff0c 本博主并非故意蹭热点 xff08 奸笑 xff09 xff0c 结尾我会细说为何是三生三世 xff0c 不是五生五世 xff1a 虚拟现实远早于这个概念被创造和形式化之前 在这篇描写虚拟现实
  • 基于卷积的密度统计(一)密度图的生成

    在基于卷积的人数统计中 xff0c 一种是最后回归整张图的人数 xff0c 即输入图像 xff0c 输出人群个数 xff0c 另外一种是回归人群分布密度图 xff0c 即输入图像 xff0c 得到的是密度分布 显然得到密度分布的人数统计方法
  • Python使用国内镜像

    国内镜像地址 xff1a 阿里云 xff1a https mirrors aliyun com pypi simple 清华 xff1a https pypi tuna tsinghua edu cn simple中国科技大学 https
  • [RK3568 Android11] 开发之蓝牙(AP6275S)

    目录 前言 一 设备树dts配置 二 蓝牙打不开 三 蓝牙打开成功 四 修改蓝牙设备名称
  • XFCE菜单列表

    vim etc xdg xfce4 panel xfce4 menu 19 rc use default menu 61 true menu file 61 etc xdg menus xfce applications menu icon
  • X的DISPLAY=:0.0

    ZZ http blog 163 com caizf1987 64 126 blog static 13212128020104611592660 在Linux Unix类操作系统上 DISPLAY用来设置将图形显示到何处 直接登陆图形界面
  • 国外服务器上玩游戏延迟很高,什么原因造成的?

    在国外服务器玩游戏为什么延迟很高 有的比较热门的国际游戏 xff0c 为了玩家通常都会将整个游戏的区服划分为亚服 欧服 美服 东南亚服 韩服等等 xff0c 这主要是为了玩家有个良好的游戏体验 xff0c 那为什么在外服 国外服务器 上玩游
  • 公司抽奖小程序(自定义名单,空格控制滚动、抽奖,可作弊,可满足千人团队, 带可执行程序下载及源代码)

    内含 抽奖小程序 及 名单生成工具 使用时将两个小程序放在 同一目录下 先用名单生成工具生成名单 打开工具 按照提示输入要创建的参与抽奖的人数 输入每个人的编号及姓名 每行一个编号 空格 姓名 打开程序 复制粘贴即可 先用excel或者tx
  • 大厂面试之JAVA核心技能:Slipped Conditions

    聊聊Splipped Condtion 定义一个更现实的例子解决Slipped Conditions问题 定义 所谓Slipped conditions xff0c 就是说 xff0c 从一个线程检查某一特定条件到该线程操作此条件期间 xf
  • 一文带你彻底搞懂Docker中的cgroup

    前言 进程在系统中使用CPU 内存 磁盘等计算资源或者存储资源还是比较随心所欲的 xff0c 我们希望对进程资源利用进行限制 xff0c 对进程资源的使用进行追踪 这就让cgroup的出现成为了可能 xff0c 它用来统一将进程进行分组 x
  • 一文彻底搞懂Docker中的namespace

    什么是namespace namespace是对全局系统资源的一种封装隔离 这样可以让不同namespace的进程拥有独立的全局系统资源 这样改变一个namespace的系统资源只会影响当前namespace中的进程 xff0c 对其它na
  • 带你玩转多进程编程(一)

    前言 之前用加法器的例子一文带你轻松掌握多种范式讲解了多种范式的封装差异得到了很多童鞋的阅读 这次我再通过对进程的封装来给大家继续加深讲解下关于这几种编程范式的差异吧 结构化设计 相对于pthread create 函数 xff0c for
  • 【网易面试题】如何实现一个线程安全的shared_ptr智能指针

    题目描述 网易一面遇到过这么一个题目 xff0c 面试官要求自己实现一个线程安全的shared ptr智能指针 题目分析 可能很多人只知道shared ptr是C 43 43 11模块库的头文件定义的一个智能指针 xff0c 即shared
  • Ubuntu命令行安装Teamviewer

    1 预备安装 更新32位架构 sudo dpkg add architecture i386 更新安装 sudo apt get update 2 使用deb安装 官网下载 xff1a https www teamviewer com en
  • 阿里云数据湖分析急招实习生

    团队介绍 OSS 对象存储的概念可能对很多同学相对比较陌生 xff0c 但其实和大家紧密相关 xff0c 因为整个阿里集团业务以及阿里云外部客户的视频 图片 JS和CSS等资源全部都存储在我们这里 xff0c 可以说国内每天使用互联网应用的

随机推荐

  • 源码剖析Redis中如何使用跳表的

    前言 阿里云今年春招校招面试题 xff0c 面试官问Redis在是如何使用跳表的 xff1f 让很多同学赶到很头疼 今天我们就来讲一讲吧 Sorted Set的结构 redis的数据类型中有序集合 xff08 sorted set xff0
  • 多进程生产者消费者框架设计

    前言 介绍了进程如何基于面向对象的封装 xff0c 本章我们基于封装好的Process类来实现一种无锁版的生产者和消费者框架 xff0c 用它实现了高性能文件拷贝功能 读这篇文章之前大家可以想一下如果是你 xff0c 你会怎么设计这样的框架
  • golang实现简单rpc调用

    RPC通信过程 RPC的通信过程网上介绍很多 xff0c 这里就不在单独介绍了 xff0c 具体过程如下 xff1a 1 Client以本地调用的方式发起调用 xff1b 2 Client stub收到调用后负责将被调用的方法名 参数等打包
  • 一文彻底搞懂leveldb架构

    leveldb leveldb是一个写性能十分优秀的存储引擎 xff0c 是典型的LSM tree的实现 LSM的核心思想是为了换取最大的写性能而放弃掉部分读性能 那么 xff0c 为什么leveldb写性能高 xff1f 简单来说它就是尽
  • flink核心之watermarker

    背景介绍 xff1a 现在的社会 xff0c 人们产生越来越多的数据 xff0c 而数据对每个人人都产生了巨大的影响 比如你去银行贷款 xff0c 那么必然银行要对你做信用评估 xff0c 会涉及到大数据画像等数据分析 比如美团外卖 xff
  • 我在华为度过的 “两辈子”(学习那些在大厂表现优秀的人)

    七 是一个很神奇的数字 生物学中认为组成身体的细胞 xff0c 七年会彻底更新一遍 xff1b 李笑来说 xff0c 七年就是一辈子 xff0c 每一辈子至少要习得一个重要的技能 xff0c 进而获得不可逆的重生 xff1b 白居易写道 x
  • 【Effective Java】大厂实战之考虑以静态工厂方法代替构造方法

    图片 Item1 考虑以静态工厂方法代替构造方法 Item1 考虑以静态工厂方法代替构造方法 缺点1 只提供静态工厂方法的话 xff0c 该类就无法被继承 xff08 子类化 xff09 缺点2 API的查找比较麻烦 常见静态工厂方法的命名
  • 一文搞懂leveldb写操作

    前言 leveldb一直也它优秀的写性能而文明 xff0c 本篇文章我们就来分析下leveldb的写流程 来搞懂为什么它的写性能如此优秀 整理流程 leveldb一次写入分为两部分 xff1a 第一步先将写操作写入日志 第二步将写操作应用到
  • 来聊聊对象文件网关和分布式文件存储的区别

    前言 大家都知道 xff0c 存储系统一般分为块存储 对象存储和文件存储三种 其中文件存储的使用最广泛 xff0c 个人电脑 NAS 大到传统的HPC 大数据平台等等 这些都是以使用文件接口为主 最近几年 xff0c 由于成本低 存储空间大
  • Ubuntu中文件属性以及所属用户问题

    1 xff0c 查看文件属性 xff0c 命令如下 xff1a 查看当前目录下某个文件属性 ls l lt file name gt 查看当前目录下文件属性 ls l 查看所有当前文件下属性 ls al 在开始的 rwxr xr x 为该文
  • Android8.0 屏幕旋转180度

    一般手机只能旋转3个方向 xff0c 这里将介绍如何让手机可以旋转180度 xff0c 也就是上下颠倒 1 静态方法 frameworks base core res res values config xml config allowAl
  • 深度理解go中的Map

    这里写自定义目录标题 前言map的内存模型增量扩容查找过程分析插入过程分析 前言 本篇将从底层讲解map的赋值 删除 查询 扩容的具体执行过程 结合源码 xff0c 让你彻底明白map的原理 map的内存模型 在源码中 xff0c 表示ma
  • 在职场我们该具备哪些能力

    专才or 通才 不知道大家有没有这样的感觉 xff0c 现在的工作专业化程度越来越高 xff0c 细分粒度也越来越小 IT领域分到你是计算里面的数据库或者了流式计算引擎 xff0c 或者是协议存储还是KV存储引擎 专业化的程度带来了一个好处
  • 【zabbix Java开发教程】docker部署zabbix及api获取实战教程

    文章目录 Docker安装移除旧版本的docker环境安装必要系统工具添加源信息更新yum缓存安装Docker ce 启动Docker测试运行hello world 修改源 Docker部署zabbix创建zabbix的MySQL运行zab
  • go版本分布式锁redsync使用教程

    redsync使用教程 前言redsync结构Pool结构Mutex结构acquire加锁操作release解锁操作 redsync包的使用 前言 在编程语言中锁可以理解为一个变量 xff0c 该变量在同一时刻只能有一个线程拥有 xff0c
  • Fragment实例精讲——底部导航栏的实现(3)

    转自 xff1a http www runoob com w3cnote android tutorial fragment demo3 html 本节引言 前面我们已经跟大家讲解了实现底部导航栏的两种方案 xff0c 但是这两种方案只适合
  • Android NavigationBar 背景设置成完全透明不起作用

    lt item name 61 34 android navigationBarColor 34 gt 64 android color transparent lt item gt 使用 android navigationBarColo
  • 计算机视觉CV中RANSAC算法的学习笔记~

    1 致谢 感谢网友叶晚zd的博客 xff0c 原文链接如下 xff1a https blog csdn net u013925378 article details 82907502 2 RANSAC算法介绍 随机抽样一致算法 xff08
  • 【Java】JsonArray用法

    1 解析字符串为JsonArray JSONArray jsonArray 61 JSONArray parseArray str 2 存值 jsonArray add object 3 取值 for int i 61 0 i lt jso
  • 怎么用JMeter写性能测试脚本

    JMeter 可能是应用最广泛的性能测试工具 怎么用 JMeter 编写性能测试脚本 xff1f 一 脚本制作原则 我们一般写代码 xff0c 都会有代码规范 xff0c 比如写java有java规范 xff0c 写python有pytho