Locust测试工具使用总结
安装pip install locust查看操作命令locust --help启动方式是命令行启动使用方式是可以在web界面操作或直接在命令行输入参数直接执行。不过人都是视觉动物,有图有真相,方便查看结果简单聊一下文件编写模式,方便理解代码文件中:一般有两种class:Taskset(任务集合类)和User(用户类)这是测试程序,也就是要有测试的目标即任务我们需要把要测试的目标任务写在Taskse
安装
pip install locust
查看操作命令locust --help
启动方式是命令行启动
使用方式是可以在web界面操作或直接在命令行输入参数直接执行。
不过人都是视觉动物,有图有真相,方便查看结果
简单聊一下文件编写模式,方便理解代码
文件中:
一般有两种class:Taskset(任务集合类)和User(用户类)
这是测试程序,也就是要有测试的目标即任务
我们需要把要测试的目标任务写在Taskset类里面。
同时我们还要定义模拟的用户要干些什么操作
然后我们就可以在用户类里面添加操作。
直接进入正题
快速编写一段代码:
# -*- coding: UTF-8 -*-
# @File : locustfile.py
import random
from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(5, 9)
@task(2)
def index(self):
self.client.get("/")
self.client.get("/ajax-notifications/")
@task(1)
def view_post(self):
post_id = random.randint(1, 10000)
self.client.get("/post?id=%i" % post_id, name="/post?id=[post-id]")
def on_start(self):
""" on_start is called when a User starts before any task is scheduled """
self.login()
def login(self):
self.client.post("/login", {"username":"ellen_key", "password":"education"})
上面 的代码呢,没有taskset类,直接在用户里面进行了 对任务的执行,
如果任务量不大,是可以这么快速的编写。
-
接下来详细的说明各个对象
class WebsiteUser(HttpUser):
这是定义的用户类,启动时用户要干啥
必须继承locust的User类,这里的HttpUser在源码中继承了User类wait_time = between(5, 9)
表示用户执行操作后等待的时间,通俗讲,模拟一个用户,当用户执行完给定的任务后等待一段时间重复执行任务。@task(2)
任务装饰器,表示要执行的任务
2表示权重,locust在执行的时候会把所有任务都放在列表里面
如果是2,就放两个,然后在之执行的时候会用random.choice()列表中选择任务self.client.get("/")
任务访问的路由,当执行当前这个任务的时候会去访问这个路由def on_start(self):
重写的方法,在每一个用户启动的时候都会最先执行一次的函数
接下来就是启动:locust --web-host=192.168.1.187
这里默认文件名称为locustfile.py,且必须在文件位置启动
locust -f abc.py --web-host=192.168.1.187
-f 指定启动文件路径
–web-host 表示启动之后访问locust的web界面host 默认端口是8089
这里我们直接访问locust的web测试界面
一行是你要模拟的用户量(1000,表示你要模拟1000个用户去访问)
二行是生产模拟用户的速度(100,表示一秒生产100个模拟用户,1000个用户需要10秒成产完)
三行是测试目标主机(http://192.168.1.187 在测试任务中只写了路由,访问的时候会自动访问该目标地址的路由)
结果查看

用起来还是比较爽的
改造一下上面的代码
# -*- coding: UTF-8 -*-
# @File : locustfile.py
import random
from locust import HttpUser, TaskSet,task, between
class MyTaskSet(TaskSet):
@task(2)
def index(self):
self.client.get("/")
self.client.get("/ajax-notifications/")
@task(1)
def view_post(self):
post_id = random.randint(1, 10000)
self.client.get("/post?id=%i" % post_id, name="/post?id=[post-id]")
class WebsiteUser(HttpUser):
tasks = [MyTaskSet,MyTaskSet1]
wait_time = between(1, 2)
def on_start(self):
""" on_start is called when a User starts before any task is scheduled """
self.login()
def login(self):
self.client.post("/login", {"username":"ellen_key", "password":"education"})
这里就看其来更好理解文件编写的模式和其中的代码逻辑含义
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)