[PYTHON] Testen Sie den Kolben mit einem Pytest

Einführung

Entwicklungstests werden normalerweise mithilfe von Bibliotheken und Frameworks automatisiert. Also habe ich versucht, den Einheitentest des Kolbens mit pytest zu automatisieren, aber ich konnte kein einfaches Beispiel finden, also habe ich ein einfaches Beispiel und eine kurze Erklärung zusammengefasst.

Umgebung

Installation

pip install pytestEinfach installieren mit.

Was Sie brauchen, um mit pytest zu automatisieren

Was Sie zum Automatisieren von Unit-Tests mit pytest benötigen, ist die zu testende Quelle (die zu testende Entwicklung) und die Quelle, die die Testmethode beschreibt. Die Quelle der Testmethode gibt die zu testenden Argumente und die Ergebnisse der Funktion an und beschreibt, wie sie verglichen werden.

Einfache Automatisierung von Funktionseinheitentests

Bevor Sie den Komponententest des Kolbens automatisieren, sehen wir uns an, wie Sie Pytest mithilfe einer einfachen Funktion verwenden.

Quelle getestet werden

Da das Testen ohne die zu testende Quelle nicht möglich ist, bereiten Sie die zu testende Quelle vor. Im Beispiel haben wir eine Funktion vorbereitet, die Argumente hinzufügt und zurückgibt. Wenn es sich jedoch um die ursprüngliche Entwicklung handelt, ist das Entwicklungsprodukt gleichwertig.

testing_mod.py


def add_calc(a, b):
    return a + b

Quelle, die die Testmethode beschreibt

Erstellen Sie eine Quelle, die beschreibt, wie die zu testende Quelle und das Ergebnis der Quelle aufgerufen werden. Diese Quelle ruft die Funktion der zu testenden Quelle auf, vergleicht das von der zu testenden Funktion zurückgegebene Ergebnis mit dem hier angenommenen Ergebnis. Wenn es korrekt ist, ist es in Ordnung, und wenn es falsch ist, ist es NG. In dem Beispiel ist es in Ordnung, wenn das zu testende Testmod mit "import test_mod" importiert wird und 1 und 2 an "test_mod.add_calc ()" übergeben werden und das zurückgegebene Ergebnis 3 ist. Ich bin.

py_test_main.py


import pytest
import testing_mod

def test_ok_sample():
    result = testing_mod.add_calc(1, 2)
    assert 3 == result

Unit-Test-Ausführung

Nachdem wir die Quelle des Testziels und der Testmethode haben, möchten wir das Ergebnis für jede Funktion anzeigen. Führen Sie es daher mit der Option -v aus.

# pytest -v py_test_main.py

py_test_main.py .         [100%]                                                                                                                                       
====== 1 passed in 0.05s ======
PS C:\Users\xxxx\program\python> pytest -v py_test_main.py                                   
====== test session starts ======
platform win32 -- Python 3.6.5, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 -- c:\users\xxxx\appdata\local\programs\python\python36-32\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\xxxx\program\python
collected 1 item                                                                                                                     
py_test_main.py::test_ok_sample PASSED     [100%] 

====== 1 passed in 0.02s ======

Wenn Sie sich das Ergebnis ansehen, wurde das zuvor erstellte test_ok_sample PASSED und endete normal, sodass der Test in Ordnung ist. Wenn Sie viele Funktionen erstellen, erhöht sich die Anzahl der angezeigten Funktionen.

Einfache Testautomatisierung für Kolbeneinheiten

Automatisiert das Testen von Kolbeneinheiten. Im Gegensatz zur obigen einfachen Funktionsautomatisierung erfordert der Kolben die Kommunikation vom Client, aber beim Komponententest wird die Funktionalität des Kolbens zum Automatisieren des Komponententests verwendet.

Quelle getestet werden

Erstellen Sie die Quelle des Kolbens. Erstellen Sie im Beispiel etwas, das beim Zugriff auf / die Stammzeichenfolge zurückgibt. Wenn es sich um die ursprüngliche Entwicklung handelt, ist das Entwicklungsprodukt gleichwertig. Informationen zu Flaschen finden Sie unter Eine Zusammenfassung früherer Flaschen.

flask_mod.py


from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def root():
    return "root"

Quelle, die die Testmethode beschreibt

Im Gegensatz zur Quelle der Funktion muss die Quelle, die das Testen des Kolbens beschreibt, einen Client des Kolbens generieren und dann mit diesem Client eine Anforderung stellen, um das Ergebnis zu überprüfen.

Testkolben-Client generieren

Generieren Sie zunächst einen Testclient. Importieren Sie die App aus der zu testenden Quelle und ändern Sie die Testkonfiguration der App in true. Verwenden Sie dann die App `test_client ()`, um den Client zu generieren. Im folgenden Beispiel wäre der Import der zu testenden Quelle "" aus der flask_mod-Import-App "".

py_test_main.py


import pytest
from flask_mod import app

def test_flask_simple():
    app.config['TESTING'] = True
    client = app.test_client() 

Ausführung der zu testenden Funktion

