共计 3281 个字符,预计需要花费 9 分钟才能阅读完成。
作者:极光高级测试工程师——王素花 & 杨莞武
- 需要背景
通过介绍 locust 分布式负载测试工具的应用办法,让大家能疾速把握性能测试的根本办法,进步工作效率 - 术语解释
性能测试定义:指通过自动化测试工具模仿多种失常,峰值以及负载条件对系统的各项性能指标进行测试
响应工夫:测单接口的性能,响应工夫能够简略了解为用户发送一个申请到服务器返回的响应数据这段时间就是响应工夫。
并发用户数:某一物理时刻同时向零碎提交申请的用户数,提交的申请可能是同一个场景,也能够是不同场景。
TPS:全拼是 Transaction per second,每秒事务数;测单接口的性能,一个事务能够了解为一个客户机向服务器发送申请而后服务器做出反馈的过程。
单推:下发一条音讯只推送一个用户 id(多个用户收到音讯是通过推送多条音讯来实现的)
多推:一条推送音讯能够同时推送多个用户 id。(多个用户收到音讯是通过一条音讯来实现的) - 测试策略
3.1 需要剖析:
针对需要,现需测试下列几个场景:
应用域名单推,查看发送的最大 TPS
应用域名多推,查看发送的最大 TPS
3.2 测试方法
1、性能测试的后期筹备:
剖析业务场景:场景内容有哪些,范畴较广,可与开发、产品,探讨确定本次测试的范畴
分析测试策略:失去设计的测试场景有哪些
剖析生产环境
抉择测试工具:用什么形式来测试性能
2 性能测试的目标:
性能测试则通过提前模仿场景压力,发现零碎中可能的瓶颈,进行零碎调优,缩小服务器宕机的危险
性能测试还能够用来评估待测软件在不同负载下的零碎负载能力,为零碎部署,提供性能数据决策
3 性能降落曲线分析法:
性能随用户数增长而呈现降落趋势的曲线,如图所示:
蓝线示意 TPS,黄色示意响应工夫
在 TPS 减少的过程中,响应工夫一开始会处在较低的状态,也就是在 A 点之前。接着响应工夫开始有些减少,直到业务能够接受的工夫点 B,这时 TPS 依然有增长的空间。再接着减少压力,达到 C 点时,达到最大 TPS。咱们再接着减少压力,响应工夫接着减少,但 TPS 会有降落。
3.3 测试工具
应用分布式压测工具 locust
3.4 测试环境
3.4.1 压测数据流程图
3.4.2 被测系统
API 服务为双机双节点部署形式,相干依赖服务部署也都部署在这台服务起上,且都是双节点
服务器资源:4 核 16G
应用域名压测:域名通过 lbs 转发到服务器
4 测试工具 Locust
4.1 简要
JMeter 和 LoadRunner 性能测试工具,是比拟老牌的,都是通过线程来作为虚构虚构用户,而 Locust 是基于协程实现并发用户的,协程是比线程更小的单位,也称为子线程,在一个线程中能够运行多个协程。所以基于协程的 Locust,在进行分布式部署时,不仅能够进行多机压测部署,而且还能够在一台宿主机中实现
4.2 压测工具:locust,版本:0.14.5
4.3 Locust 本地宿主机部署步骤
1. 首先咱们须要通过 python+locust 写出程序须要运行的 ABC.py 文件
脚本阐明:
新建一个类 TPush(TaskSet),继承 TaskSet,该类上面写须要申请的接口以及相干信息;self.client 调用 get 和 post 办法,和 requests 一样;
@task 装璜该办法示意为用户行为,括号外面参数示意该行为的执行权重:数值越大,执行频率越高,不设置默认是 1;
on_start 办法: 当模仿用户开始执行该 TaskSet 类时,将调用该办法;
WebsiteUser()类用于设置生成负载的根本属性:
tasks:指向定义了用户行为的类;
min_wait:模仿负载的工作之间执行时的最小等待时间,单位为毫秒;
max_wait:模仿负载的工作之间执行时的最大等待时间,单位为毫秒。
2. 创立 locust 运行的 master:
写好须要运行的 locust 文件之后,咱们须要先利用命令“locust -f xxxx.py –master”创立一个 master,这个 master 不参加创立并发用户的工作,它次要是进行监听以及收集统计数据.
2.1 提供给 web 端,咱们齐全能够利用 python 当中的 os 的 system 函数间接编写出 cmd 命令进行运行
2.2 应用 no-web,也能够利用 python 当中的 os 的 system 函数间接编写出 cmd 命令进行运行
当然也能够间接输出命令执行
此时咱们运行 py 文件,能够看到以下的信息,则阐明咱们曾经启动了 locust 分布式的主节点 master
3. 创立 locust 运行的 slave
咱们就能够创立用于制作并发用户的分支节点 slave 了,办法就是复制 master 的文件,而后批改一下文件名称,肯定要保障 slave 运行的文件与 master 文件是一样的,本人的机器有多少个 cpu 就能够弄多少个 slave,个别一个 slave 会应用一个 cpu 创立并发用户
ABC.py ABC_slave1.py 3.1 而后每个 slave 文件中须要在主函数中输出 cmd 命令
3.2 也可间接输出命令执行 slave
运行多个 slave,能够查看以下内容来判断分布式是否部署胜利
当开启全副 slave 后,能够查看 master 的控制台信息,看到上面的信息则示意 locust 分布式部署胜利了
4、关上 web 端同样也能够查看到分布式的 slave
登陆页面
启动压测前,须要填写用户总数 (Number of total users to simulate)、每秒减少的用户数(Spawn rate) 以及域名 (HOST)。
每秒减少的用户数 (Spawn rate) 会在用户数达到用户总数 (Number of total users to simulate) 时进行减少。
查看 slave 节点数
由上图能够看出 slave 都存于 running 状态,且压力散布平均。
测试后果数据下载
在 locust 当中应用 web 模式进行压测时是没有方法设定执行工夫的,所以 web 模式下的压测会始终运行,直到点击 stop 能力运行,如果想在 web 模式下运行压测一段时间主动进行的话,那么须要在参数配置时退出 stop_timeout 参数即可,value 值是执行的工夫(单位是 s)
class websitUser(HttpLocust):
task_set = Login #定义须要执行的工作集
min_wait = 1000 #最小等待时间
max_wait = 2000 #最大等待时间
stop_timeout = 60 # 进行的工夫
5 通过 locust 可视化界面判断接口性能瓶颈
在总用户数为 100,每秒减少 1 个用户的状况下运行一段时间,咱们查看 locustweb 界面:
发现 tps 稳固停留在某个数值(9.8),这时候咱们点击 Charts 查看 TPS、提早和用户数的详情分布图
能够看出在 TPS 在 10 之前,随着用户数的减少而减少;但减少到 10 之后,用户数再怎么减少 tps 仍然稳固在 10 左右,只有提早在减少;
再查看服务器性能
能够看出 cpu 都被该程序占用,那么咱们能够初步认为该接口的 tps 为 10,且瓶颈在 cpu 上。
6. 数据采集实操
单推接口:/single
多推接口:/mutiplie
- 数据分析
压测时内存耗费没有 cpu 耗费显著。从零碎稳定性思考,须要思考服务不挂,稳固状况下的性能指标。须要对数据采集进行剖析,剖析得如下论断:
单推:每秒减少用户数为 3,并发用户数为 160,cpu 耗费在 80% 左右来继续压测得出上面的性能各项指标。
多推:每秒减少用户数为 2,并发用户数为 120,cpu 耗费在 78% 左右来继续压测得出上面的性能各项指标。
注:(多推时,思考到 body 的大小,deviceTokens 设置 3 个数,对接口来说无差别,在数据落地时才耗费资源,另外借助单推的教训和多推的零碎逻辑,简略能够定位出多推的资源耗费。所以数据采集绝对少些。)
8. 测试论断
单推接口:接口 TPS 压测后果为 1757/s,90% 申请能够在 0.1 秒内响应,因线上 部署多台机器,所以该 tps 只限以后配置和部署的状况下,次要瓶颈是设施降级;
多推接口:接口 TPS 压测后果为 1342/s,90% 申请能够在 0.1 秒内响应,因线上部 署多台机器,所以该 tps 只限以后配置和部署的状况下,次要瓶颈是设施降级;
文章援用的数据,仅代表特定压测环境下的服务体现