这是我参与「第五届青训营 」伴学笔记创作活动的第 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 方便一些。
GUI 里左半部分负责控制测试的大致逻辑, 右键点击各项便可在对应节点下添加各子节点。 选中一个节点后可以在右侧编辑各种参数。
变量的使用
JMeter 里在大多数的值中都可以使用 ${变量名} 来引用变量。
里面也支持各种函数的使用,如上图中的 ${__RandomString(10, 0123456789,)}。
可用函数可以在 工具 -> 函数助手对话框 (Tools -> Function Helper Dialog) 里找到,
里面还会有函数参数的文档解释。
实例:注册、登陆并获取用户 Token
我们希望在后续测试中使用同一个用户进行操作, 为此,我们需要在 setUp 线程组中进行注册、登陆,并把对应的 Token 信息传递给后续测试。
对应步骤有:
- 创建一个 HTTP Request,进行注册请求,在用户名里使用
${__RandomString(10, 0123456789,)}生成随机用户名, 防止在没有清除用户数据的情况下,不同批次的测试的用户名重复。 - 创建一个 HTTP Request,进行登陆请求。
- 在登陆/注册请求下,创建 JSON Extract 等提取器,将 Token 提取至局部变量。 局部变量只在线程组/线程内有效。
- 使用 BeanShell PostProcessor 将局部的 Token 提取至全局(跨线程组),命令如下:
${__setProperty(全局命名,${局部变量名},)}。 - 在需要使用的地方使用函数获取变量值:
${__P(全局命名)}。