[PYTHON] Machen Sie fixture zu einem Argument, das in py.test parametrisiert werden soll

Einführung

Die Pytest-Vorrichtung ist ein sehr nützliches Werkzeug, wenn Sie den Test unter den gleichen Bedingungen wiederholen möchten. Als ich Fixture als Testparameter verwenden wollte, um einen Test zu schreiben, der verschiedenen Bedingungen gemeinsam ist, wurden die Informationen unerwartet nicht im Netz gesammelt, daher werde ich sie hier beschreiben.

Informationen zur Verwendung von Fixture als Testparameter finden Sie übrigens unter Offizielle Seite und GitHub. / pytest-dev / pytest / issue / 349), daher besteht die Möglichkeit, dass in naher Zukunft eine etwas einfachere Methode bereitgestellt wird.

Was du machen willst

import pytest

@pytest.fixture
def fixture_a():
    yield 1

@pytest.fixture
def fixture_b():
    yield 2

@pytest.fixture
def fixture_c():
    yield 3

@pytest.mark.parametrize("expected, generated", [
        (1, fixture_a),
        (2, fixture_b),
        (5, fixture_c),
])
def test_fail(expected, generated):
    assert expected == generated

Dies funktioniert jedoch nicht.

Alternative

Stellen Sie die Leuchten mit dem Dekorateur pytest.fixture zusammen.

test.py


#Andere Funktionen sind die gleichen wie oben

@pytest.fixture(params=['a', 'b', 'c'])
def context(request):
    if request.param == 'a':
        return (1, request.getfixturevalue('fixture_a'))
    elif request.param == 'b':
        return (2, request.getfixturevalue('fixture_b'))
    elif request.param == 'c':
        return (4, request.getfixturevalue('fixture_c'))

def test_fixture_parameterize(context):
    expected, generated = context
    assert expected == generated
$ pytest test.py
========================================= test session starts =========================================
platform linux2 -- Python 2.7.12, pytest-3.1.0, py-1.4.33, pluggy-0.4.0
rootdir: /home/koreyou/work/pytest_fixture_parameterize, inifile:
collected 3 items 

test.py ..F

============================================== FAILURES ===============================================
____________________________________ test_fixture_parameterize[c] _____________________________________

context = (4, 3)

    def test_fixture_parameterize(context):
        expected, generated = context
>       assert expected == generated
E       assert 4 == 3

test.py:31: AssertionError
================================= 1 failed, 2 passed in 0.02 seconds ==================================

Es schlägt wie erwartet fehl.

Recommended Posts

Machen Sie fixture zu einem Argument, das in py.test parametrisiert werden soll
So erstellen Sie ein interaktives CLI-Tool mit Golang
Eine Alternative zu "Pause" in Python
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
Ich möchte ein Automatisierungsprogramm erstellen!
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (11)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (1)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (4)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (7)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (3)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (6)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (5)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (10)
So nehmen Sie Python Interpreter-Änderungen in Pycharm vor
Wie man eine öffentliche Funktion in Pytest verspottet
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (9)
Ein Tool zum Erstellen von Maskenbildern für ETC in Python
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Machen Sie jede PowerPoint-Seite zu einer Bilddatei in Python
Wie man Yubico Yubikey von Manjaro Linux erkennt
Erklären Sie ausführlich, wie Sie mit Python einen Sound erzeugen
So erstellen Sie einen HTTPS-Server mit Go / Gin
So erstellen Sie einen Bild-Uploader mit Bottle (Python)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (12) (vollständig)
Wie man Decorator in Django benutzt und wie man es macht
Ich habe versucht, eine OCR-App mit PySimpleGUI zu erstellen
So geben Sie eine unendliche Anzahl von Toleranzen in der Überprüfung der numerischen Argumentvalidierung von argparse an
Wenn Sie ein Argument in die Abschlussfunktion einfügen und später ausführen möchten