使用 JMeter 压测项目 | 青训营笔记

157 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天。

本文以 CC-BY-SA 4.0 发布。

JMeter

JMeter 是用来大量测试软件的行为、 测量软件性能的开源纯 Java 程序。 它原先被用为测量 Web 应用的性能(我们今天的例子也正是测量网页后端应用的性能), 现在也可以进行一些其它的测试。

常用的基本概念

  • Test Plan: 测试计划:一批测试,也可以说就是一个 .jmx 文件的内容。
  • Thread Group: 线程组:因为压测肯定会涉及并发的请求, 所以每一项测试都是由某一个含有多个线程的线程组负责的。 线程组可以调节线程数以及每一个线程的循环执行次数。
    • setUp Thread Group: setUp 线程组:负责各种初始化
    • Thread Group: 普通线程组
  • Assertion: 断言:对测试结果进行正误评定
  • Sampler: 取样器:取得测试数据的方式(也就是我们主要的测试所在)。
    • HTTP Request: HTTP 请求:发送 HTTP 请求,并记录相应的结果。
  • Listener: 监听器:会把部分请求或是有输出的节点的对应结果记录下来。
    • View Results Tree: 查看结果树:把结果以树状呈现。
    • Aggregate Report: 聚合报告:统计处理时间、吞吐量。

使用

在打开 GUI 时,JMeter 后台会输出一段信息:

Don't use GUI mode for load testing! ...

总之,在进行压测时,我们应该最终使用命令行来操作, 避免 GUI 带来的一些性能影响以及最终的测量误差:

$ jmeter -n -t [.jmx 文件] -l [输出文件] -e -o [网页版报告文件夹]

编辑压测实例时,我们还是用 GUI 方便一些。

JMeter 截图

GUI 里左半部分负责控制测试的大致逻辑, 右键点击各项便可在对应节点下添加各子节点。 选中一个节点后可以在右侧编辑各种参数。

变量的使用

JMeter 里在大多数的值中都可以使用 ${变量名} 来引用变量。 里面也支持各种函数的使用,如上图中的 ${__RandomString(10, 0123456789,)}。 可用函数可以在 工具 -> 函数助手对话框 (Tools -> Function Helper Dialog) 里找到, 里面还会有函数参数的文档解释。

实例:注册、登陆并获取用户 Token

我们希望在后续测试中使用同一个用户进行操作, 为此,我们需要在 setUp 线程组中进行注册、登陆,并把对应的 Token 信息传递给后续测试。

对应步骤有:

  1. 创建一个 HTTP Request,进行注册请求,在用户名里使用 ${__RandomString(10, 0123456789,)} 生成随机用户名, 防止在没有清除用户数据的情况下,不同批次的测试的用户名重复。
  2. 创建一个 HTTP Request,进行登陆请求。
  3. 在登陆/注册请求下,创建 JSON Extract 等提取器,将 Token 提取至局部变量。 局部变量只在线程组/线程内有效。
  4. 使用 BeanShell PostProcessor 将局部的 Token 提取至全局(跨线程组),命令如下: ${__setProperty(全局命名,${局部变量名},)}
  5. 在需要使用的地方使用函数获取变量值:${__P(全局命名)}