使用pytest运行测试之前执行健全性检查

时间:2019-01-31 14:49:24

标签: python testing pytest

使用pytest运行测试时,我想执行一些健全性检查。通常,我要检查测试是否可以访问某些可执行文件,以及用户在命令行上提供的选项是否有效。

我发现最接近的东西是使用固定装置,例如:

@pytest.fixture(scope="session", autouse=True)
def sanity_check(request):
  if not good:
     sys.exit(0)

但这仍然可以运行所有测试。我希望脚本在尝试运行测试之前失败。

2 个答案:

答案 0 :(得分:3)

您不需要显式验证命令行选项;这将由arg解析器完成,必要时它将中止执行。至于条件检查,您离解决方案不远。使用

  • pytest.exit至立即终止
  • pytest.skip跳过所有测试
  • pytest.xfail无法通过所有测试(尽管这是预期的失败,因此不会将整个执行标记为失败)

夹具示例:

@pytest.fixture(scope='session', autouse=True)
def precondition():
    if not shutil.which('spam'):
        # immediate shutdown
        pytest.exit('Install spam before running this test suite.')
        # or skip each test
        # pytest.skip('Install spam before running this test suite.')
        # or make it an expected failure
        # pytest.xfail('Install spam before running this test suite.')

答案 1 :(得分:1)

如果要在整个测试方案之前运行健全性检查,则可以使用conftest.py文件-https://docs.pytest.org/en/2.7.3/plugins.html?highlight=re

只需将具有相同作用域和自动使用选项的功能添加到conftest.py:

@pytest.fixture(scope="session", autouse=True)
def sanity_check(request):
  if not good:
     pytest.exit("Error message here")