如何将参数传递给setup_method for pytest

时间:2017-05-10 20:58:11

标签: python-3.x selenium selenium-webdriver pytest pytest-django

我需要编写一些测试用例来测试用户的权限。在每个测试用例中,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

1 个答案:

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

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