探秘 JMeter 前置处理器:让性能测试如虎添翼

打印 上一主题 下一主题

主题 801|帖子 801|积分 2403

想象一下,你是一位超等好汉,要对一个庞大的虚拟城市(Web 应用)举行全面的 “健康查抄”。JMeter 就是你的神奇工具包,而其中的前置处理器,就像是这个工具包里的各种超等武器,能资助你轻松应对各种复杂的测试任务。今天,就让我们一起深入了解这些强大的武器,看看它们怎样在现实工作中发挥巨大作用。
HTML 链接解析器(HTML Link Parser)

现实场景引入

假如你在测试一个新闻资讯网站,这个网站上有大量的文章链接,还有用户批评表单。你需要模仿用户欣赏文章、点击链接查看详情,以及提交批评的操作。要是手动一个个去添加这些链接和表单到测试计划里,那可太麻烦啦!这时间,HTML 链接解析器就像一个勤劳的小助手,能帮你主动搞定这些繁琐的工作。
工作原理详解

当 JMeter 向服务器哀求一个网页后,服务器会返回一堆 HTML 代码。HTML 链接解析器就像是一个精通 HTML 语言的 “侦察”,它会细致地在这堆代码里探求链接(也就是那些<a>标签里的href属性)和表单(<form>标签)。一旦找到,就把它们提取出来,整理得井井有条,方便 JMeter 后续利用。
操作步调与示例


  • 打开 JMeter,新建一个测试计划。就像你要搭建一个测试的 “战场”,先把场地准备好。
  • 添加一个线程组,假设我们设置 10 个线程,这就好比安排 10 个 “小兵士” 同时去实行任务。
  • 在线程组下添加一个 HTTP 哀求,输入你要测试的新闻网站首页地址。
  • 接着,在线程组下添加 “HTML Link Parser” 前置处理器。
  • 运行测试,你会发现,在结果树里,所有的文章链接和批评表单都被解析出来了,就像小助手给你整理好了一份清单。

HTTP URL 重写修改器(HTTP URL Re - writing Modifier)

工作场景介绍

你在测试一个在线商城,这个商城为了防止用户信息被盗取,采取了一种特别的方式来生存用户登录后的会话信息,就是把会话 ID 藏在 URL 里,每次哀求的 URL 都会被重写。这时间,JMeter 要想模仿用户在商城里逛来逛去,从一个页面跳到另一个页面,还得包管登录状态不掉线,就需要 HTTP URL 重写修改器来帮助了。
原理剖析

当 JMeter 从服务器拿到一个被重写过 URL 的页面时,HTTP URL 重写修改器就像一个 “URL 密码破解大师”,它能从这个 URL 里找到藏起来的会话 ID。然后,在后续每个线程组发出的哀求里,它都会把这个会话 ID 静静地添加进去,让服务器以为这些哀求都是同一个登录用户发出的。
设置与利用示例


  • 同样先搭建好测试计划和线程组,并添加 HTTP 哀求指向商城的某个页面。
  • 在线程组下添加 “HTTP URL - Re - writing Modifier” 前置处理器。
  • 根据商城的 URL 重写规则,在处理器里举行设置。比如,如果重写规则是在 URL 背面加上一串类似;session=12345的东西,你就在这里设置好相关参数。
  • 运行测试,看看每个哀求的 URL 是不是都带上了正确的会话 ID。

用户参数(User Parameters)

多用户测试场景需求

假设你要测试一个在线游戏平台,这个平台有很多玩家同时在线。你得模仿不同玩家的举动,比如有的玩家喜欢玩射击游戏,有的喜欢玩脚色扮演游戏,而且每个玩家都有自己的账号和密码。这时间,就需要用到用户参数了,它能让每个线程都代表一个不同的玩家,带着自己的 “身份信息” 去测试游戏平台。
功能原理论述

