测试 Flask 应用程序

FlaskFlaskBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 pytest 框架测试 Flask 应用程序。测试是软件开发过程中的重要组成部分,因为它有助于确保应用程序的正确性和可靠性。Flask 提供了测试实用工具,便于为应用程序的不同部分编写测试。

注意:你需要自行创建代码文件并在环境中运行它。你可以在 Web 5000 上预览 Flask 服务状态。

设置测试环境

在开始为 Flask 应用程序编写测试之前,你需要设置测试环境。以下是设置步骤:

  1. 通过运行以下命令安装 pytest 框架:

    pip install pytest
  2. 在 Flask 应用程序的 tests 文件夹中创建一个名为 conftest.py 的新文件。

  3. conftest.py 文件中,导入必要的模块:

    import pytest
    from my_app import create_app
  4. 定义一个名为 app 的 fixture,用于创建和配置应用程序实例:

    @pytest.fixture()
    def app():
        app = create_app()
        app.config.update({
            "TESTING": True,
        })
        yield app

    注意,如果你使用的是应用程序工厂模式,应相应地修改 fixture。

  5. 为测试客户端和 CLI 运行器定义 fixture:

    @pytest.fixture()
    def client(app):
        return app.test_client()
    
    @pytest.fixture()
    def runner(app):
        return app.test_cli_runner()

编写测试

既然你已经设置好了测试环境,就可以开始为你的 Flask 应用程序编写测试了。以下是一些你可能想要编写的常见测试示例:

  1. 测试一个路由:

    def test_hello(client):
        response = client.get("/")
        assert response.status_code == 200
        assert b"Hello, World!" in response.data

    此测试向根路由(“/”)发送一个 GET 请求,并检查响应状态码是否为 200,以及响应数据中是否包含字符串“Hello, World!”。

  2. 测试一个 POST 请求:

    def test_login(client):
        response = client.post("/login", data={"username": "test", "password": "pass"})
        assert response.status_code == 200
        assert b"Logged in successfully" in response.data

    此测试向登录路由(“/login”)发送一个包含用户名和密码的表单数据的 POST 请求。它检查响应状态码是否为 200,以及响应数据中是否包含字符串“Logged in successfully”。

  3. 测试一个命令:

    def test_hello_command(runner):
        result = runner.invoke(args=["hello"])
        assert result.exit_code == 0
        assert "Hello, World!" in result.output

    此测试调用一个名为“hello”的命令,并检查该命令是否以代码 0 退出,以及输出中是否包含字符串“Hello, World!”。

运行测试

要运行测试,请在终端中导航到 Flask 应用程序的根文件夹,并运行以下命令:

pytest

此命令将发现并运行 tests 文件夹中的所有测试。你应该会在终端输出中看到测试结果。

总结

在本实验中,你学习了如何使用 pytest 框架测试 Flask 应用程序。你设置了测试环境,为应用程序的不同部分编写了测试,并运行测试以验证代码的正确性。测试是软件开发过程的重要组成部分,为你的 Flask 应用程序编写测试将有助于确保其可靠性和稳定性。