ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

1.6 万 Star!微软谷歌都在用 Python 性能测试工具

2021-05-17 22:29:50  阅读:238  来源: 互联网

标签:1.6 Star Python locust self Locust item client 测试工具


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

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

链接:https://github.com/locustio/locust

截止文章写作时,一共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 

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

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

小结

本文先了解了Locust的背景和生态,它是值得学习的,对于Python技术栈来说更加如此。接着介绍了使用pip命令安装Locust,其中发现顺带安装了flask,Locust的Web功能是flask提供的。

然后给出了一段示例代码,按照步骤上手Locust。最后对示例代码进行了解析,浅尝辄止。locustfile实际上该怎么写呢?

标签:1.6,Star,Python,locust,self,Locust,item,client,测试工具
来源: https://blog.csdn.net/w080536w/article/details/116951747

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有