我正在开发基于数据库的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
固定装置。另外,我也找不到使它最后执行的方法。答案 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