0


Locust的使用方法

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

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

Demo

trylucost.py
from locust import HttpUser, TaskSet, task

# 定义用户行为classUserBehavior(TaskSet):# 任一测试用例执行前均会执行一次defon_start(self):print('开始性能测试')# 表示一个用户为行,访问百度首页。使用 @task装饰该方法为一个事务。client.get()用于指请求的路径“ / ”,因为是百度首页,所以指定为根路径。@task(1)defindex(self):
        self.client.get("/")@task(2)# task()参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1。defindex2(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")# 用于设置性能测试classWebsiteUser(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中设置检查点通常意味着在测试脚本中加入断言,以验证某些条件是否满足,比如响应时间、响应状态码、响应体内容等,如:

@taskdefmy_task(self):
    response = self.client.get("/my_endpoint")
    response.success()# 如果状态码是200-299,将记录为成功
@taskdefmy_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()
@taskdefmy_task(self):
    response = self.client.get("/my_endpoint")assert"expected content"in response.text,"响应体不包含预期内容"
标签: python 压力测试

本文转载自: https://blog.csdn.net/a_blade_of_grass/article/details/140151072
版权归原作者 雾重烟秋 所有, 如有侵权,请联系我们删除。

“Locust的使用方法”的评论:

还没有评论