Python 在自定义场景运行器期间刷新第一个测试中的pytest装置

Python 在自定义场景运行器期间刷新第一个测试中的pytest装置,python,pytest,Python,Pytest,我实现了基于pytest的测试,效果很好 但是,我的一个装置使用干净的表初始化数据库,第二个方案使用脏数据库运行测试。如何在后续场景中重新初始化或刷新数据库装置 说清楚一点,我想看看这个: 情景1 test\u demo1获取一个新的数据库,测试将写入该数据库 test\u demo2不会重新初始化数据库,但会看到test\u demo1 情景2 test\u demo1再次获取一个新的DB,测试将写入DB test_demo2不会重新初始化数据库,但只在场景2中看到test_demo1

我实现了基于pytest的测试,效果很好

但是,我的一个装置使用干净的表初始化数据库,第二个方案使用脏数据库运行测试。如何在后续场景中重新初始化或刷新数据库装置

说清楚一点,我想看看这个:

  • 情景1
    • test\u demo1
      获取一个新的数据库,测试将写入该数据库
    • test\u demo2
      不会重新初始化数据库,但会看到
      test\u demo1
  • 情景2
    • test\u demo1
      再次获取一个新的DB,测试将写入DB
    • test_demo2
      不会重新初始化数据库,但只在场景2中看到
      test_demo1
      所做的更改
def pytest\u runtest\u设置(项目):
如果hasattr(item.cls,“场景”)和item.keywords中的“第一个”:
#在这里做什么?
@pytest.mark.usefixtures(“db”)
类TestSampleWithScenarios:
场景=[scenario1,scenario2]
@皮特斯特,马克,第一
def测试演示1(自身,数据库):
#场景2中的db是脏的
通过
def测试演示2(自身,数据库):
通过

我目前正在挖掘pytest的源代码,以找到答案,一旦我有了一些东西,我将在这里发布。

我找到了解决方法。使用DB fixture进行常规测试,
使用场景参数化
,并直接调用类中的测试:

@pytest.mark.parametrize(["scenario"], scenarios)
def test_sample_with_scenarios(db, scenario):
    TestSampleWithScenarios().test_demo1(db, scenario)
    TestSampleWithScenarios().test_demo2(db, scenario)

@Beanbremen先生我添加了一个更新(“澄清”)。我还将制作一些示例代码(即将发布)。谢谢!我在这里看到的一个问题是测试的执行顺序。在您的示例中,您得到了
test\u demo1[scenario1]-test\u demo1[scenario2]-test\u demo2[scenario1]-test\u demo2[scenario2]
,这意味着两个
第一个
测试将在其他测试之前执行,但您需要
test\u demo1[scenario1]-test\u demo2[scenario1]…
,以便数据库重置按预期工作。或者您已经更改了
pytest\u generate\u tests
中的顺序了吗?是的,我已经实现了。啊,好的,所以这不是问题。你能为这件事调整一下db装置吗?或者它在别的地方用过吗?可以调整,是的:)很好!我有另一个解决方法-检查db fixture中的
第一个
标记,但您的标记不取决于测试顺序,因此它更干净。@beanbreman先生感谢您为此花费的时间:-)