0

我需要编写一些测试用例来测试用户的权限。在每个测试用例中,UserA 具有不同的权限并进行检查。我想使用管理员角色在 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
4

1 回答 1

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')

结果,您只有一项数据驱动的测试。

于 2017-05-12T07:03:19.610 回答