用户参数就像是一个 “参数制造工厂”,它可以为每个线程定制不同的参数值。这些参数可以在测试计划里提前设置好,也能从一个外部文件(比如 CSV 文件,就像一个存储着所有玩家书息的大表格)里读取。如许,当 JMeter 以多线程的方式运行测试时,每个线程就像一个真实的玩家,用自己的参数去操作游戏平台。
现实设置与测试示例


  • 创建测试计划和线程组。
  • 在线程组下添加 “User Parameters” 前置处理器。
  • 假如我们要模仿三个玩家,就在这里添加三个用户相关的参数,比如 “username1”“password1”“username2”“password2”“username3”“password3”,并分别设置好对应的账号密码。
  • 在后续的 HTTP 哀求中,比如登录哀求,就可以用${username1}、${password1}如许的形式来引用这些参数。
  • 运行测试,你会看到不同的线程用不同的账号登录游戏平台,就像真的有多个玩家在同时登录一样。

BeanShell 前置处理器(BeanShell PreProcessor)

复杂业务场景下的需求

你在测试一个金融交易系统,这个系统的交易金额盘算规则特别复杂,要根据当前的汇率、市场波动情况以及用户的会员品级等多个因向来确定。普通的参数设置根本满意不了这个需求,这时间就轮到 BeanShell 前置处理器大显身手啦!它可以让你通过编写代码来实现复杂的盘算逻辑。
脚本能力展示

BeanShell 前置处理器就像一个 “代码魔法师”,它允许你在发送哀求之前,编写一段 BeanShell 脚本代码。这段代码可以做很多事情,比如根据当前时间生成一个唯一的交易订单号,大概根据用户的品级调整交易手续费。它还能对 JMeter 里的变量举行各种操作,像赋值、修改、判断等等。
代码示例与操作流程


  • 创建测试计划、线程组和 HTTP 哀求。
  • 在线程组下添加 “BeanShell PreProcessor” 前置处理器。
  • 在脚本区域编写代码,比方:
  1. import java.util.Date;
  2. long time = new Date().getTime();
  3. String orderNumber = "TRX" + time;
  4. vars.put("orderNumber", orderNumber);
复制代码
这段代码根据当前时间生成了一个以 “TRX” 开头的唯一订单号,并把它设置为 JMeter 的变量 “orderNumber”。
4. 在后续的 HTTP 哀求中,比如提交交易哀求时,就可以用${orderNumber}来引用这个订单号。
5. 运行测试,看看哀求里是不是带上了正确生成的订单号。

JSR223 前置处理器(JSR223 PreProcessor)

与 BeanShell 对比上风场景

照旧以刚才的金融交易系统为例,随着业务的发展,交易逻辑变得更加复杂,对性能的要求也更高了。这时间,虽然 BeanShell 前置处理器能满意需求,但代码写起来有点繁琐,而且性能上也有点力有未逮。这时间,JSR223 前置处理器就来救场啦!它支持更多的脚本语言,其中 Groovy 语言特别好用,不但性能更好,还能让代码写得更简洁、更高效。
支持语言及特性

JSR223 前置处理器就像一个 “多语言脚本舞台”,除了 Groovy,还支持 JavaScript、Python 等多种符合 JSR223 规范的脚本语言。Groovy 语言有很多强大的特性,比如闭包,它可以让你的代码像搭积木一样,简单又灵活。而且它对新的 Java 特性支持得更好,能让你更方便地和当代 Java 开发情况集成。
Groovy 脚本示例与应用


  • 创建测试计划、线程组和 HTTP 哀求。
  • 在线程组下添加 “JSR223 PreProcessor” 前置处理器。
  • 在脚本区域选择语言为 “Groovy”,并编写代码,比方:
  1. def currentTime = new Date().getTime()
  2. def transactionFee = 0.05
  3. if (vars.get('userLevel') == 'VIP') {
  4.     transactionFee = 0.03
  5. }
  6. vars.put('transactionFee', transactionFee)
复制代码
这段 Groovy 代码根据用户品级(假设已经存在 “userLevel” 变量)来确定交易手续费,并把结果设置为变量 “transactionFee”。
4. 在后续的 HTTP 哀求中,比如盘算交易金额时,就可以用${transactionFee}来引用这个手续费。
5. 运行测试,看看交易金额的盘算是不是按照正确的手续费来举行的。

JDBC 前置处理器(JDBC PreProcessor)

数据库相关测试场景

