Python压力测试工具——Locust

本文介绍了一款名为Locust的开源性能测试工具,其特点包括代码定义用户行为、分布式和可扩展性,以及经过大规模应用验证的稳定性。文章详细讲解了Locust的安装过程、示例应用的创建步骤,以及在实际操作中可能遇到的问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Locust一款开源性能测试工具,易于使用、脚本化、可扩展,对开发者非常友好。

特性:

  • 代码定义用户行为
    不用笨重的UI或膨胀的XML,只要简单的代码。
  • 分布式和可扩展
    Locust支持在多台机器上运行分布式的负载测试,可以用来模拟数百万个并发用户。
  • 深受考验
    Locust已被用来模拟数百万个并发用户。Battlelog是一个通过网页发送游戏连接请求的应用,它使用Locust进行了负载测试,所以说Locust是Battletested (久经沙场)。

在这里插入图片描述




安装

pip install locust




初试

app.py

import json
import tornado.web
import tornado.ioloop

LOGIN = False  # 是否登录


def fib(n):
    """计算斐波那契数列的第n项"""
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)


class LoginHandler(tornado.web.RequestHandler):
    def post(self):
        body = self.request.body
        body = json.loads(body)
        username = body.get("username")
        password = body.get("password")
        if username == "foo" and password == "bar":
            global LOGIN
            LOGIN = True
            self.write("Welcome!")
        else:
            self.set_status(400)


class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        if LOGIN:
            self.write("Hello World!")
        else:
            self.set_status(400)


class ItemHandler(tornado.web.RequestHandler):
    def get(self):
        id = self.get_argument("id")
        id = int(id)
        self.write(str(fib(id)))


if __name__ == "__main__":
    print("http://localhost:8888")
    app = tornado.web.Application([
        (r"/login", LoginHandler),
        (r"/hello", IndexHandler),
        (r"/world", IndexHandler),
        (r"/item", ItemHandler),
    ])
    app.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

locustfile.py

import time
from locust import HttpUser, task, between


class QuickstartUser(HttpUser):
    host = "http://localhost:8888"  # 访问的站点,最后不要加斜杠
    wait_time = between(1, 2)

    @task
    def index_page(self):
        self.client.get("/hello")
        self.client.get("/world")

    @task(3)
    def view_item(self):
        for item_id in range(10):
            self.client.get(f"/item?id={item_id}", name="/item")
            time.sleep(1)

    def on_start(self):
        self.client.post("/login", json={"username": "foo", "password": "bar"})

启动Locust:locust

若需指定路径:locust -f locust_files/my_locust_file.py

访问http://localhost:8089/,模拟用户数设为100,每秒产生用户设为10,开始
在这里插入图片描述

结果
在这里插入图片描述




遇到的坑

  1. 无法访问http://0.0.0.0:8089/
    关闭科学上网工具,尝试访问http://localhost:8089/
  2. 接口运行正确但没有图表出来
    如本人使用360浏览器,切换至极速模式即可。




参考文献

  1. Locust 官网
  2. Locust 文档
  3. Locust GitHub
  4. Locust Examples
  5. 性能测试工具Locust
### 使用 Python 进行软件测试的方法和工具 #### 测试运行程序与基本概念 测试运行程序负责执行所有单元测试并报告结果。对于Python而言,标准的测试运行器可以通过特定命令在终端上启动[^1]。 #### 自动化测试的重要性及其框架选择 自动化测试能够显著提升测试效率、降低重复劳动强度以及保障软件品质。鉴于Python拥有众多成熟的测试框架可供选用,在挑选最合适的测试框架时需考虑项目需求等因素[^2]。 #### Selenium与PyTest组合应用实例 为了实现Web应用程序的有效自动化测试,Selenium提供了跨平台的支持能力;而PyTest则以其简洁有力的特点著称,两者联袂可使编写管理和实施可靠性的测试案例变得更加容易[^3]。 ```python import pytest from selenium import webdriver def test_example(): driver = webdriver.Chrome() try: driver.get('http://example.com') assert 'Example Domain' in driver.title finally: driver.quit() if __name__ == "__main__": pytest.main() ``` #### 基于Locust压力测试实践指南 当涉及到性能评估方面的需求时,像Locust这样的压力测试工具体现出了独特的优势——允许开发者利用直观易懂的Python脚本来描述用户行为模式,从而模拟大量并发访问场景下的系统表现情况[^4]。 ```python from locust import HttpUser, TaskSet, task, between class UserBehavior(TaskSet): @task(1) def index(self): self.client.get("/") class WebsiteUser(HttpUser): tasks = {UserBehavior} wait_time = between(5, 9) if __name__ == '__main__': from locust.main import main args = [ '--host=http://example.com', '-f', __file__ ] main(args=args) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XerCis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值