Locust
Locust 是比较常见的性能测试工具,底层基于 gevent。官方介绍 它是一款易于使用、可编写脚本且可扩展的性能测试工具,可以让我们使用常规 Python 代码定义用户的行为,而不必陷入 UI 或限制性领域特定语言中.
Locust
具有无限的可扩展性(只要提供客户端python 代码,适用于所有协议的性能测试).
本文为开发性能自动化对比平台时学习相关内容的记录整理。
我们为什么选择locust
特点 | 说明 |
---|---|
开源免费 | Locust是一个开源项目,无需支付费用,可以自由使用和定制。 |
易于学习使用 | 使用Python编写,学习路线平缓,拥有丰富的库和社区支持。 |
可扩展性灵活性高 | 可以根据需要定制测试,以便更准确地评估应用程序的性能。第三方插件较多、 易于扩展。 |
实时统计 | 提供实时统计功能和Web界面,方便监控和分析测试结果。 |
易于集成 | 可以轻松地与持续集成和持续部署工具集成,自动运行性能测试。 |
适用大规模的性能测试 | 支持分布式,可以轻松地在多台机器上运行测试,以模拟大量用户。这使得它非常适合进行大规模的性能测试。 |
Locust的核心部件
Master节点
负责协调和管理整个测试过程,包括启动和停止测试、分发任务、收集和汇总测试结果等。
Worker节点
实际执行测试任务的节点,根据Master节点分配的任务进行模拟用户行为。
Web UI
提供可视化的测试界面,方便用户查看测试结果、监控测试进度等。
测试脚本(Load Test Script)
测试脚本,定义模拟用户行为的逻辑和参数,由Worker节点执行。
Locust内部运行调用链路
时序图如下:
- 在测试启动时,Runner 类的 start() 方法会被调用,该方法会依次调用 EventHook 类的 fire() 方法,触发测试开始事件。
- Runner 类会根据配置创建 Environment 类的实例,并将其作为参数传递给 User 类和 TaskSet 类的构造函数,同时将 User 类和 TaskSet 类添加到 Environment 类的 user_classes 属性中。
- 在测试运行期间,Runner 类会启动多个用户进程,每个用户进程都会创建一个 User 类的实例,并调用 User 类的 run() 方法,该方法会调用 TaskSet 类的 run() 方法,从而执行用户的任务。
- 在任务执行期间,User 类和 TaskSet 类会使用 Environment 类的 client 属性来发送请求,并使用 Environment 类的 stats 属性来记录统计信息。
- 在任务执行完成后,TaskSet 类的 run() 方法会返回,User 类的 run() 方法会进入等待状态,等待其他用户完成任务。
- 在测试结束时,Runner 类的 stop() 方法会被调用,该方法会依次调用 EventHook 类的 fire() 方法,触发测试结束事件。
注:fire() 方法是 Locust 中的 EventHook 类中的一个方法,用于触发事件。在 Locust 的测试生命周期中,有多个事件可以被触发,例如测试开始、测试结束、用户启动、用户完成任务等。当这些事件发生时,EventHook 类会调用 fire() 方法,将事件传递给所有注册了该事件的回调函数。
更多内容点击查看原文:
【Python】万字长文,Locust 性能测试指北