[PYTHON] Zusammenfassung der Verwendung von pytest

Ich hatte bisher selten ** "Testcode" ** geschrieben, aber ich hatte die Möglichkeit, Python-Testcode zu schreiben und lernte, wie man ihn in Eile benutzt. In diesem Artikel habe ich mich auf die Verwendung von pytest konzentriert, einem Framework für Unit-Tests von Python.

Referenz: Offizielles Dokument (https://docs.pytest.org/en/latest/contents.html)


Was ist pytest

Ein Framework für Unit-Tests in Python. Es gibt eine ähnliche, die als unittest bezeichnet wird, aber pytest scheint populärer zu sein. Das Folgende sind die Merkmale von Pytest

Installation

pip install -U pytest

Einfach zu verwenden

Einfacher Unit Test

Grundsätzlich können Sie den Test wie folgt ausführen.

--Schreiben Sie den Testfall mit assert <bedingter Ausdruck>

Wenn Sie den Dateinamen und den Methodennamen in "test_ *" eingeben, wird der Testcode automatisch gefunden (Sie können ihn auch selbst angeben).

test_sample.py


def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

Erstellen Sie die obige Datei test_sample.py und Führen Sie "pytest" aus.

Dann wird das folgende Testergebnis angezeigt.

Testergebnisse
========================================== test session starts ===========================================
platform darwin -- Python 3.7.6, pytest-5.4.3, py-1.8.1, pluggy-0.13.1
rootdir: /Users/xin/work/study/pytest
plugins: hypothesis-5.5.4, arraydiff-0.3, remotedata-0.3.2, openfiles-0.4.0, doctestplus-0.5.0, astropy-header-0.1.2
collected 1 item                                                                                         

test_sample.py F                                                                                   [100%]

================================================ FAILURES ================================================
______________________________________________ test_answer _______________________________________________

    def test_answer():
>       assert func(3) == 5
E       assert 4 == 5
E        +  where 4 = func(3)

test_sample.py:5: AssertionError
======================================== short test summary info =========================================
FAILED test_sample.py::test_answer - assert 4 == 5
=========================================== 1 failed in 0.18s ============================================

Ausnahmebehandlungstest

Ausnahmetests sind mit pytest.raises möglich

error_sample.py


import pytest

def f():
    raise SystemExit(1)

def test_mytest():
    with pytest.raises(SystemExit):
        f()

Ausführen mehrerer Tests in einer Klasse

Durch Erstellen einer Klasse mit dem Präfix "Test" können Sie gleichzeitig die internen Testmethoden testen.

test_class.py


class TestClass:
    def test_one(self):
        x = "this"
        assert "h" in x

    def test_two(self):
        x = "hello"
        assert hasattr(x, "check")

Vorrichtung

Was ist ein Gerät?

Ein Tool zum Einrichten einer Testausführungsumgebung. Ich werde einige nützliche aufgreifen. Einzelheiten finden Sie unten (https://docs.pytest.org/en/latest/fixture.html).

tmpdir Mit dem tmpdir-Fixture können Sie ein eindeutiges Verzeichnis erstellen, das während des Tests vorübergehend verfügbar ist.

test_tempdir.py


import os

def test_create_file(tmpdir):
    p = tmpdir.mkdir("sub").join("hello.txt") #Temporäres Verzeichnis erstellen
    p.write("content")
    assert p.read() == "content"
    assert len(tmpdir.listdir()) == 1
    assert 0

monkeypatch Mit dem Monkeypatch-Gerät können Sie ein Objekt verspotten. Angenommen, Sie haben den folgenden Produktcode und ein "get_value ()" ist eine Funktion, die nicht einfach ausgeführt werden kann.

monkeypatch_product.py


def return_value(): #Produktcode
    a = get_value()
    return a

def get_value(): #Funktionen, die nicht einfach ausgeführt werden können
    return 1

Zu diesem Zeitpunkt können Sie den Test ausführen, indem Sie get_value () durch Ihre eigene Mock-Funktion durch monkeypatch.setattr ersetzen.

monkeypatch_test.py


import monkeypatch_product

#Testcode
def test_return_value(monkeypatch):
    def mock_get_value():
        return 100

    #Ersetzt durch Scheinfunktion
    monkeypatch.setattr(monkeypatch_product, "get_value", mock_get_value)
    res = monkeypatch_product.return_value()
    assert res == 100

Sie können Umgebungsvariablen auch mit monkeypatch.setenv verspotten.

monkeypatch_env.py


import os

#Produktcode
def get_os_user_lower():
    username = os.getenv("USER")

    if username is None:
        raise OSError("USER environment is not set.")

    return username.lower()

#Testcode
def test_get_os_user_lower(monkeypatch):
    monkeypatch.setenv("USER", "TestingUser")
    assert get_os_user_lower() == "testinguser"

Recommended Posts

Zusammenfassung der Verwendung von pytest
pytest Zusammenfassung
Zusammenfassung der Verwendung von pyenv
pandas Matplotlib Zusammenfassung nach Verwendung
Super grundlegende Verwendung von Pytest
pytest
Bequeme Nutzungsübersicht von Flask
Pipenv Nutzungszusammenfassung (für mich)
Zusammenfassung der grundlegenden Verwendung von Pandas
Python-Zusammenfassung
Django Zusammenfassung
python-pptx Zusammenfassung
pytest memo
Linux Zusammenfassung
Python-Zusammenfassung
Django Zusammenfassung
pyenv Zusammenfassung
Zusammenfassung der Zeichenketten 1
matplotlib Zusammenfassung