HJ3-24.8 电商系统压测实战 一

有效的性能测试能给研发、运维团队提供有效的容量规划能力、系统风险识别、系统瓶颈识别、性能调优指导。

被测服务的模型

1、性能测试基础知识回顾

性能测试基础知识

1.1 需求分析与测试设计(性能需求目标 + 业务模型拆解)

1、根据具体的性能测试需求,确定测试类型以及压测的模块(web/mysql/redis/系统整体)
2、前期要与相关人员充分沟通,初步确定压测方案与具体性能指标
3、QA 完成性能测试设计后,需产出测试方案文档发送邮件到项目组,并且再次与相关人员沟通(或者组织性能测试评审),确认是否满足需求

1.2 环境设计与搭建

1.3 测试数据准备(基于模型的数据准备)

1、接口请求参数:自己构造/日志获取/上下关联;
2、数据表的数据填充;
3、如果是多接口,则需结合业务场景设计请求比例。

1.4 性能指标预期(性能需求目标)

1、每秒请求数(QPS)
2、请求响应时间(最小、最大、平均)
3、错误率
4、机器性能:cpu idle 30%、memory 无剧烈抖动或者飙升
5、压测过程中接口功能是否正常

不同性能测试方式下指标预期会有差异

并发用户数

1.5 发压工具配置及脚本编写(压力策略)

1、JMeter 工具介绍
(1)集成包,解压即可使用,Windows、Linux 通用(依赖 java 环境)
(2)jmx 脚本为 xml 文件,Win、Linux 环境均可直接运行
(3)多线程并发
(4)运行完脚本会生成 jtl 日志,可在 Win 环境界面工具中查看、统计
2、脚本的编写
(1)http 请求
(2)其他
3、命令:(1)启压:./jmeter -n -t hb.jmx -l hb.jtl

1.6 测试过程(预计的前置准备过程,和压测时间点规划)

压测过程说明/共识
1、测试前环境检查:记录机器参数
2、起压:根据被压情况,调节并发量到合适的情况
3、查看记录各项性能指标
(1)nginx 日志查看每秒请求数
(2)查看 nginx 错误请求
(3)查看机器参数:cpu idle、mem 等
(4)查看 db、cache 等数据是否写入正常
(5)访问接口,查看功能是否正常

1.7 结果分析与测试报告

1、根据测试过程中记录的各项参数,结合压测工具产生的日志,对测试结果进行分析,并产出测试报告
2、测试完成后,及时与相关人员沟通,确认是否满足需求
3、发送测试报告邮件

电商系统梳理拆解

性能项目按目标场景分类:
新上线系统性能测试:要求容量测试,系统最大容量。
系统升级性能测试类:和基线版本对比,性能不下降。
新系统性能优化类:伴随调优目标的性能测试。

在本次实战中
我们可以定义为新系统上线的容量测试。
目标为获取系统最大容量

测试场景:基准场景(单交易容量场景)
容量场景(递增场景、最大 TPS、最快响应时间场景)

基准场景
容量场景

测试工具选型

压测场景:单接口/复杂事物 => JMeter 场景构造
压力需求:< 1000 QPS or 万级以上 => JMeter 分布式支持
是否周期性:JMeter Jmx 场景文件,数据驱动,结果落库
二次开发需求:JMeter 开源插件化思想,支持 Thrift,Dubbo 等多种协议。可以快速平台化。
问题支持:JMeter 开放社区,广泛使用。

- JMeter LoadRunner
开发语言 纯 Java 开发 使用 C 语言开发
支持应用 对 Java 为主的系统支持较好 支持比较全面
是否收费 开源免费 商业软件
学习成本 应用简单,上手快,Java 自定义测试计划 功能复杂,学习成本高
协议支持 支持常见的 HTTP/FTP/SMP等 支持较全面
自定义测试 支持使用 Java 编写 Sample 使用完善的组件进行定制化测试
组件功能 Thread Group,Samplers,Listeners,Pre&Post processors 一套完整的测试组件,比如 VU Generator,Contr Load generator,Load calculator 和 protocol

被测系统分析

整体服务存储分为:
Mysql:关系型数据存储,商品、订单等数据
Redis:魂村+部分存储,例如验证码
MongoDB:例如用户关注品牌等存储
在压测过程中,对不同方式存储需不同关注

压测目标预估

流量预估模型,常见方式:
取出生产数据并统计
从生产环境取数据,可取出秒、分、时、天、月、年。
如下图所示,取从2018年3月30日到2018年4月23日。
再从如上图中取出业务量相对高的一天,查看一天内的业务趋势。如下图所示:


取出生产数据并统计

1、普通日的比例场景
以天为单位计算每天的总业务量比例。


普通日的比例场景
普通日的比例场景

实际中也可以直接取 nginx 配置
巧用 Shell 技巧

cat var/log/nginx/access.log | awk '{print $7}'| sort | uniq -c | sort -k 1 -nr | grep -v css | grep -v js | grep -v swagger
# sort  把相同的url聚合在一起
# uniq -c   统计每个请求的数量
# sort -k 1  按照第一列结果排序
# r 倒序

电商系统性能方案拆解

模块级性能方案 -> 登陆场景测试

基础的Jmeter UI 功能配置演示:
HTTP Default Header,Header 信息获取和设置
HTTP Default 做 IP/HOST 统一,便于替换
CSV 参数化。请求的 IP/HOST 以及 用户名/密码做参数化数据驱动
参数传递,后置处理器使用传递验证码到注册接口
使用前置处理器自动生成规范内测试手机号
Cookie 验证结果保存做数据构造

电商系统之日常场景

JMeter 添加前置处理器
手机号码随机生成
使用随机生成的手机号
JMeter 添加调制取样器
JMeter 添加 HTTP Request Default
JMeter HTTP Request Default
JMeter 添加 CSV Data Config
hosts 文件
CSV Data Config
使用 CSV Data Config 中定义的参数
添加 JSON Extractor
JSON Extractor
添加 Counter
Counter
Test Plan
Register Request
添加 JSON Assertions
JSON Assertions
添加 JSR223 PostProcessor
JSR223 PostProcessor
密码 MD5 加密
添加 Summary Report
添加 Backend Listener
添加 Transaction Controller
HTTP Header Manager
添加 Loop Controller
添加 If Controller
If Controller

你可能感兴趣的:(HJ3-24.8 电商系统压测实战 一)