说明:
1、以下为基于某业务单登陆场景并发测试实战过程,仅供参考;
2、本文为本站首发,转载及他用请注明出处,谢谢。
1 测试目的
通过对某业务用户登录接口进行并发测试,模拟用户真实场景,发现服务器存在的服务瓶颈,辅助提升产品稳定性。
2 测试目标和测试对象
根据产品要求,系统必须支持150用户同时在线(具体参考名词解释内容)。本次测试只测试单登录场景,不任何带业务。
3 名词解释
- 在线用户数:用户同时在一定的时间段的在线数量;
- 并发用户数:某一时刻同时向服务器发送请求的用户数;
- 事物:“从用户发送请求->server接受到请求,进行处理->server向DB获取数据->生成用户页面”的过程;
- 请求响应时间:是指从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束的过程所耗费的时间;
- 事物响应时间:针对用户而言,属于宏观概念,为了向用户说明业务响应时间而提出的,是直接衡量系统性能的参数;
- 吞吐量:在以此性能测试过程中网络上传输的数据量的总和;
- 吞吐率:吞吐量与传输时间的比值;
- 每秒点击次数:运行压测场景过程中虚拟用户每秒向服务器提交的http请求数。
4 测试说明
- 并发用户数与在线用户数的关系:一般并发用户数与在线用户数的比值为5%-20%;
- 本次测试并发150,其实按照平均值10%来算,用户在线数为1500个。
5 测试环境和工具
5.1 测试工具
工具 | 版本 | 说明 |
---|---|---|
LoadRunner | V11 | 服务端压测工具 |
Nmon | X86\_64\_centos7 | 服务器指标监控工具 |
Python | V3.7.0 | 脚本设计语言 |
Pycharm | V2021.2 | 脚本编写工具 |
Postman | V7.34.0 | http接口调试工具 |
Fiddler | V5.0 | http接口抓包工具 |
Proxifier | V3.42 | 代理工具辅助抓取接口数据 |
Xshell | V6.0 | ssh客户端连,接服务器工具 |
Xftp | V6.0 | 服务器文件传输工具 |
Navicat Premium具 | V11.1.8(64bit) | 数据库脚本导入工 |
5.2 测试环境
5.3 人力计划
- 测试人员:测试工程师A
- 测试周期:2人/天
6 测试用例
6.1 方案设计
登录接口并发150,不带任何业务,使用LoadRunner进行虚拟用户并发压测,使用Nmon监控服务端性能指标,分析测试结果,给出优化建议。
6.2 接口地址
http://192.168.1.5:8001/user/login
6.3 接口参数
6.3.1 header参数
web_add_header("Accept","*/*;");
web_add_header("signature","abcdefg");
web_add_header("trace","abcdefg");
web_add_header("Content-Type","application/json");
6.3.2 请求参数
{\"name\":\"{name}\",\"password\":\"c4ca4238a0b923820dcc509a6f75849b\"}"
其中用户名已被参数化,其中{name}是取得已经提前创建好的用户名,通过dat进行参数化
7 脚本设计
Action()
{
lr_start_transaction("login");
web_add_header("Accept", "*/*");
web_add_header("signature", "abcdefg");
web_add_header("trace", "abcdefg");
web_add_header("Content-Type", "application/json");
//web_add_header("EnablingCompression", "0");
//web_add_header("Expect", "100-continue");
web_custom_request(
"URL = http://192.168.1.5:8001/user/login",
"Method" = POST,
"TargetFrame = "
"Resource = 0",
"RecContentType = text/html",
"Referer = ",
"Snapshot = t3.inf",
"Mode = HTML",
"Body = {\"name\":\"{name}\",\"password\":\"c4ca4238a0b923820dcc509a6f75849b\"}",
LAST);
lr_think_time(1);
lr_end_transaction("login", LR_AUTO);
return 0;
}
8 监控数据
- 通过nmon进行监控数据获取,获取格式为:nmon –f –t –s 10 –c 30;
- 通过LoadRunner进行并发压测和部分结果分析;
- 通过nmon analyser v51\_2.xlsm进行nmon结果分析;
- 并发持续时间300s。
8.1 虚拟用户并发情况
8.2 事务响应时间
8.3 每秒点击次数
8.4 测试数据总览
8.5 平均每秒点击次数
8.6 事务平均响应时间
8.7 服务器IO和CPU使用率
8.8 服务器CPU变化趋势
8.9 双核CPU使用情况
8.10 内存使用情况
8.11 进程占CPU的使用情况
8.12 各进程使用情况
9 测试分析
性能指标 | 预期值 | 实际值 | 结论 |
---|---|---|---|
虚拟用户并发情况 | 150 | 150 | PASS |
事物响应时间 | 1s | 1s | PASS |
每秒点击次数 | 150 | 144 | PASS |
平均每秒点击次数 | 150 | 143 | PASS |
事物平均响应时间 | <1s | 0.032s | PASS |
磁盘IO | <80% | 81% | FAILED |
CPU使用率 | <80% | 40% | PASS |
内存使用率 | <80% | 68% | PASS |
通过前边的图标数据,我们整理出以上的测试数据,通过分析,除了磁盘IO有瓶颈外,其他指标全部OK。
10 测试结论
- 经过对单登录接口进行并发150,服务各指标基本满足需要(在2核心8G的情况下),测试通过/不通过;
- 瓶颈点在于磁盘方面,建议以后采用SSD硬盘实体物理机(本次采用机械硬盘+虚拟机)
11 下期计划
登录接口+业务并发测试,满足客户真实的使用场景。