事件顺序
由于许多设置和清除操作是相互依赖的,因此以下是它们的执行顺序:
- Locust setup (一次)
- TaskSet setup (一次)
- TaskSet on_start (每个locust一次)
- TaskSet tasks…
- TaskSet on_stop (每个locust一次)
- TaskSet teardown (一次)
- Locust teardown (一次) 通常,setup和teardown方法应该是互补的。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from locust import HttpUser, TaskSet, task, between
import os
class LoginDemo(TaskSet):
headers = ""
def on_start(self):
pass
@task()
def login(self):
with self.client.get("/index.html", headers=self.headers, name="百度首页",
catch_response=True) as rsp:
if rsp.status_code != 200:
print("Response status code:", rsp.status_code)
rsp.failure('/login api response error. got %s' % (rsp.status_code))
def on_stop(self):
pass
class WebsiteUser(HttpUser):
tasks =[LoginDemo]
host = "http://baidu.com/"
wait_time = between(min_wait=1, max_wait=3)
if __name__ == '__main__':
os.system("locust -f test_locust.py --web-host=127.0.0.1")
HttpLocust
类继承自Locust
类,并且添加了一个client属性,该属性是HttpSession
的实例,可用于发出HTTP请求。
模拟的用户定义一个类。它继承自HttpUser
,该属性为每个用户提供了一个 client 属性,该属性是HttpSession
的一个实例。可用于向负载测试的目标系统发出 HTTP 请求。当测试开始时,Locust 将为它每个虚拟用户创建一个此类的实例,并且每个虚拟用户会在自己的 gevent 线程中运行这些实例。
作者:猫与测试
链接:https://www.jianshu.com/p/40102e9a24cb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Locust类
一个Locust类代表一个用户(或者一个集群Locust)。Locust将为每个正在模拟的用户生成(孵化)一个Locust类实例。Locust类通常应该定义一些属性。
task_set属性
task_set属性应该指向一个TaskSet类,这个类定义了用户的行为,下面将对其进行更详细的描述。
wait_time属性
除了task_set属性,还应该声明一个wait_time
方法。它用于确定模拟用户在执行任务之间将等待多长时间。Locust提供了一些内置的函数,返回一些常用的wait_time方法。
最常见的是 between
。它用于使模拟用户在每次执行任务后等待介于最小值和最大值之间的随机时间。其他内置的等待时间函数是constant
和constant_pacing
TaskSet类
如果Locust类代表蝗虫群,则可以说TaskSet类代表蝗虫的大脑。每个Locust类必须设置一个task_set属性,该属性指向TaskSet。
顾名思义,TaskSet是任务的集合。这些任务是普通的python可调用对象,并且,如果我们正在对拍卖网站进行负载测试,则可以完成诸如“加载起始页”,“搜索某些产品”和“竞标”之类的工作。
启动负载测试时,派生的Locust类的每个实例将开始执行其TaskSet。接下来的情况是每个TaskSet将选择一个任务并调用它。然后,它将等待Locust类的wait_time方法指定的秒数(除非已直接在TaskSet上声明了wait_time方法,在这种情况下,它将使用自己的方法)。 然后它将再次选择要调用的新任务,再次等待,依此类推。