Stellen Sie mit dem oben generierten Client mithilfe der Funktionen get und post eine Anfrage an die zu testende URL. Das Ergebnis ist eine Antwort von der Flasche. Überprüfen Sie daher die `assert``` von pytest, um festzustellen, ob die erwartete Antwort vorliegt. Im folgenden Beispiel gibt result = client.get ('/') `eine Get-Anfrage an / aus und das Ergebnis wird im Ergebnis gespeichert, sodass Daten (body) und root verglichen werden. Ich werde.

py_test_main.py


import pytest
from flask_mod import app

def test_flask_simple():
    app.config['TESTING'] = True
    client = app.test_client() 
    result = client.get('/')
    assert b'root' == result.data

Unit-Test-Ausführung

Nachdem Sie die Quelle des Testziels und der Testmethode gefunden haben, führen Sie sie aus.

# pytest -v py_test_main.py

====== 1 passed in 0.22s =======
PS C:\Users\xxxx\program\python\flask> pytest -v .\pytest_flask.py
====== test session starts ======
platform win32 -- Python 3.6.5, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 -- c:\users\xxxx\appdata\local\programs\python\python36-32\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\xxxx\program\python\flask
collected 1 item

pytest_flask.py::test_flask_simple PASSED  [100%]

====== 1 passed in 0.20s =======

Wenn Sie sich das Ergebnis ansehen, wurde das zuvor erstellte test_flask_simple PASSED und endete normal, sodass der Test in Ordnung ist. Wenn Sie viele Funktionen erstellen, erhöht sich die Anzahl der Funktionen hier.

Beispiel, wenn der Komponententest ein Fehler ist

Lassen Sie uns als Test das Ergebnis sehen, wenn die zu vergleichende Zeichenfolge mit der von flask zurückgegebenen Zeichenfolge abgetastet wird.

# pytest -v pytest_flask.py
======= test session starts =======
platform win32 -- Python 3.6.5, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 -- c:\users\xxxx\appdata\local\programs\python\python36-32\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\xxxx\program\python\flask
collected 1 item

pytest_flask.py::test_flask_simple FAILED                                                                                                                          [100%]

============ FAILURES ============= 
____________ test_flask_simple ____________

    def test_flask_simple():
        app.config['TESTING'] = True
        client = app.test_client()
        result = client.get('/')
>       assert b'sample' == result.data
E       AssertionError: assert b'sample' == b'root'
E         At index 0 diff: b's' != b'r'
E         Full diff:
E         - b'sample'
E         + b'root'

pytest_flask.py:8: AssertionError
======== 1 failed in 0.26s ========

Da sample und root unterschiedlich sind, wird `AssertionError: assert b'sample '== b'root' `angezeigt.

abschließend

Die Automatisierung von Komponententests kann sehr nützlich sein, wenn Sie weniger Aufwand beim Erstellen eines Automatisierungsskripts haben. Das Framework ist eine Möglichkeit, diesen Aufwand zu reduzieren. Zusätzlich zu den oben genannten Funktionen gibt es weitere nützliche Funktionen, z. B. die Vor- und Nachbearbeitung des Tests sowie das Ausprobieren mehrerer Parameter mit derselben Testmethode. ~~ Als nächstes werde ich die praktischen Methoden zusammenfassen. ~~ Eine bequeme Methode ist in Geben Sie die Parameter des Einheitentests des Kolbens sauber mit Pytest an zusammengefasst. Informationen zum Überprüfen der Abdeckung finden Sie unter Überprüfen der Python-Abdeckung mit pytest-cov.

Recommended Posts

Testen Sie den Kolben mit einem Pytest
Testumgebung der Kolbeneinheit (test_client)
Testen Sie die Standardausgabe mit Pytest
Unit Test Log Ausgabe mit Python
Kontrollieren von Testwiederholungen mit Luigi + pytest
Testgetriebenes Entwicklungsstart mit PySide & Pytest
Numpy Unit Test
Geben Sie die Pytest-Clean-Parameter für den Test der Kolbeneinheit an
Rollback DB für jeden Test mit Flask + SQLAlchemy
Primzahlbeurteilung mit Python
Mit Codetest stärken ⑦
Mit Codetest stärken ⑨
Verwenden Sie Mock mit Pytest
Mit Codetest stärken ⑤
Mit Codetest stärken ④
Primzahlbeurteilung mit Python
IP-Einschränkung mit Flask
Mit Codetest stärken ②
Führen Sie einen Komponententest des Databricks Notebook durch
Mit Codetest stärken ①
Python-Unit-Test-Vorlage
Hallo Welt auf Flasche
Programmieren mit Python Flask
Mit Codetest stärken ⑧
Mit Codetest stärken ⑨
Stellen Sie Flask jetzt mit ZEIT bereit
Testen Sie eingebettete Software mit Google Test
Berühre Flask + laufe mit Heroku
Hallo Welt mit Flask + Hamlish
API mit Flask + uWSGI + Nginx
Entwicklung von Webanwendungen mit Flask
Laden Sie den Test-Websocket mit Locust
Anzeigen der Kolbenabdeckung mit pytest-cov
Webanwendung mit Python + Flask ② ③
Datei-Upload mit Flask + jQuery
Webanwendung mit Python + Flask ④
[Pytest] [mock] Anfänger in der Webentwicklung fassten den Unit-Test und den Mock in Python zusammen.
Testgetriebene Entwicklung mit Django Teil 3
[LINE-Anmeldung] Überprüfen Sie den Status mit Flask
Testgetriebene Entwicklung mit Django Teil 4
Testgetriebene Entwicklung mit Django Teil 6
[Memo] Links bei der Entwicklung mit Flask
Erstellen eines Flask-Servers mit Docker
Führen Sie die App mit Flask + Heroku aus
Behalten Sie den Flask API-Server für immer bei
Testgetriebene Entwicklung mit Django Teil 2
Basisauthentifizierung, Digest-Authentifizierung mit Flask
Erstellen Sie eine Flask-Umgebung mit Dockerfile + docker-compose.yml
Testgetriebene Entwicklung mit Django Teil 1
Post Bulletin Board Erstellung mit Flasche
Anwendungsentwicklung mit Docker + Python + Flask
Testgetriebene Entwicklung mit Django Teil 5
Bild-Upload-Funktion mit Vue.js + Flask
Einstellung, um den Inhalt der Bibliothek mit pytest einzugeben und einen Debug-Test durchzuführen