在Rainbond上使用Locust进行压力测试

[复制链接]
查看1157 | 回复0 | 2022-3-12 03:22:16 | 显示全部楼层 |阅读模式
Locust简介) T- w: e+ F/ a: c' p

; C! q. b" q/ ^8 P- p
Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。并且有一个用户友好的 Web 界面,可以实时显示测试进度。甚至可以在测试运行时更改负载。它也可以在没有 UI 的情况下运行,使其易于用于 CI/CD 测试。

" f4 A6 U# A8 l7 H  d4 i
Locust 使运行分布在多台机器上的负载测试变得容易。Locust 基于事件(gevent),因此可以在一台计算机上支持数千个并发用户。与许多其他基于事件的应用程序相比,它不使用回调。相反,它通过gevent使用轻量级进程。并发访问站点的每个Locust(蝗虫)实际上都在其自己的进程中运行(Greenlet)。这使用户可以在Python中编写非常有表现力的场景,而不必使用回调或其他机制。

: d1 e8 I/ {& [1 D; [快速部署Locust
" P- |0 l4 ?, m9 b9 t9 p4 g; t) T6 Q1 k; R
Locust 应用已发布到 开源应用商店,搜索 locust 安装最新2.5.1版本即可。

9 B% k1 k0 F: t. q
3 ~% y& ?& o/ @% x) K
在Rainbond上使用Locust进行压力测试-1.jpg

$ Z0 h/ l1 Q0 `/ q! X, [* b2 T3 r* T7 V) T9 b% o
安装完成后,您将会得到一个Locust主从集群,其中,master组件负责提供UI界面,和并发任务的调度;slave组件负责执行并发任务,slave组件同时支持横向伸缩,当产生的测试并发达到一定的限额时,只需扩展 slave 组件实例即可,例如:

5 `  @0 P1 k% D" E; q3 f+ w1 `/ g4 I. o
在Rainbond上使用Locust进行压力测试-2.jpg
+ ]* D5 p. F2 a& m- A; @' {& K
如何使用9 g. W- B  w# Y: {* J  n

" I' ^" v; i, z* H$ g& A( W5 u4 O
Locust_Master 提供了一个基于WEB-UI的图形化管理界面,首次登陆,会提示输入一些信息:

- @; T/ h0 i' J
8 m* T3 S6 }* C; l2 ^5 y: v
默认用户密码:locust locust,可配置 Locust_Master 组件的环境变量 LOCUST_WEB_AUTH进行修改。
+ K" K, G+ u5 Z1 A$ y9 D; G4 X

! |% i6 Q! G% R# N

) ^6 Q. Y+ X5 R1 o
在Rainbond上使用Locust进行压力测试-3.jpg

6 J% `% ?' b, o5 B
「Number of users」 填写模拟的并发用户数量,经过测试,单个slave实例可以轻松提供上千个用户并发的压力。

1 Z) P7 f6 ^6 j5 B$ x1 k
「Spawn rate」 填写蝗虫的孵化率,即每秒产生多少用户。

3 j5 H, Q6 m/ A2 Q: f
「Host」 填写想要压测的站点地址。
4 x. L2 }( X' w6 ~& O" w1 E' C7 F
当Host以及用户,并发量定义完毕以后,还需要去定义一下测试用例,即用户访问Host之后的行为,Locust是通过一个名为/locustfile.py 的Python脚本来定义用户行为,在Rainbond平台的 Locust_Master 组件内 环境配置 -> 配置文件设置 进行编辑修改。

: i0 I1 r9 P" d/ B. o- D2 W7 H5 p/ \( Z/ Z2 P! [' q
在Rainbond上使用Locust进行压力测试-4.jpg

+ p, g/ Q9 D9 e3 x+ }
代码示例如下:

! W# c5 p4 z& f0 jfrom locust import HttpUser, task, betweenclass MyUser(HttpUser):    wait_time = between(5, 15)    @task(2)    def index(self):        self.client.get("/")    @task(1)    def about(self):        self.client.get("/docs/")
这个脚本将按照顺序模仿以下行为:

; V& Y" C0 G: ^5 N. `

    1 b$ I5 x3 Z; v" `; g
  • 请求Host的 / 路径两次0 u8 T$ ~8 g+ N. y# d/ }
  • 请求Host的 /docs/ 路径一次
    * L* K1 f2 A3 E9 P. F- h
  • 每次执行任务之间,间隔5-15秒
    " Y9 `! O6 V2 s1 Z$ E" y
