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.
pip install pytest
Einfach installieren mit.
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.
Bevor Sie den Komponententest des Kolbens automatisieren, sehen wir uns an, wie Sie Pytest mithilfe einer einfachen Funktion verwenden.
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
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
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.
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.
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"
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.
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()
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
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.
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.
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