2017-12-09 5 views
3

Ich versuche, drei verschiedene Vorrichtungen zu meinem pytest.mark.parameterize Dekorateur passieren, wie folgt aus:Wie kann ich Fixtures an pytest.mark.parameterize übergeben?

@pytest.mark.parametrize("credentials, return_code", [ 
    (user1, 200), 
    #(user2, 200), 
    #(user3, 401) 
]) 
def test_login(): 
    assert True 
# Actual test uses response.return_code == return_code 

Allerdings bekomme ich einen Fehler, der lautet:

NameError: name 'user1' is not defined 

Dies aber nicht richtig ist, ich habe definiert es in conftest.py:

user1_info = [('user1', 'password')] 
@pytest.fixture(params=user1_info) 
def user1(request): 
    return request.param 

Die Leuchte funktioniert, wenn ich meinen Test ändern, so zu sein:

def test_login(user1): 
    assert True 
# Actual test uses response.return_code == return_code 

Das Problem ist, dass, wenn ich es auf diese Weise zu tun, ich habe drei separate Tests zu schreiben, eine für jedes Gerät und für jede status_code Prüfung . Wenn ich parameterize verwenden könnte, könnte ich eine Funktion verwenden und den Benutzer/erwarteten Rückkehrcode überprüfen.

Wie kann ich meine Leuchten verwenden, die Teil der pytest.mark.parameterize Dekorateur sind?

Antwort

4

Um Fixtures als parametrisierte Argumente zu übergeben, verweisen Sie sie als Strings und verwenden Sie die Schlüsselwortargumente indirect=True.

Verwenden Sie dann die Parameternamen credentials und return_code als Argumente für Ihre Testfunktion.

@pytest.mark.parametrize('credentials, return_code', [ 
    ('user1', 200), 
    ('user2', 200), 
    ('user3', 401), 
], indirect=True) 
def test_login(credentials, return_code): 
    return True 
Verwandte Themen