JMeter
用 Java 设计的测试工具,初衷设计用来测试 web 应用,现在扩展到更多的测试领域
这是一个最最最简单的入门,了解 阿里云 PTS 测试时顺带看下 jmeter,什么术业有专攻,在前(quan)端(zhan)面前全是浮云。
环境配置
jdk 安装
网上一大把资料,这里不再描述
JMeter 安装
在上面下载页中,找到 apache-jmeter-5.x.x.tgz 下载(最低需要 java 8+ 以上的版本)
一顿无脑安装,在 安装目录下(jmeter\apache-jmeter-5.1.1\bin) 找到 jmeter.bat 点击运行
举一个例子
模拟一个 Http 测试计划,来介绍 JMeter 的配置
创建一个新任务
所有 TestPlan 都是需要线程作为用户来运作,首先需要新建 Thread Group
主要参数
参数 | 说明 |
---|---|
Number of Threads(users) | 线程数(虚拟用户) |
Ramp-Up Period(in seconds) | 每秒增加用户数 |
Loop Count | 循环次数 |
举例:
明白 Ramp-Up Period 参数
- Number of Threads = 10
- Ramp-Up Period = 20
- Loop Count = 1
将准备 10 个线程,每 2 秒(Ramp-Up Period/Number of Threads)后创建新线程运行 plan,总共循环 1 次
1
2
3
4
5
6
7
8
9
10[26/Mar/2019:13:18:23 +0800]
[26/Mar/2019:13:18:25 +0800]
[26/Mar/2019:13:18:27 +0800]
[26/Mar/2019:13:18:29 +0800]
[26/Mar/2019:13:18:31 +0800]
[26/Mar/2019:13:18:33 +0800]
[26/Mar/2019:13:18:35 +0800]
[26/Mar/2019:13:18:37 +0800]
[26/Mar/2019:13:18:39 +0800]
[26/Mar/2019:13:18:41 +0800]每秒发送一个请求持续 1 分钟
- Number of Threads = 1
- Ramp-Up Period = 1
- Loop Count = 60
创建一个 Http 用例
注意是在 TreadGroup 这栏,右键创建
这里可以设置 Http 请求所有的内容:协议、方法、地址、端口、参数。按照具体要求设置。
值得一提 的是在 Advanced tab 选项中,可以设置:Retrieve All Embedded Resources
一般情况下测试一个页面,测试工具只是拿到页面的 document 内容,不会对页面中异步资源(js、css、images)做二次请求(包括 ab),如果勾选了上面这个选项,就会请求所有异步资源。
Http 公用配置
Jmeter 也提供了很多自定义的配置,方便公用
这里举个维护 Http 请求头的例子:
添加监听
运行完,你也不知道发生什么。通常还需要设置一个监听,这样所有的用例结果就会提现出来
这图正好有两条记录,分别测试 Retrieve All Embedded Resources 选项的区别,能看到响应时间差的不是一点半点。
Jmeter 报告
需要一个图形化统计来量化这些测试结果数据
具体 api 解释:
1 | To run Apache JMeter in NON_GUI mode and generate a report at end : |
参考脚本:
1 | jmeter\apache-jmeter-5.1.1\bin>jmeter -n -t ./jm/indexPlan.jmx -l ./jm/result/log -e -o ./jm/output |
可能出现的问题
1 | WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5. |
登录注册表:regedit,修改/新添加:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs
其他
上面都是些简单操作,更多的需要专业的测试人员来接入。这里补充一点其他基础内容:
一个页面总用时时间消耗在哪些方面?
首先,在服务器端,某页面请求 nginx 日志如下:
1 | [26/Mar/2019:10:34:51 +0800] Mozilla/5.0 ... Chrome/49.0.2623.221 1.0 GET / HTTP/1.1 200 24612 0.042 - |
最后位 0.042 代表耗时 42ms
而然,在浏览器端却耗时 93ms,相差一半。放张图,聪明的你一看就明白我想说什么了:
项目 | 说明 |
---|---|
Queueing | 浏览器内部的发请求排队时间 |
Stalled | 发送请求前,准备的时间 |
Proxy negotiation | 代理商解析时间 |
DNS Lookup | DNS 解析时间 |
Initial connection | TCP 握手时间 |
Request sent | 请求信息发出时间 |
Waiting (TTFB) | 服务器响应时间 |
Content Download | 响应资源下载时间 |
上面内容可能解释有出入,但基本也解释了这一半多时间消耗在哪方面。
阿里云 PTS
性能测试(Performance Testing Service,简称 PTS)是具备强大的分布式压测能力的 SaaS 压测平台,可模拟海量用户的真实业务场景,全方位验证业务站点的性能、容量和稳定性。
下面是 200 并发,对首页做的测试:
- TPS:188.33 (事务/秒)
- 请求总数:11577 (个)
对比 ab,结果差不多
1 |
|