安装

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"})
        

这里就看其来更好理解文件编写的模式和其中的代码逻辑含义

官网文档

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