我需要编写一些测试用例来测试用户的权限。在每个测试用例中,UserA具有不同的权限并进行检查。我想使用admin角色在setup_method中为userA提供不同的权限。如何在每个测试用例启动之前将参数传递给setup_method,我可以拥有不同的测试用例?我有类似的内容,但不知道如何将参数传递给setup_method。
class TestPermission():
@classmethod
class setup_method(self, permission):
login as amdin
provide permission to userA
logout
login as userA
@classmethod
class teardown_method(self):
logout as userA
@fixure(permission1)
class test_permissionA(self):
assert drive.find_element_by_xpath('//div[@id="permission1"]') is True
assert drive.find_element_by_xpath('//div[@id="permission2"]') is False
assert drive.find_element_by_xpath('//div[@id="permission3"]') is False
@fixure(permission2)
class test_permissionB(self):
assert drive.find_element_by_xpath('//div[@id="permission1"]') is False
assert drive.find_element_by_xpath('//div[@id="permission2"]') is True
assert drive.find_element_by_xpath('//div[@id="permission3"]') is False
答案 0 :(得分:1)
您应该在此处使用参数化灯具:https://docs.pytest.org/en/latest/fixture.html#fixture-parametrize
所以最终的代码看起来像这样:
@pytest.fixture(scope="function", params=[{'permission': 'permission1', 'expected_result': {'perm1': True, 'perm2': False, 'perm3': False}}, {'permission': 'permission2', 'expected_result': {'perm1': False, 'perm2': True, 'perm3': False}}])
def test_cases(request):
admin_user.set_permission_to_userA(request.param.get('permission'))
return request.param
def test_userA_permissions(test_cases):
login_with_userA()
assert drive.find_element_by_xpath('//div[@id="permission1"]') is test_cases.get('expected_result').get('perm1')
assert drive.find_element_by_xpath('//div[@id="permission2"]') is test_cases.get('expected_result').get('perm2')
assert drive.find_element_by_xpath('//div[@id="permission3"]') is test_cases.get('expected_result').get('perm3')
结果,您只有一个数据驱动的测试。