Web压力测试工具:Locust

by Web全栈工程师 on 2017 年 10 月 22 日

Locust是一款用Python编写的分布式用户负载测试工具,用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户。

Locust完全基于事件,因此可以在一台机器上支持数千个并发用户。与许多其他基于事件的应用程序相比,它不使用回调,并且能自定义每个并发的行为,非常有助于代码测试:

安装Locust

Locust安装对Python版本有要求,这里使用了conda管理不同的python版本

conda create --name locust_env python=3.6
source activate locust_env
python -m pip install locustio	

编写locust脚本

from locust import HttpLocust, TaskSet, TaskSet

def index(l):
  l.client.get("/")

class UserTasks(TaskSet):
  tasks = [index]

class WebsiteUser(HttpLocust):
  host = "http://0.0.0.0:8089"
  min_wait = 2000
  max_wait = 5000
  task_set = UserTasks	

脚本保存在:locustfile.py

运行Locust测试

#如果存在locustfile.py文件,则可以:
locust --host=http://domain.com

#或者
locust -H http://domain.com -f locustfile.py

打开 url:8089,

有2个参数:

  • Number of users to simulate的意思是我们需要多少的并发用户
  • Hatch rate (users spawned/second)每秒递增用户

参数“Number of users to simulate” 和 system open files limit 文件句柄限制有关,影响到并发上限

#查看open files
ulimit -n
ulimit -Sn
ulimit -Hn

#临时修改 open files
ulimit -n 1024000

#永久修改
echo "fs.nr_open = 10000000" >> /etc/sysctl.conf
echo "fs.file-max = 11000000" >> /etc/sysctl.conf

一般nginx的并发在5万左右

参考资料

https://docs.locust.io/en/stable/quickstart.html#start-locust
https://debugtalk.com/post/locustplus-talk-about-performance-test/
https://debugtalk.com/post/head-first-locust-user-guide/
http://www.chengweiyang.cn/2015/11/14/how-to-enlarge-linux-open-files-upper-cell/

Leave a Comment

Previous post:

Next post: