[PYTHON] Tutorial für die testgetriebene Entwicklung (TDD) mit Flask-1 Test Client Edition

Einführung

Wir bringen Ihnen insgesamt fünfmal das Know-how bei, das für eine testgetriebene Entwicklung mit Flask erforderlich ist (geplant und Änderungen vorbehalten). In diesem Artikel werde ich den minimalen Beispielcode und sein Ausführungsbeispiel zum automatischen Testen von mit Flask entwickelten Web-Apps und APIs vorstellen.

  1. Artikel
  2. Tutorial für die testgetriebene Entwicklung (TDD) mit Flask-2-Dekoratoren
  3. Schreiben
  4. Schreiben
  5. Schreiben

Zielgruppe

Überblick

Der Mindesttest der von Flask erstellten API mit "Hello, World!" Als Rückgabewert wird automatisch mit dem Testclient durchgeführt.

Verzeichnisaufbau

Platzieren Sie den in diesem Artikel verwendeten Beispielcode in der folgenden Verzeichnisstruktur.

flask_01/
├── Dockerfile 
└── app
    ├── flask_app.py
    └── test
        └── test.py

Docker-Version

$ docker --version
Docker version 19.03.12, build 48a66213fe

Code-Vorbereitung

Dockerfile

Dockerfile


FROM python:3.6
USER root

RUN apt update
RUN /usr/local/bin/python -m pip install --upgrade pip
RUN pip install flask==1.1.2

COPY ./app /root/

WORKDIR /root/test

flask_app.py (Testziel)

Verwenden Sie eine einfache API, die "Hallo Welt!" Ausgibt.

flask_app.py


from flask import Flask
app = Flask(__name__)

@app.route('/hello_world')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host="0.0.0.0",port=5000)

test.py (Testcode)

Details finden Sie im letzten Abschnitt.

test.py


import sys
sys.path.append('../')
#Aus dem Dateinamen der Kolbenanwendung.Was löschte py
import flask_app
import unittest

#Der Klassenname funktioniert auf Japanisch
class Test_flask_app_Normales System(unittest.TestCase):
    # 1.Stellen Sie allgemeine Parameter ein
    def setUp(self):
        self.ENDPOINT    = "http://localhost:5000/{}"
        self.DATA        = None
        self.STATUS      = "200 OK"
        self.STATUS_CODE = 200
        self.ROUTE       = None
    #Testfall funktioniert auf Japanisch
    def test_1_hello_Zugang zur Welt haben(self):
        #Stellen Sie für jeden Fall die erforderlichen Parameter ein
        self.DATA  = b"Hello, World!"
        self.ROUTE = "hello_world"
        # 2.Verbinden Sie Testclient und Kontext mit mit Minuten
        with flask_app.app.test_client() as client:
            # 3.Führen Sie die API mit dem Testclient aus
            response = client.get(self.ENDPOINT.format(self.ROUTE))
        # 4.Führen Sie einen Test mit der assert-Anweisung durch
        assert response.data        == self.DATA
        assert response.status      == self.STATUS 
        assert response.status_code == self.STATUS_CODE

        return

if __name__ == '__main__':
    unittest.main()

Führen Sie den Test aus

Überprüfen Sie [Verzeichnisstruktur](# Verzeichnisstruktur) und führen Sie den folgenden Befehl aus.

$ ls
Dockerfile      app
$ docker build -t pytest .
~Kürzung~
$ docker run -it pytest /usr/local/bin/python /root/test/test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.004s

OK

Erklärung von test.py (Testcode)

1. Stellen Sie allgemeine Parameter ein

Klassen, die von "unittest.TestCase" erben, führen immer "setUp (self)" aus, bevor sie den Testfall ausführen. Insbesondere wird "setUp (self)" ausgeführt, bevor "test_1_flask_app" ausgeführt wird, um zugänglich zu sein (self). Selbst wenn mehrere Testfälle vorhanden sind, werden sie daher auf dieselbe Weise ausgeführt. Daher ist es sinnvoll, die in der Klasse verwendeten allgemeinen Parameter zu initialisieren. Streng anders ist es gut zu erkennen, dass die in setUp (self) initialisierten Variablen in allen Testfällen in der Klasse gemeinsam verwendet werden können.

2. Verbinden Sie den Testclient und den Kontext mit der with-Anweisung

Es ist möglich, einen Testclient mithilfe der with-Syntax zu verwenden. Der Anfang von flask_app.app.test_client () ist der Basisname der zu testenden Python-Datei mit entfernter Erweiterung. Dieses Mal ist das Testziel "flask_app.py", also "flask_app".

3. Führen Sie die API mit dem Testclient aus

Führen Sie die API für flask_app.py mit der get-Methode des Testclients in 2 aus. Das Ausführungsergebnis wird in der "Antworteigenschaft" gespeichert.

4. Führen Sie den Test mit der assert-Anweisung durch

Verwenden Sie die assert-Anweisung, um die response-Eigenschaft mit der erwarteten Ergebnismenge in 1 zu vergleichen. In diesem Testcode werden nur drei Arten von API-Rückgabewerten (response.data), Status ( response.status) und Statuscode (response.status_code`) verglichen. Wenn Sie es mit anderen Ausführungsergebnissen vergleichen möchten, können Sie die "Antworteigenschaft" mithilfe der folgenden Python-Funktion überprüfen.


dir(response)

Daher ist es ratsam, Eigenschaften auszuwählen, die entsprechend bestätigt werden müssen, und sie mit der assert-Anweisung zu vergleichen.

Zusammenfassung

Im Testcode habe ich die mysteriöse Verwendung des Testclients von Flask vorgestellt.

nächstes Mal

Tutorial für die testgetriebene Entwicklung (TDD) mit Flask-2-Dekoratoren

Recommended Posts

Tutorial für die testgetriebene Entwicklung (TDD) mit Flask-1 Test Client Edition
Tutorial für die testgetriebene Entwicklung (TDD) mit Flask-2-Dekorateuren
[Test Driven Development (TDD)] Kapitel 21 Zusammenfassung
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 5 ~
Lernverlauf für die Teilnahme an der Entwicklung von Team-Apps mit Python ~ Django Tutorial 4 ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 1, 2, 3 ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 6 ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 7 ~
Testgetriebene Entwicklung mit Django Teil 3
Implementieren Sie einen tabellengesteuerten Test in Java
Testgetriebene Entwicklung mit Django Teil 4
Testgetriebene Entwicklung mit Django Teil 6
Testgetriebene Entwicklung mit Django Teil 2
Testgetriebene Entwicklung mit Django Teil 1
Testgetriebene Entwicklung mit Django Teil 5
Erleben Sie Teil I "Multinationale Währung" des Buches "Test Driven Development" mit Python
Testgetriebenes Entwicklungsstart mit PySide & Pytest
(Für mich) Setzen Sie den Kolben in den VS-Code ein
Tipps zum Erstellen großer Anwendungen mit Flask
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test)