分布式测试工具

locust初尝试

Posted by TuoX on October 24, 2018

在开发中,经常需要测试一下自己的网站或者api可以经得住多少的压力测试,方便我们对服务器的升级优化等。今天就跟大家介绍一下一款压力测试神器locust。


安装

pip安装:

    pip install locust

源码安装:

[下载地址](https://github.com/locustio/locust)

举例

from locust import HttpLocust, TaskSet, task

class WebsiteTasks(TaskSet):
    def on_start(self):
        self.client.post("/login", {
            "username": "test_user",
            "password": ""
        })
    
    @task
    def index(self):
        self.client.get("/")
        
    @task
    def about(self):
        self.client.get("/about/")

class WebsiteUser(HttpLocust):
    task_set = WebsiteTasks
    min_wait = 5000
    max_wait = 15000


解读一下代码,

1.task_set为任务设置,WebsiteTasks指定运行的任务为WebsiteTasks类方法。

2.min_wait最小等待时间,max_wait最大等待时间,均为开启虚拟用户的情况。

3.WebsiteTasks 任务类
  
  1).on_start 表示进行任务之前的操作,self.client.post 为调用http方法,其实是内部封装了requests,支持get、post、delete、push等。这里表示进行下面任务之前先进行登录操作。

  2).task 任务修饰器,后面可以带上参数,例如 task(1) 1表示权重,越大,访问的比重越大。

启动

locust -f ***.py --host https://www.google.com

这行命令表示 启动***.py文件,内容就是我们刚刚举例中的文案,--host表示访问的网站。

启动成功之后可以直接访问 http://localhost:8089 就可以看到网站,之后进行用户数量,每秒增长的用户数配置,启动,就可以查看各种分析结果了。

分布式

大家都知道一台机器的网络带宽有限,即使你想模拟上千万级别的请求,也未必能达到你想要的效果。因为你的机器模拟的了请求,但是网络带宽受不了也无济于事。

这里我们就需要分布式的进行模拟请求,locust提供了一个很好的方法,一台为master,master不负责进行任务的处理,只负责统计分析,可以n多台slave,这样子就可以满足我们的需求了。

1.以master启动

    locust -f ****.py --host https://www.baidu.com --master --master-bind-host=0.0.0.0 --master-bind-port=5557

    作为master启动,绑定ip为开放模式,端口5557

2.以slave启动

    locust -f ****.py --slave --master-host=127.0.0.1 --master-port=5557

    作为slaver启动,绑定ip为master的ip,端口为master的端口

测试

打开浏览器,输入http://localhost:8089

1.输入用户数量,每秒启动的用户数,启动

2.结果信息结果

    Statistics 查看一些请求的连接信息

    Charts 图表展示

    Failures 一些失败的情况

    Exception 异常错误

    Download Data 下载一些报表数据,以csv的形式

    Slaves  slave上的一些情况,包括启动的用户数等

End

始于初心,坚韧不拔,相信总会有成功的一天。