我最近发现了pytest.看起来很棒.但是,我觉得文档可能更好.
我正在尝试了解哪些conftest.py文件的用途.
在我(当前很小的)测试套件中,我conftest.py在项目根目录中有一个文件.我用它来定义我注入测试的灯具.
我有两个问题:
conftest.py吗?它有其他用途吗?conftest.py文件吗?我什么时候想这样做?将举例说明.更一般地说,您如何conftest.py在py.test测试套件中定义文件的目的和正确使用?
pytest允许创建自动应用于测试套件中每个测试的夹具(通过autouse关键字参数)。这对于实现影响每个测试用例的设置和拆卸操作很有用。更多细节可以在pytest 文档中找到。
理论上,相同的基础设施对于验证每次测试运行后预期存在的后置条件也非常有用。例如,可能每次测试运行时都会创建一个日志文件,我想确保在测试结束时它存在。
不要拘泥于细节,但我希望你了解基本概念。关键是将这些代码添加到每个测试函数中会很乏味和重复,尤其是当autouse夹具已经提供了将此操作应用于每个测试的基础架构时。此外,fixtures 可以打包成插件,所以我的检查可以被其他包使用。
问题是似乎不可能从夹具中导致测试失败。考虑以下示例:
@pytest.fixture(autouse=True)
def check_log_file():
# Yielding here runs the test itself
yield
# Now check whether the log file exists (as expected)
if not log_file_exists():
pytest.fail("Log file could not be found")
Run Code Online (Sandbox Code Playgroud)
在日志文件不存在的情况下,我不会得到测试失败。相反,我收到了 pytest 错误。如果我的测试套件中有 10 个测试,并且它们都通过了,但是其中 5 个缺少日志文件,我将得到 10 个通过和 5 个错误。我的目标是获得 5 次传球和 5 次失败。
所以第一个问题是:这可能吗?我只是错过了什么吗?这个答案向我表明这可能是不可能的。如果是这样,那么第二个问题是:还有其他方法吗?如果这个问题的答案也是“不”:为什么不呢?这是pytest基础设施的根本限制吗?如果没有,那么是否有计划支持这种功能?