在重新运行测试时防止会话夹具过早损坏

时间:2018-12-21 14:57:30

标签: python pytest

我正在conftest.py中设置一些配置,以在特定情况下重新运行失败的pytest测试。

此功能已添加到conftest.py。这个想法是可以通过使用请求夹具将request.node.retry设置为True来将测试设置为重试。

child: Container(
    child: Stack(
      children: <Widget>[
        BackdropFilter(
          filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
          child: Container(
            decoration: BoxDecoration(
                shape: BoxShape.circle,
                color: color
            ),
            height: 60,
            width: 60,
          ),
        ),
        Positioned(
          left: 15,
          top: 15,
          child: Container(
            decoration: BoxDecoration(
                shape: BoxShape.circle,
                color: Colors.lightBlue
            ),
            height: 30,
            width: 30,
          ),
        ),
      ]
    ),
  )

这在运行多个测试时有效,但是如果仅运行一个测试,或者该测试是系列中的最后一个,则测试的第一个失败会导致所有固定装置的拆卸。功能级别的固定装置可以重新设置(实际上,我希望它们是为了确保干净的状态),但是会话级固定装置也被拆除了,我需要它们重新启动测试。

在我准备好之前,有什么方法可以防止会话级设备崩溃吗?

1 个答案:

答案 0 :(得分:0)

此问题的解决方案有点破解-它添加了一个未记录的虚拟测试。

安装pytest-ordering。添加一个新文件,该文件的虚拟测试标记为最后一个标记,例如

@pytest.mark.last
def test_dummy():
    assert True

然后在pytest_runtest_protocol函数中,一开始就跳过虚拟测试:

def pytest_runtest_protocol(item, nextitem):
    if item.name == 'test_dummy':
        return False
    # Rest of function

由于最后一个功能将始终是无法重试的虚拟功能,因此会话固定装置在测试中将是有效的,并且随后将被拆除。