介绍
官方网站:https://www.locust.io/
官方文档:http://docs.locust.io/en/stable/installation.html
locust与jmeter区别
- 开源:软件都为免费的开源软件
- 使用:jmeter提供GUI界面便于用户操作,locust则需要python编程基础
- 支持协议:使用JMeter,您可以使用内置函数和第三方插件。您无需编码即可测试不同的协议甚至数据库。这些包括JDBC,FTP,LDAP,SMTP等等。
而Locust主要用于基于HTTP Web的测试。但是,您也可以自己编码自定义Python函数进行其他协议的性能测试。 - 并发:JMeter 是基于线程的模型,它为每个用户分配一个单独的线程。每个步骤的线程分配和基准测试需要大量资源,这就是为什么JMeter在一台机器上模拟的用户数量非常有限的原因。
相反,Locust有一个完全不同的用户模拟模型,它基于事件和异步方法实现。这种实现可以让Locust框架在一台机器上轻松模拟数千个并发用户 - 脚本录制:jmeter具有脚本录制的内置功能,而Locust根本没有此功能。除此之外,还有许多第三方插件可以为JMeter制作脚本录制。
安装
pip3 install locust
查看安装版本
locust -V
任务权重
@task
def hello_world(self):
self.client.get(url='/s?wd=phyger',verify=False)
@task(3)
def view_items(self):
for item_id in range(10):
self.client.get(f"/item?id={item_id}", name="/item")
time.sleep(1)
声明两个@task,其中一个@task的权重为3,表示view_items被选择的可能性是hello_world的三倍,运行后,随机挑选一个@task执行,任务执行完,用户将在等待时间后,会再次随机选择一个新任务重复执行
用户权重
如果文件中存在多个用户类,并且在命令行上没有指定用户类,Locust将生成相同数量的每个用户类。您还可以通过将它们作为命令行参数传递来指定要使用同一locustfile中的哪些用户类:
locust -f locust_file.py WebUser MobileUser
可以为用户类设置权重,例如,WebUser的可能性是MobileUser的三倍:
class WebUser(User):
weight = 3
class MobileUser(User):
weight = 1
可以为用户类具体的用户数,这种情况下,权重属性将被忽略:
class AdminUser(User):
wait_time = constant(600)
fixed_count = 1
on_start和on_stop
def on_start(self):
self.client.post("/login", json={"username":"foo", "password":"bar"})
任务开始时调用on_start,同样的任务结束可以调用on_stop
wait_time
class QuickstartUser(HttpUser):
wait_time = between(1, 5)
host = "https://www.baidu.com"
@task
def getIndex(self):
with self.client.get(url='/s?wd=hello', verify=False) as rep:
if not rep.status_code:
self.environment.runner.quit()
"""未指定wait_time,则下一个任务将在完成后立即执行
between最小值和最大值之间的随机时间
constant固定时间""