sup*_*zou 3 python testing pytest
我正在使用 py.test 在 python 中编写一些测试。
我正在使用以下装置来创建一个用户并在我的测试中使用它,然后在测试(终结器)之后将其删除:
@pytest.fixture(scope='function')
def test_user(request):
def finalizer():
delete_the_user()
request.addfinalizer(finalizer)
return user()
Run Code Online (Sandbox Code Playgroud)
有delete_the_user()和user()两个功能在此不再赘述。
问题是:我想在一些测试中使用 2 个用户。
我在这一点上没有找到任何主题(或者我可能没有使用权限关键字:/)
我试图这样称呼夹具:
def test_function(test_user_1 = test_user, test_user_2 = test_user):
# Test here
Run Code Online (Sandbox Code Playgroud)
没有成功。
关于我应该关注什么方向的任何想法?
非常感谢 !
该问题接受的答案是正确的,但没有附带示例。当我写这篇文章时,唯一的另一个例子不起作用(尽管它很接近)。
基本上,如果该固定装置返回一个函数,您就可以愉快地重用该固定装置。如果该固定装置创建的对象需要拆除,那么您可以添加一个“终结器”。在这里阅读更多关于他们的信息
从OP中获取代码并进行调整,你的装置最终看起来像这样:
@pytest.fixture(scope='function')
def test_user(request):
user_list = []
def create_user(*args, **kwargs):
# CODE TO CREATE USER HERE
user_list.append(user)
return user
def finalizer():
for user in user_list:
delete_the_user(user)
request.addfinalizer(finalizer)
return create_user
Run Code Online (Sandbox Code Playgroud)
然后,对于您的测试,您可以只使用返回的函数,而不是将每个用户声明为输入test_user
def test_function(test_user):
test_user_1 = test_user()
test_user_2 = test_user()
# Test here
Run Code Online (Sandbox Code Playgroud)
每次调用时test_user(),用户都会被添加到同一个实例中user_list。一旦测试完成(或失败),它就会调用终结器,该终结器可以访问user_list.