locust (一)实践
2018-11-29 本文已影响22人
Root_123
简介
Locust是一款易于使用的分布式用户负载测试工具。它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户。
这个想法是,在测试期间,一群蝗虫(Locust)会攻击你的网站。您定义了每个蝗虫Locust(或测试用户)的行为,并且实时地从Web UI监视群集过程。这将有助于您在让真正的用户进入之前进行测试并识别代码中的瓶颈。
Locust完全基于事件,因此可以在一台计算机上支持数千个并发用户。与许多其他基于事件的应用程序相比,它不使用回调。相反,它通过协程(gevent)机制使用轻量级过程。每个蝗虫蜂拥到你的网站实际上是在自己的进程内运行(或者是greenlet,这是正确的)。这允许您在Python中编写非常富有表现力的场景,而不会使代码复杂化。
locust和jemter差不多,单机承受并发量比jmeter大,但是不能设置起始时间。
如何使用
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from locust import HttpLocust,TaskSet,task
import os
class GetResume(TaskSet):
@task(1) #设置权重值,默认为1,值越大,优先执行
def get_resume(self):
#如果后台需要的是json格式,需要加header,否则报415
header = {"Content-Type": "application/json"}
self.client.headers.update(header)
url1 = "/api/resume/getAllResume"
json = {'currPage': '1', 'pageSize': '10', 'mark':'0'}
# 网上是直接把Json的格式填进去,但是在本项目中报400,无法识别数据格式,查看系统报错才明白需要转成json对象
req = self.client.post(url1,json = json)
if req.status_code == 200:
print("success")
else:
print("fail")
@task(1)
def get_schedule(self):
header = {"Content-Type": "application/json"}
url2 = "/api/resume/getAllJobSchedule"
json = {"currPage": "1", "pageSize": "10"}
self.client.headers.update(header)
req = self.client.post(url2,json = json)
print("Response status code:", req.status_code)
assert req.status_code == 200
class websitUser(HttpLocust):
task_set = GetResume
min_wait = 3000 # 单位为毫秒
max_wait = 6000 # 单位为毫秒
if __name__ == "__main__":
os.system("locust -f locustfile.py --host=http://xx.4.xx.22:8080")
执行上面编写的脚本后,本地打开localhost:8089或127.0.0.1:8089即能正常访问locust的web UI界面,设置并发用户数,执行压测。
image.png
无web-UI模式
在没有Web UI的情况下运行locust - 可以打开cmd 通过使用--no-web参数,
- -c指定要生成的Locust用户数
- -r每秒启动虚拟用户数
先cd到脚本当前目录,然后执行指令
> locust -f locustfile.py --host=[http://192.168.x.xx:80](http://192.168.x.xx/) --no-web -c 1 -r 1
设置运行时间
如果要指定测试的运行时间,可以使用--run-time
> locust -f locustfile.py --host=[http://192.168.x.xx:80](http://192.168.x.xx/) --no-web -c 1 -r 1 --run-time 10
或使用-t参数
> locust -f locustfile.py --host=[http://192.168.x.xx:80](http://192.168.x.xx/) --no-web -c 1 -r 1 -t 10
运行时间单位,如果不写单位默认是s,也可以指定小时h,分钟m,可以参考以下时间格式
* 10s 10秒(不写单位默认s)
* 5m 表示5分钟
* 1h 1小时
* 1m30s 1分30秒
--csv=example参数保存CSV文件到当前脚本目录example_distribution.csv、example_requests.csv
> locust -f locustfile.py --host=[http://192.168.x.xx:80](http://192.168.x.xx/) --no-web --csv=example -c 1 -r 1 -t 10s
image.png