• locust 初识及常用参数


    进程、线程、协程

    进程(Process)

    是资源分配的最小单位,一旦创建了一个进程就会分配一定的资源,它是操作系统进行资源分配和调度运行的基本单位。

    举例,一个正在运行的程序就是一个进程,如微信,浏览器

    注意:一个程序至少有一个进程

    一个进程中最少有一个线程来负责执行程序,同时线程自己不拥有系统资源,但是它可与同属一个进程的其他线程共享进程所拥有的全部资源,在进程中会默认有一个线程用来执行程序,这个线程为主线程,在进程创建一个新的线程这个线程称之为子线程

    线程:

    线程是系统调度的单位,是程序执行时的最小单位。它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。

    线程是程序执行的最小单位,实际上进程只负责分配资源。而利用执行资源执行程序的是线程,也就是说进程是线程的容器。

    多线程是pyhton程序中实现多任务的一种方式

    协程:

    又称微线程,协程是程序级别的,由程序员根据需要自己调度。协程无需线程上下文切换的开销,只是单纯的操作CPU的上下文,所以资源占有率很小。缺点是协程阻塞时可能会使整个程序都阻塞。

    locust

    Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。

    Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少用户。

    Locust 是完全基于时间的,因此单个机器支持几千个并发用户。相比其他许多事件驱动的应用,Locust 不使用回调,而是使用轻量级的处理方式 gevent

    示例代码

    1. from flask import Flask # 导入Flask类
    2. app = Flask(__name__) # 实例化flask
    3. @app.route('/HelloWorld') # 使用路由,给 hello 函数定义一个路由,然后游览器通过http,访问路径,请求页面返回的页面数据
    4. def hello():
    5. print('1')
    6. return 'Hello, World!'
    7. if __name__ == '__main__':
    8. app.run()
    1. # 导入locust的HttpUser,TaskSet和task类
    2. from locust import HttpUser, TaskSet, task
    3. # 定义用户行为(测试用例)
    4. class IndexTask(TaskSet):
    5. #模拟的用户行为
    6. @task()
    7. def index(self):
    8. self.client.get('/HelloWorld') # 访问接口路径
    9. class WebSiteUser(HttpUser):
    10. tasks = [IndexTask]
    11. min_wait = 1 # 每个请求的最短等待时候
    12. max_wait = 5 # 每个请求的最长等待时候
    13. host = 'http://127.0.0.1:5000' # 指定要访问的根本网址

     终端执行

    locust -f .\test1.py --host=http://127.0.0.1:5000

     浏览器打开页面

    http://localhost:8089/

     

    Number of users (peak concurrency):设置模拟的用户总数

    Spawn rate (users started/second):每秒启动的虚拟用户数

    host:压测的地址

    Start swarming:执行locust脚本

    示例 gif

    Type:请求类型,即接口的请求方法;

    Name:请求路径;

    requests:当前已完成的请求数量;

    fails:当前失败的数量;

    Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;

    90%ile:90%响应时间,单位为毫秒

    99%ile:99%响应时间,单位为毫秒

    Average:平均响应时间,单位为毫秒;

    Min:最小响应时间,单位为毫秒;

    Max:最大响应时间,单位为毫秒;

    Average Size:所有请求的数据量,单位为字节;

    Current RPS :每秒钟处理请求的数量。

    Current Failures/s:每秒钟处理请求失败的数量。

    各个页面的作用

    在Chart 可以看到每秒请求总数( Total Requests per Second)和响应时间(Response Times)的详细图表

    Failures 显示了在测试过程中出现的所有错误和数据的统计信息。

    Exceptions 实时显示抛出的异常

    Tasks 显示了性能测试过程中的所有信息

    Dowbload Data 可以下载各种格式的数据里面包含请求数据,响应数据及捕获的异常等

    locust 的无界面模式

     locust -f .\test1.py --host=http://127.0.0.1:5000 --headless -u 1 -r 1 --run-time 1m

    参数的作用

    -f :用于指定的测试脚本

    --host :被测路径的URL

    --headless:表示无UI启动

    -u:等同UI界面里的 Number of users (peak concurrency):设置模拟的用户总数

    -r:等同UI界面里的 Spawn rate (users started/second):每秒启动的虚拟用户数

    --run-time:用于设置测试运行的时长,可参考如下

    1. -u 1000 用户数1000
    2. -r 100 每秒孵化/新增100个用户
    3. -t 1m 运行1分钟
    4. -t 1h 运行1小时
    5. -t 1h1m 运行1小时1分

     示例 gif

    locust CSV 存储测试数据

     locust -f .\test1.py --host=http://127.0.0.1:5000 --headless
    -u 1 -r 1 --run-time 1m  --csv=exaple

     设置写入频率的时间

    1. import locust.stats
    2. # 默认为2秒
    3. locust.stats.CSV_STATS_INTERVAL_SEC = 3

    执行命令后同文件目录生成各个csv文件:

    exaple_exceptions.csv,exaple_failures.csv,exaple_stats.csv,exaple_stats_history.csv

    设置日志级别的参数 --loglevel

    日志的级别分别为DEBUG,INFO,WARNING,ERROR和CRITICAL,默认为INFO,如果不设置--logfile 默认把日志输出至终端

     locust -f .\test1.py --host=http://127.0.0.1:5000 --headless -u 1 -r 1 --run-time 1m  --loglevel
    =INFO --logfile=test

    这个详细的参数表格不错

    Locust工具学习(三)配置信息及--help_七恋丶的博客-CSDN博客

     

  • 相关阅读:
    Vue--Router--<router-view :key=“keyName“/>中key的作用
    谷歌公开自动驾驶新专利:通过眼睛注视向量,精确判断注意力
    基于Python+TensorFlow+Django的交通标志识别系统
    SpringBoot SSMP整合案例
    SpringMVC+Vue实现前后端的农业信息管理系统
    基于YOLOv8模型的头盔行人检测系统(PyTorch+Pyside6+YOLOv8模型)
    前端开发:export 和 export default的区别
    力扣第530与783题 c++(暴力,加双指针优化) 附迭代版本
    【Python实战】年底找工作,年后不用愁,多个工作岗位随你挑哦~(灵魂发问找工作难嘛?)
    奇妙的函数【JavaScript】
  • 原文地址:https://blog.csdn.net/qq_26086231/article/details/125457409