Python技术栈性能测试工具Locust入门

开发 开发工具
Locust是一款Python技术栈的开源的性能测试工具。Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户:

[[397745]]

本文转载自微信公众号「dongfanger」,作者dongfanger。转载本文请联系dongfanger公众号。

Locust是一款Python技术栈的开源的性能测试工具。Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户:

Locust并不小众,从它Github的Star数量就可见一斑:

截止文章写作时,一共15951Star。

Locust生态良好,它已在多家外企(包括世界500强)投入使用:

如此看来,Locust是非常值得学习和掌握的一款工具。

Python的魔力在于化繁为简,基于Python的Locust也能给仍然困惑于性能测试的我们带来启发。

Locust特点

  • 以纯Python方式编写用户脚本,提供极大自由度。
  • 用户脚本可以串行方式编写,Locust会通过轻量级进程/协程产生并发,无需自己做并发编程。
  • 并发量大,借助于gevent库,Locust能产生成千上万并发请求。
  • 开销小,Locust用户运行时开销很小。
  • 良好的Web UI对性能结果实时监测。
  • 能测任何系统任何协议,只需要写个client即可。
  • 开放REST API,尽情发挥。

安装Locust

需要Python版本3.6及以上。

执行pip命令:

  1. $ pip install locust 

验证安装成功:

  1. $ locust -V 

安装时会一并安装依赖库:

Installing collected packages: Werkzeug, pywin32, zope.event, greenlet, gevent, geventhttpclient, itsdangerous, flask, Flask-BasicAuth, ConfigArgParse, pyzmq, psutil, locust

能看出来flask为Locust提供了Web功能。

快速上手

使用Locust一般按照以下步骤进行:

  1. 编写Python用户脚本。
  2. 使用locust命令执行性能测试。
  3. (可选)通过Web界面监测结果。

示例代码如下,新建locustfile.py文件:

  1. import time 
  2. from locust import HttpUser, task, between 
  3.  
  4. class QuickstartUser(HttpUser): 
  5.     wait_time = between(1, 2.5) 
  6.  
  7.     @task 
  8.     def hello_world(self): 
  9.         self.client.get("/hello"
  10.         self.client.get("/world"
  11.  
  12.     @task(3) 
  13.     def view_items(self): 
  14.         for item_id in range(10): 
  15.             self.client.get(f"/item?id={item_id}"name="/item"
  16.             time.sleep(1) 
  17.  
  18.     def on_start(self): 
  19.         self.client.post("/login", json={"username":"foo""password":"bar"}) 

路径切换到locustfile.py文件所在目录,执行命令:

  1. $ locust 

也可以通过-f指定某个目录文件:

  1. $ locust -f locust_files/my_locust_file.py 

运行后,打开http://127.0.0.1:8089看到Web界面:

填写信息后,就能开始压测了。Web界面提供了结果统计数据:

和性能指标走势图:

脚本解析

示例脚本解析如下:

  1. # Locust用户脚本就是Python模块 
  2. import time 
  3. from locust import HttpUser, task, between 
  4.  
  5. # 类继承自HttpUser 
  6. class QuickstartUser(HttpUser): 
  7.     # 每个模拟用户等待1~2.5秒 
  8.     wait_time = between(1, 2.5) 
  9.  
  10.     # 被@task装饰的才会并发执行 
  11.     @task 
  12.     def hello_world(self): 
  13.         # client属性是HttpSession实例,用来发送HTTP请求 
  14.         self.client.get("/hello"
  15.         self.client.get("/world"
  16.  
  17.     # 每个类只会有一个task被选中执行 
  18.     # 3代表weight权重 
  19.     # 权重越大越容易被选中执行 
  20.     # view_items比hello_wolrd多3倍概率被选中执行 
  21.     @task(3) 
  22.     def view_items(self): 
  23.         for item_id in range(10): 
  24.             # name参数作用是把统计结果按同一名称进行分组 
  25.             # 这里防止URL参数不同会产生10个不同记录不便于观察 
  26.             # 把10个汇总成1个"/item"记录 
  27.             self.client.get(f"/item?id={item_id}"name="/item"
  28.             time.sleep(1) 
  29.  
  30.     # 每个模拟用户开始运行时都会执行 
  31.     def on_start(self): 
  32.         self.client.post("/login", json={"username":"foo""password":"bar"}) 

小结

本文先了解了Locust的背景和生态,它是值得学习的,对于Python技术栈来说更加如此。接着介绍了使用pip命令安装Locust,其中发现顺带安装了flask,Locust的Web功能是flask提供的。然后给出了一段示例代码,按照步骤上手Locust。最后对示例代码进行了解析,浅尝辄止。locustfile实际上该怎么写呢?

参考资料:

https://locust.io/

 

https://docs.locust.io/en/stable/

 

责任编辑:武晓燕 来源: dongfanger
相关推荐

2021-06-02 07:15:57

Locust测试工具

2021-05-17 10:44:24

Python 工具编程语言

2020-04-02 09:40:25

移动端性能测试测试工具

2010-06-07 14:42:47

Linux性能测试工具

2012-08-01 10:50:48

性能测试测试架构

2010-06-04 16:07:09

Linux 性能测试工

2024-03-06 18:09:06

Linux性能工具

2016-09-14 11:09:06

Web工具运维

2010-10-15 09:37:14

MySQL性能测试

2010-06-10 17:37:08

Linux 性能测试工

2013-11-13 10:49:50

2017-09-19 18:34:16

Mysql数据库性能测试

2011-04-07 13:53:25

Web工具

2023-11-07 18:00:54

2011-05-31 18:09:05

动态测试

2009-06-26 10:22:58

JSF测试

2022-06-08 07:36:03

LocustKubernete微服务

2013-07-26 09:51:12

网站性能网站测试性能测试

2010-06-13 17:16:15

Linux性能测试工具

2022-11-28 11:31:37

点赞
收藏

51CTO技术栈公众号