pytest:仅在加载了特定灯具的情况下如何执行设置代码

时间:2019-05-06 14:12:27

标签: python flask flask-sqlalchemy pytest

我正在开发基于数据库的flask应用程序(使用flask-sqlalchemy)。我使用夹具来定义各个测试数据。


@pytest.fixture(scope='class')
def model_a(db):
   a = ModelA()
   db.session.add(a)
   db.session.commit()
   return a


@pytest.fixture(scope='class')
def model_b(db, a):
  b = ModelB(a=a)
  db.session.add(b)
  db.session.commit()
  return b

# …

虽然可以为每个测试对象调用db.session.commit(),但在执行实际测试之前仅调用一次会更有效。

只有在测试直接或间接需要db.session.commit()的情况下,是否有一种方法可以在每次测试之前,在加载所有夹具之后运行db


我认为它们不会起作用的事物:

  • python_runtest_setup钩似乎无法访问固定装置,也无法确定测试是否为{/ 1}加载了db固定装置。
  • 自动使用的固定装置将需要依赖db,从而使所有测试都使用db固定装置。另外,我也找不到使它最后执行的方法。

1 个答案:

答案 0 :(得分:1)

除了间接(灯具取决于其他灯具)外,您不能指定灯具的顺序,请参见issue #1216中的讨论。但是,您可以在挂钩中访问夹具名称和夹具值,因此使用挂钩实际上是一个好主意。但是,for (int i = 1; i < 10; i++) { int x = 10 * i, y = 10 * i; int w = 70 * i, h = 70 * i; fl_push_clip(x, y, w, h); // This is a call cout << "TEST" << endl; } 对于所有固定装置来说都为时过早。请改用pytest_pyfunc_call。示例:

pytest_runtest_setup