之所以要这么设计的原因,是Locust的设计者们认为,真正的用户行为,不会像脚本一样接连不断的执行完所有的请求然后退出。更多的情况是,用户做完一件事后,会停顿一会,比如读读说明,思考下一步要干嘛。所以会在每个步骤之间留下一个随机时长的空白期。这种假设实际上更符合用户实际行为。
4 D% f+ z5 {6 G/ P. i5 h
这个文件,将会以配置文件的方式挂载到 locust_master 组件上,并且共享挂载给所有的locust_slave组件。这意味着,如果你想要更改这个文件的内容,只需要去编辑 locust_master 组件中,环境配置下所挂载的配置文件即可。然后更新整个 Locust 集群即可生效。
5 k/ g  O( k. n5 I5 S
结果分析
9 D7 N) w. I! _' D( D9 j/ y" ]. C4 u4 ^& o& m6 b
借助Locust提供的WEB-UI界面,我们可以非常方便的分析压力测试结果。
$ ^4 ^3 Q- x% E
0 K; ]1 O0 ]8 x# M8 m4 T& l
在Rainbond上使用Locust进行压力测试-5.jpg
# D! n! C1 s* Y5 O# l% R
Statistics页面,将向我们展示所有被压测接口的汇总报告。结果包括:
7 g, _- @6 i6 D* F# a
「Type」 请求类型;
& V; q% q1 H+ p( _. Q$ [' E, x4 N「Name」 请求路径;. b) m4 ]+ X! P: u
「Requests」 请求总数;' f- b" D& e4 i. n7 D2 H
「Fails」 失败次数;
/ T* i" A/ _- l% K1 }/ r「Median」 中位数响应时间;" E5 \& }. ~6 Q  t! t
「90%ile」 90%请求响应时间;
  |, D2 Y- M( L' {' |「Average」 平均响应时间;( Q: p; m) v7 \+ |; S
「Min」 最小响应时间;- H" t/ Y; Y' K. q: e3 `' w- y4 V
「Max」 最大响应时间;
- q; t" P4 J5 M4 V% v「Average size」 请求的平均大小;
4 u+ z, z3 ]  u# q, e「Current PRS」 当前吞吐率;
( o) b$ d/ I1 g0 [6 \9 [2 ~「Current Failures」 当前错误率;
. m7 n% ?- e; w, L9 q. y

; Y" d9 A) {. R& D  K
在Rainbond上使用Locust进行压力测试-6.jpg
+ ?3 f" R( p; O* F& k) I
Charts页面将主要结果绘制成为随时间变化的图表,能够在趋势上给予用户指引。
$ ~2 M. j* O! I3 I6 ^* r
除了这些之外,还有几项值得关注的值会在最上面一排全局展示,包括当前请求的主机域名、当前产生的并发用户数量、slave节点数量、当前所有请求接口的总吞吐率、错误率。以及停止测试的按钮。

" c& y6 V" `( M1 A1 n& u
其它的几个页面会提供:
6 E2 F4 ^& }, q0 {5 q
「Failures」 请求失败的接口及失败原因;1 h8 _  a! W5 `! z& y. E
「Expections」 测试中意外的错误以及错误原因% d  v& X0 ^( h- t' L
「Download Data」 csv格式的测试数据下载地址
$ T1 M, M# x% n/ y0 Q* G- V「Workers」 所有slave实例的信息
; E4 o2 g* A2 B3 ]
更多教程请参考Locust官方文档
( n3 C8 s1 v( U, h. b0 v! ^
关于Rainbond  y4 w, k1 v5 R8 g" i  |, H6 e' f9 s
6 F) Q# k; Q% H& R$ `& F& W
Rainbond 是一个开源的云原生应用管理平台,使用简单,不需要懂容器和Kubernetes,支持管理多个Kubernetes集群,提供企业级应用的全生命周期管理,功能包括应用开发环境、应用市场、微服务架构、应用持续交付、应用运维、应用级多云管理等。
/ A, J  E' Z1 B0 ^9 K" w; k
Github:https://github.com/goodrain/rainbond
, U2 L2 n- w$ w 官网:https://www.rainbond.com?channel=toutiao" Y! h7 L; k. w6 ^) Y" o  ~& Y$ G
微信群:请搜索微信公众号
Rainbond 关注并添加群助手入技术交流群
5 |5 b  W9 d+ [% i/ ~ 钉钉群:请搜索钉钉群号 31096419
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

10

金钱

0

收听

0

听众
性别
保密

新手上路

金钱
10 元