0

Ich muss einen Testfall schreiben, um die Erlaubnis des Benutzers zu testen. In jedem Testfall hat UserA unterschiedliche Berechtigungen und führt die Überprüfung durch. Ich möchte Admin-Rolle verwenden, um Benutzer eine andere Berechtigung in setup_method bereitzustellen. Wie kann ich Parameter in setup_method übergeben, also vor jedem Start des Testfalls, kann ich einen anderen Testfall haben? Ich habe etwas wie folgt, aber nicht sicher, wie Parameter in setup_method übergeben werden.wie Parameter in setup_method für pytest übergeben werden

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 

Antwort

1

sollten Sie parametrisierte Befestigungen hier verwenden: https://docs.pytest.org/en/latest/fixture.html#fixture-parametrize

So ist der endgültige Code etwas wie folgt aussehen:

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

Als Ergebnis, das Sie nur ein Test haben die Daten getrieben wird.

+0

Was ist, wenn ich das Assert-Ergebnis basierend auf unterschiedlichen Berechtigungen anpassen muss. Wie auch immer, ich kann die Parameter für jeden Testfall angeben. wie userA_permission, muss ich a, b, c verifizieren. userB_permission, ich muss d, e, f überprüfen. – jacobcan118

+0

In diesem Fall können Sie anstelle eines Diktats eine Liste als erwartetes Ergebnis verwenden. Oder irgendein anderes kompliziertes Objekt, das zu Ihren Bedürfnissen passt. – askalozubov

+0

Wenn es für Sie nicht funktioniert, dann können Sie für jede Berechtigung einen separaten Test ausführen, aber als ersten Schritt innerhalb Ihres Tests die Berechtigung setA (ohne die Verwendung von Fixtures) aufrufen: ' def set_permission_to_userA (Berechtigung): login_with_admin() set_permission (Erlaubnis) def test_premission_one(): set_permission_to_userA (permission1) login_with_userA() verifications_here() def test_premission_two(): set_permission_to_userA (permission2) login_with_userA() verifications_here() ' – askalozubov

Verwandte Themen