严重声明
本人自己学习用,例子都是官方文档的。想学习的自己可以去啃官方文档。
第一节:快速开始
一个简单的小例子认识locust。
安装
安装这种操作我怎么可能不会,略….
from locust import HttpLocust, TaskSet
def login(l):
#第一个参数路径,第二个参数接口入参
l.client.post("/login", {"username":"ellen_key", "password":"education"})
def index(l):
l.client.get("/")
def profile(l):
l.client.get("/profile")
class UserBehavior(TaskSet):
tasks = {index: 2, profile: 1}#封装并配置权重
def on_start(self):
login(self)
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 5000
max_wait = 9000
TaskSet:这个类是个测试套件,用来把定义的接口调用封装起来,形成业务线。
HttpLocust:locust执行时的入口。
这里整理一下思路:
- 导包,HttpLocust(运行入口类),TaskSet(测试套件类)
- 定义执行
- 封装测试套件
- 定义入口
进化版:
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
""" on_start is called when a Locust start before any task is scheduled """
self.login()
def login(self):
self.client.post("/login", {"username":"ellen_key", "password":"education"})
@task(2)#装饰器定义权重
def index(self):
self.client.get("/")
@task(1)
def profile(self):
self.client.get("/profile")
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 5000
max_wait = 9000
好了,一个简单的压测场景就这么被我轻而易举的搞定了,帅气!!!撒花!!!
那么问题来了,场景有了怎么运行呢?
这对我来说简直易如反掌,简直是探囊取物,so easy!!!
locust -f locust_files/my_locust_file.py --host=http://example.com
locust -f locust_files/my_locust_file.py --master --host=http://example.com
locust -f locust_files/my_locust_file.py --slave --host=http://example.com
locust -f locust_files/my_locust_file.py --slave --master-host=192.168.0.100 --host=http://example.com
这些东西看名字就一目了然了,我不用记的。
locus已经启动了,下一步就是配置压测关键性的数据了。模拟用户数和执行时间。
http://127.0.0.1:8089,然后配置,然后run,搞定。
第二节:深入了解
开始正式的编写脚本吧少年!!!
脚本前的小tips(笑脸)
我们写的测试脚本会继承几个locust的类,来研究一下吧,想看源码
- Locust:基类,被HttpLocust继承,定义了所有的测试属性,除了client(就是调用接口时使用的self.client);
- HttpLocust:继承于Locust,添加属性
self.client = HttpSession(base_url=self.host)
,HttpSession继承于requests.Session,在测试套件/用例里用的self.client就是在这里定义的; - TaskSet:规定了测试执行规则,组装测试套件,什么时候执行,怎么执行,怎么退出。
测试开始的重要属性
测试脚本执行的重要属性都是在继承HttpLocust的类中定义的,如下:
class Locust(HttpLocust):
host = None
stop_timeout = 1000
task_set = Tick.ApplyTicket
min_wait = 1000
max_wait = 3000
weight = 10
属性含义:
- host:被测试地址;
- stop_timeout :测试停止时间,单位S;
- min_wait 、max_wait 两个task的启动时间间隔,单位ms;
- weight:locust执行测试试随机选择执行的,weight就是被选中的权重;
- task_set:定义需要进行测试的测试套件。如果是如下的定义就只执行BusinessOne里的测试,如果想全部执行定义task_set = Model即可。
from locust import TaskSet, HttpLocust, task.
class Model(TaskSet):
@task
class BusinessOne(TaskSet):
...
@task
class BusinessOne(TaskSet):
...
class Locust(HttpLocust):
host = None
task_set = Model.BusinessOne
第三节:数据参数化
持续 更新中…..