你在测试一个在线图书馆管理系统,这个系统的很多功能都和数据库精密相关。比如,要测试用户借阅书籍的功能,就需要先在数据库里准备一些不同状态的书籍数据,有的是可借阅的,有的是已借出的。这时间,JDBC 前置处理器就派上用场了,它能让你在测试之前,通过实行 SQL 语句来操作数据库,准备好所需的数据。
数据库操作原理

JDBC 前置处理器就像一个 “数据库使者”,它可以在 JMeter 实行 HTTP 哀求之前,先和数据库创建连接。然后,你可以通过编写 SQL 语句,让它在数据库里实行各种操作,比如查询数据、插入数据、更新数据等等。实行完后,还可以把查询结果存储为 JMeter 的变量,供后续哀求利用。
SQL 语句编写与实行示例


  • 首先要确保 JMeter 已经设置好数据库驱动(把数据库驱动 jar 包放到 JMeter 的 lib 目录下,就像给 JMeter 装上了通往数据库的 “钥匙”)。
  • 创建测试计划、线程组和 HTTP 哀求。
  • 在线程组下添加 “JDBC PreProcessor” 前置处理器。
  • 在前置处理器中设置数据库连接信息,比如数据库的地址、用户名、密码等。然后编写 SQL 语句,比如:
  1. INSERT INTO books (title, status) VALUES ('《百年孤独》', 'available');
复制代码
这条语句在数据库里插入了一本名为《百年孤独》且状态为可借阅的书籍。
5. 运行测试,看看数据库里是不是真的多了这本书。

RegEx 用户参数(RegEx User Parameters)

数据关联场景需求

你在测试一个交际媒体平台,用户登录后,可以查看自己的个人信息,然后还能对自己发布的内容举行点赞、批评等操作。在这个过程中,需要从登录后的相应里获取用户的 ID,然后在后续的点赞、批评哀求里利用这个 ID。这时间,RegEx 用户参数前置处理器就能帮你实现这个数据关联的需求。
正则表达式提取原理

RegEx 用户参数前置处理器就像一个 “数据提取小能手”,它利用正则表达式这个强大的工具,从 HTTP 哀求的相应内容里,按照你设定的规则,精准地提取出你想要的参数值。正则表达式就像是一个定制的 “数据筛选器”,只有符合你设定模式的内容才能被提取出来。
现实表达式编写与应用


  • 创建两个 HTTP 哀求,一个用于登录,一个用于点赞操作。
  • 在登录哀求地点的线程组下添加 “RegEx User Parameters” 前置处理器。
  • 假设登录相应里用户 ID 的格式是<user_id>12345</user_id>,那我们可以设置正则表达式为<user_id>(.*?)</user_id>,这里(.*?)就是用来提取用户 ID 的部分。
  • 设置提取的变量名为 “userId”。
  • 在点赞哀求中,用${userId}作为哀求参数,指定要点赞的用户。
  • 运行测试,看看点赞哀求是不是正确地利用了从登录相应里提取的用户 ID。

样本超时(Sample Timeout)

性能瓶颈场景引入

你在测试一个在线视频播放平台,偶然候用户会碰到视频加载特别慢的情况,等了好久都播放不出来。这可能是由于网络欠好,也可能是服务器太忙了。在性能测试中,我们要模仿这种情况,看看系统在这种压力下的表现。样本超时前置处理器就能帮我们实现这个测试。
超机遇制原理

样本超时前置处理器就像一个 “时间警员”,它为每个 HTTP 哀求都设置了一个时间限制。当哀求开始实行时,它就开始计时。如果哀求在规定的时间内没有完成,它就会果断出手,中断这个哀求的实行。如许可以避免由于个别哀求长时间不相应,导致整个测试被卡住。
超时设置与结果分析


  • 创建测试计划、线程组和 HTTP 哀求(假设是哀求播放一个视频的哀求)。
  • 在线程组下添加 “Sample Timeout” 前置处理器。
  • 设置超时时间,比如 15000 毫秒(15 秒)。
  • 运行测试,如果某个视频哀求超过 15 秒还没完成,查看结果中关于这个超时哀求的记录。从记录里,我们可以分析出是哪个环节可能出了问题,是网络耽误太高,照旧服务器处理能力不足。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表