注:
1. 程序员做的测试
2. 测试报告文档原稿在上传审核中,请等待
审核好了:https://download.csdn.net/download/yiquan_yang/12694138
1 概述
1.1 背景
系统的稳定性是系统长期稳定运行能力,需要时间累积才能度量。平台的某些问题需要达到一定时间、一定的使用量后才会暴露出来。如内存泄漏,系统运行过程中发现部分服务的部分接口会发生服务不可达的情况。
从而团队提出对平台进行稳定性分析,通过给系统施加一定业务压力大情况下,使系统持续运行一段时间,以此来检测系统是否稳定运行(下统称稳定性测试或测试)。
1.2 服务说明
平台运行的服务包括系统服务和业务服务,系统服务包括Consul、Redis、Cap、RabbitMQ、Exceptionless套件等,业务服务包括用户服务、基础数据服务、网关服务,详细见《xxx发布标准》。本次测试针对三个业务服务,对系统外界只有网关可视(测试对象统称系统或平台),故测试对象为一个服务。
1.2.1 服务器部署
本次测试采用单机环境,所有服务全部配置在同一台服务上,数据库部署在另一台机器上。
Manufacturer: Microsoft Corporation
Product Name: Virtual Machine
IP:192.168.4.57(业务服务)、192.168.4.253(数据库)
CPU:Intel® Xeon® Gold 5117 CPU @ 2.00GHz (物理CPU个数 1,核数:16)
Memory:16G
OS:CentOS Linux release 7.6.1810 (Core)
PostgreSQL:PostgreSQL 11.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
Docker:Docker version 19.03.5, build 633a0ea
其他软件环境见1.3测试工具
1.2.2 服务配置
其中系统中存在大量配置,其中影响测试的配置包括:
xx:单服务接口最大并发数 设置为 1万
xxx:请求执行超时时间 设置为 30s
xxx:是否启用性能追踪组件 设置为 不启用
xxxxxx:是否启用服务接口缓存拦截 设置为 启用
Xxxxxxxx:是否启用集中式日志 设置为 不启用
1.3 测试工具
Apache JMeter(5.2.1):测试客户端,作为虚拟用户脚本产生器(Virtual User Generator)、压力产生器(player)、用户代理(Agent)、压力调度和监控系统(Controller)、压力结果分析工具(Analysis)
1)安装前需要安装Java,本次测试使用jre1.8.0_241
2)客户端如需则自行汉化
3)安装服务资源监控器插件,从官网下载安装Plugins Manager,并安装jpgc - Standard Set
ServerAgent(2.2.1):服务器Agent,提供服务器资源使用数据
1)服务器需要安装Java,本测试使用java version “1.8.0_241”
2)进入ServerAgent存放目录,使用命令“./startAgent.sh”启动Agent
3)需要确保端口4444能够访问,本测试关闭了服务器防火墙
1.4 稳定标准
在一定的配置情况下
CPU:单颗,16核
Memory:16G
在以上硬件环境下满足
1)系统指标
满足100个/s的最大并发。请求100%请求成功,且平均响应时间小于5s;
2)资源指标
在单位时间内(5s),CPU最大使用率不能持续超过95%,内存最大占用率不能持续超过95%。
1.5 关键字定义
1.6 排除干扰项
不考虑断电,硬件资源损坏情况
2 测试方案
本次测试采取负载测试、并发测试、可靠性测试。测试方案采取模拟真实用户使用场景,模拟指定人数在一定时间点击界面产生的请求数。
在并发10(单位个/s)、20、40、80、160、500、1000、2000的基准下,调整用户数(虚拟用户用一个线程,下统称线程数)、点击准备时间(用户点击时间模拟时间,下称Ramp-up单位秒)和用户点击次数(下称循环),例如10个用户,每个用户每5秒点击1次,则线程数为10,Ramp-up为5,循环数为1。详细测试策略请看2.1。
对登录、数据新增(用户)、编辑(用户)、获取(用户)和删除(用户)进行负载测试,获得其稳定负载值。
对全站使用策略100-100-1-1进行并发测试,挑选用户服务所有接口。基础数据服务中挑选和用户服务关联的功能接口5个,组织结构接口4个,和用户服务无关的行政区3个接口。具体接口请查看附件1。
对全站进行可靠性测试,根据以上测试接口,选择稳定的并发数后持续测试-模拟时长8+小时。
稳定性测试是通过运行状态和资源指标的2个方面来分析及评估系统的稳定性,请求记录项响应的时间平均值、最小值、最大值、标准偏差、异常(百分比)、吞吐量、接收、发送、平均字节数,服务器资源指标CPU、Memory,在此额外添加记录数据库数据。通过调试测试策略、分析实验数据得出相关系统稳定性的结论,从而达到平台能力验证、规划能力、性能调优、缺陷发现等目的。
评价定义
稳定:无异常,平均值和变成偏差差距较少且不高;
普通:无异常,平均值小于5秒,平均值和变成偏差差距较少;
一般:无异常,平均值大于5秒,平均值和变成偏差差距较大;
差:存在异常,异常率小于30%;
极差:存在异常,异常率大于登录30%;
2.1 测试策略
测试策略
编号 | 并发数 | 线程数 | Ramp-up | 循环 | 场景 | 备注 |
---|---|---|---|---|---|---|
10-1-1-10 | 10 | 1 | 1 | 10 | 1个用户,每个用户每秒提交10次请求 | |
10-10-1-1 | 10 | 10 | 1 | 1 | 10个用户,每个用户每秒提交1次请求 | |
10-20-2-1 | 10 | 20 | 2 | 1 | 20个用户,每个用户2秒内提交1次请求 | |
10-20-4-2 | 10 | 20 | 4 | 2 | 20个用户,每个用户4秒内提交2次请求 | |
10-40-4-1 | 10 | 40 | 4 | 1 | 40个用户,每个用户4秒内提交1次请求 | |
10-40-8-2 | 10 | 40 | 8 | 2 | 40个用户,每个用户8秒内提交2次请求 | |
10-80-8-1 | 10 | 80 | 8 | 1 | 80个用户,每个用户8秒内提交1次请求 | |
10-80-16-2 | 10 | 80 | 16 | 2 | 80个用户,每个用户16秒内提交2次请求 | |
。。。。。。 |
2.2 测试脚本
测试脚本分为登录和服务接口两个线程组,模拟用户登录后进行系统。
1)在测试前定义测试配置变量,查看图2.2-1,使用变量
图2.2-1 定义线程组中配置变量
图2.2-2 使用线程组中配置变量
2)用户登录成功后将Token写入全局变量中,服务接口线程组统一使用该Token。
3)创建数据类接口,相关使用值在BeanShell预处理程序中创建,创建完成后在JSON提取器中提取相关值,供请求组装报文,例如用户,产生用户姓名请查看图2.2-3,使用查看图2.2-4,提取值查看图2.2-5。
图2.2-3 定义线程组中创建用户姓名变量
图2.2-4 使用线程组中创建用户姓名变量
图2.2-5 使用线程组中创建用户姓名变量
4)编辑、获取和删除接口需要的主键ID从创建请求成功后提取。
5)脚本中还包括HTTP头信息管理器(HTTP Header Manager),相关运行结果项察看结果树(请求头,Body,Response结果)、用表格察看结果(请求开始时间、运行时间等)、汇总报告(样本、最小值、最大值、错误率等)、jp@pc-PerMon Metrics Collector(服务器资源监视器)、汇总图(请求时间管理:样本、中位数、平均值、90%百分比等)
6)整体脚本编写完成后,请查看图2.2-6。
图2.2-5 脚本一览
3 负载测试
3.1 测试样本
3.1.1 登录接口
1)查看结果树
登录接口(线程池100)
策略编号 | 样本 | 平均值 | 最小值 | 最大值 | 标准偏差 | 异常% | 吞吐量 | 接收 | 发送 | 平均字节数 | 评价 |
---|---|---|---|---|---|---|---|---|---|---|---|
100-50-1-2 | 100 | 383 | 40 | 1181 | 294.89 | 0 | 55.43 | 30.96 | 30.92 | 572.0 |