gpt4 book ai didi

python - 在单元测试中启动/停止守护进程的最佳实践(使用 pytest)

转载 作者:行者123 更新时间:2023-12-04 16:45:40 24 4
gpt4 key购买 nike

代码的功能测试通常需要外部资源,例如一个数据库。

基本上有两种方法:

  • 假设资源(例如数据库)始终在运行且始终可用
  • 启动/停止相关资源作为测试的一部分

  • 在 Python unittest(2) 的“旧”世界中,setUp() 和 tearDown() 方法可以
    用于控制服务。

    使用 py.test 世界变得更加复杂,setUp() 和 tearDown() 方法的概念已被替换为用于实现装置的 funcarg 魔法。
    老实说,这种方法被破坏了 - 至少作为 setUp/tearDown 方法的替代品。

    在使用 py.test 的项目中控制服务和资源的推荐方法是什么?

    我们应该继续使用 setUp/tearDown 方法编写测试(至少在需要的地方)还是有更好的模式?

    最佳答案

    pytest 支持 xUnit 风格的设置/拆卸方法,见 http://pytest.org/latest/xunit_setup.html所以如果你喜欢这种风格,你可以直接使用它。

    使用 http://pytest.org/latest/fixture.html还可以实例化一个“ session ”范围的固定装置,它可以为整个测试运行实例化外部进程并返回一个连接对象。代码大致如下所示:

    # content of conftest.py

    import pytest

    @pytest.fixture(scope="session")
    def connection():
    ... instantiate process ...
    return connection_to_process_or_url

    和使用它的测试文件是这样的:
    # content of test_conn.py
    def test_conn_ok(connection):
    ... work with connection ...

    如果您想在测试运行之间保持服务,您需要暂时自己编写一些逻辑(存储 PID,检查它是否活着,如果没有 PID 或不活着,则启动一个新进程)( future 的版本可能包括这样的支持代码)。

    关于python - 在单元测试中启动/停止守护进程的最佳实践(使用 pytest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14281740/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com