Locust的使用方法

参考自https://blog.csdn.net/Q0717168/article/details/122612363http://www.51ste.com/share/det-6428.html

Locust是易于使用的分布式性能测试框架,使用协程的方式模拟用户请求,这与LoadRunner和Jmeter这类采用进程和线程的测试工具不一样,由于线程之间的切换是需要占用资源的,IO的阻塞和线程的sleep会不可避免地导致并发效率下降,所以这类测试工具很难在单机上模拟出较高的并发压力。协程是在用户态完成的,上下文切换的代价远比线程切换代价小得多,因此在单机上Locust能够达到更高数量级的并发。

Demo

trylucost.py

from locust import HttpUser, TaskSet, task

# 定义用户行为
class UserBehavior(TaskSet):
    # 任一测试用例执行前均会执行一次
    def on_start(self):
        print('开始性能测试')

    # 表示一个用户为行,访问百度首页。使用 @task装饰该方法为一个事务。client.get()用于指请求的路径“ / ”,因为是百度首页,所以指定为根路径。
    @task(1)
    def index(self):
        self.client.get("/")

    @task(2)  # task()参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1。
    def index2(self):
        self.client.get(
            "/s?wd=locust&rsv_spt=1&rsv_iqid=0xbb8514200006b7d0&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn"
            "=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=9&rsv_sug7=101&rsv_sug2=0&inputT=1458&rsv_sug4"
            "=1911&rsv_sug=2")


# 用于设置性能测试
class WebsiteUser(HttpUser):
    # 指向一个定义的用户行为类。
    tasks = [UserBehavior]
    # 执行事务之间用户等待时间的下界(单位:毫秒)。如果TaskSet类中有覆盖,以TaskSet 中的定义为准。
    min_wait = 3000
    # 执行事务之间用户等待时间的上界(单位:毫秒)。如果TaskSet类中有覆盖,以TaskSet中的定义为准。
    max_wait = 6000
    # 设置 Locust 多少秒后超时,如果为 None ,则不会超时。
    stop_timeout = 5
    # 一个Locust实例被挑选执行的权重,数值越大,执行频率越高。在一个 locustfile.py 文件中可以同时定义多个 HttpUser 子类,然后分配他们的执行权重
    weight = 3
    # 脚本指定host执行测试时则不在需要指定
    host = "https://www.baidu.com"

在示例中,定义了针对https://www,baidu.com网站的测试场景,分为:

  • 用户行为UserBehavior类(继承自TaskSet类):是一个行为集合,定义了用户将执行的任务,on_start(self)在测试开始之前执行一次,这里用来打印开始性能测试的信息。使用@task()装饰器标记任务,参数是其权重,决定了任务被执行的相对频率,权重越高,执行的可能性越大。
  • 性能测试类WebsiteUser(继承自HttpUser类):定义了用户的行为和测试的配置。

locust -f trylucost.py运行,并用web执行,通过浏览器访问:http://localhost:8089(Locust启动网络监控器,默认为端口号8089)

  • 设置模拟用户数
  • 设置每秒启动的模拟用户数
  • 开始运行性能测试

可以得到如下指标:
在这里插入图片描述
在这里插入图片描述

  • Type:请求的类型,例如GET/POST

  • Name:请求的路径。

  • request:当前请求的数量

  • fails:当前请求失败的数量

  • Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值

  • 95%ile,99%ile:响应时间的百分位点,即在所有请求中,由95%或99%的请求响应时间低于这个值

  • Average(ms):平均值,单位毫秒,所有请求的平均响应时间

  • Min:请求的最小服务器响应时间,单位毫秒

  • Max:请求的最大服务器响应时间,单位毫秒

  • Average size(bytes):响应的平均大小,以字节为单位,衡量每次请求返回给客户端的数据量的平均值

  • Current RPS:RPS(Requests Per Second),每秒处理请求数

  • Current Failures/s:每秒发生失败请求的数量

  • no-web执行

locust -f test.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m
locust -f test.py --no-web -c 10 -r 2 -t 1m # 如果脚本中已经指定host,则不需要再次指定
  • -no-web:表示不使用Web界面进行测试
  • -c:设置虚拟用户数
  • -r 设置每秒启动虚拟用户数
  • -t:设置运行时间

关闭服务可直接Ctrl+C。

  • 分布式运行和其他参考本文最上方的参考博客。

在性能脚本中设置检查点

在Locust中设置检查点通常意味着在测试脚本中加入断言,以验证某些条件是否满足,比如响应时间、响应状态码、响应体内容等,如:

@task
def my_task(self):
    response = self.client.get("/my_endpoint")
    response.success()  # 如果状态码是200-299,将记录为成功
@task
def my_task(self):
    response = self.client.get("/my_endpoint", catch_response=True)
    with response as res:
        if res.elapsed.total_seconds() > 1:  # 如果响应时间超过1秒
            res.failure("响应时间过长")
        else:
            res.success()
@task
def my_task(self):
    response = self.client.get("/my_endpoint")
    assert "expected content" in response.text, "响应体不包含预期内容"
  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值