好的,这绝对是我的错,但我需要清理它。我的一个测试脚本相当一致(但并不总是)以一种导致其他人出现问题的方式更新我的数据库(基本上,它会将测试用户的访问权限带到测试数据库)。
通过在每次单独测试之后或每个测试脚本完成之后运行简单查询,我可以很容易地找出导致此问题的脚本。
即pytest
或nose2
将执行以下操作:
run test_aaa.py
run check_db_access.py #ideal if I could induce a crash/abort
run test_bbb.py
run check_db_access.py
...
你明白了。我可以使用内置选项或插件吗?测试套件目前适用于pytest和nose2,所以要么是一个选项。
编辑:这不是测试数据库,也不是夹具加载的数据库。这是许多极其复杂的实时数据库中的任何一个的快照,根据其设计,测试套件应该内省数据库并找出如何运行其测试(几乎所有访问都是只读的) 。这个工作正常,至少在我的特定环境中有许多有益的方面,但它也意味着没有tearDown或fixture-load供我使用。
import pytest
@pytest.fixture(autouse = True)
def wrapper(request):
print('\nbefore: {}'.format(request.node.name))
yield
print('\nafter: {}'.format(request.node.name))
def test_a():
assert True
def test_b():
assert True
示例输出:
$ pytest -v -s test_foo.py
test_foo.py::test_a
before: test_a
PASSED
after: test_a
test_foo.py::test_b
before: test_b
PASSED
after: test_b