一、示例代码:
from locust import HttpLocust, TaskSetdef login(i):
i.client.post("/login", {"username": "ellen_key", "password":
"education"})def logout(i):
i.client.post("/logout", {"username": "ellen_key", "password":
"education"})def index(i):
i.client.get("/")def profile(i):
i.client.get("/profile")class UserBehavior(TaskSet):# 用户行为类
def on_start(self):
login(self)def on_stop(self):
logout(self)tasks = {index: 2, profile: 1}# 定义任务事件的请求比例class WebsiteUser(HttpLocust):# 蝗虫类
task_set = UserBehavior
min_wait = 3000
max_wait = 6000
这里我们定义了许多Locust任务,它们是带有一个参数(Locust类实例)的普通Python callables 。这些任务收集在tasks属性的TaskSet类下 。然后我们有一个代表用户的 类,我们在其中定义模拟用户在执行任务之间应该等待多长时间,以及哪个 类应该定义用户的“行为”。 类可以嵌套。HttpLocustTaskSetTaskSet
的HttpLocust类从继承 Locust的类,并把它添加一个客户端属性,它是的一个实例 HttpSession,可用于使HTTP请求。
另一种:使用@task装饰器,声明任务的方法
fromlocustimport HttpLocust, TaskSet, task classUserBehavior(TaskSet):
defon_start(self):
""" on_start is called when a Locust start before any task is scheduled """
self.login() defon_stop(self):
""" on_stop is called when the TaskSet is stopping """
self.logout() deflogin(self): self.client.post("/login", {"username":"ellen_key", "password":"education"}) deflogout(self): self.client.post("/logout", {"username":"ellen_key", "password":"education"})
@task(2)
defindex(self): self.client.get("/")
@task(1)
defprofile(self): self.client.get("/profile") classWebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait =5000
max_wait =9000
在Locust类(以及HttpLocust 因为它是一个子类),也可以让一个在指定最小和最大等待时间毫秒,每个模拟用户之间的任务执行(min_wait和MAX_WAIT)以及其他用户的行为。默认情况下,时间是在min_wait和max_wait之间统一随机选择的,但是可以通过将wait_function设置为任意函数来使用任何用户定义的时间分布。例如,对于指数分布的等待时间平均为1秒:
importrandomclassWebsiteUser(HttpLocust):
task_set = UserBehaviour wait_function =lambdaself: random.expovariate(1)*1000
二、启动蝗虫
要使用上面的Locust文件运行Locust,
1. locust文件当前目录运行:
$ locust --host=http://example.com
2. 其它目录下运行,使用-f以下命令指定:
$ locust -f locust_files/my_locust_file.py --host=http://example.com
3. 运行在同一台机器的多个进程中的locust:
- 首先,通过指定--master来启动主进程 :
- 其次,启动任意数量的从属进程:
4. 运行分布在多台机器上的Locust:
必须在启动从机时指定主机主机(在运行分布在单台机器上的Locust时不需要这样做,因为主机主机默认为127.0.0.1):
$ locust -f locust_files/my_locust_file.py --slave --master-host=192.168.0.100 --host=http://example.com
注意
要查看所有可用选项类型: locust --help
打开Locust的Web界面
使用上述命令行之一启动Locust后,应打开浏览器并将其指向http://127.0.0.1:8089(如果您在本地运行Locust)。界面响应如下:
文章图片
【locust实例】