[PYTHON] Tutoriel pour faire du développement piloté par les tests (TDD) avec Flask-1 Test Client Edition

introduction

Nous vous enseignerons le savoir-faire nécessaire pour un développement piloté par les tests avec Flask sur un total de 5 fois (il est planifié et sujet à changement). Dans cet article, je présenterai l'exemple de code minimum et son exemple d'exécution pour tester automatiquement les applications Web et les API développées avec Flask.

1er article 2e Tutoriel pour faire du développement piloté par les tests (TDD) avec les décorateurs Flask-2 3e écriture 4ème écriture 5ème écriture

Public cible

Aperçu

Le test minimum de l'API créée par Flask avec «Hello, World!» Comme valeur de retour est automatiquement effectué à l'aide du client de test.

Structure du répertoire

Placez l'exemple de code utilisé dans cet article dans la structure de répertoires suivante.

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

version docker

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

Préparation du code

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 (cible de test)

Utilisez une API simple qui génère "Hello, World!".

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 (code de test)

Les détails sont donnés dans la dernière section.

test.py


import sys
sys.path.append('../')
#À partir du nom de fichier de l'application flask.Ce qui a effacé py
import flask_app
import unittest

#Le nom de la classe fonctionne en japonais
class Test_flask_app_Système normal(unittest.TestCase):
    # 1.Définir les paramètres communs
    def setUp(self):
        self.ENDPOINT    = "http://localhost:5000/{}"
        self.DATA        = None
        self.STATUS      = "200 OK"
        self.STATUS_CODE = 200
        self.ROUTE       = None
    #Le cas de test fonctionne en japonais
    def test_1_hello_Pouvoir accéder au monde(self):
        #Définissez les paramètres requis pour chaque cas
        self.DATA  = b"Hello, World!"
        self.ROUTE = "hello_world"
        # 2.Connectez le client de test et le contexte en quelques minutes
        with flask_app.app.test_client() as client:
            # 3.Exécuter l'API à l'aide du client de test
            response = client.get(self.ENDPOINT.format(self.ROUTE))
        # 4.Effectuer un test à l'aide de l'instruction assert
        assert response.data        == self.DATA
        assert response.status      == self.STATUS 
        assert response.status_code == self.STATUS_CODE

        return

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

Lancer le test

Vérifiez [Structure du répertoire](# structure du répertoire) et exécutez la commande suivante.

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

OK

Explication de test.py (code de test)

1. Définissez les paramètres communs

Les classes qui héritent de ʻunittest.TestCaseexécutent toujourssetUp (self)avant d'exécuter le cas de test. Plus précisément,setUp (self)est exécuté avant d'exécutertest_1_flask_app pour être accessible (self). Par conséquent, même s'il y a plusieurs cas de test, ils sont exécutés de la même manière, il est donc bon d'initialiser les paramètres communs utilisés dans la classe. Strictement différent, mais il est bon de reconnaître que les variables initialisées dans setUp (self)` peuvent être couramment utilisées dans tous les cas de test de la classe.

2. Connectez le client de test et le contexte avec l'instruction with

Il est possible d'utiliser un client de test en utilisant la syntaxe with. Le début de flask_app.app.test_client () est le nom de base du fichier python à tester avec l'extension supprimée. Cette fois, la cible du test est flask_app.py, donc ce sera flask_app.

3. Exécutez l'API à l'aide du client de test

Exécutez l'API pour flask_app.py en utilisant la méthode get du client de test dans 2. Le résultat de l'exécution est stocké dans la propriété de réponse.

4. Effectuez le test à l'aide de l'instruction assert

Utilisez l'instruction assert pour comparer la propriété de réponse avec le jeu de résultats attendu dans 1. Dans ce code de test, seuls trois types de valeur de retour de l'API (response.data), status ( response.status) et code d'état (response.status_code) sont comparés. Si vous voulez le comparer avec d'autres résultats d'exécution, vous pouvez vérifier la propriété de réponse` en utilisant la fonction python suivante.


dir(response)

Par conséquent, il est conseillé de sélectionner les propriétés qui doivent être confirmées comme appropriées et de les comparer avec l'instruction assert.

Résumé

Dans le code de test, j'ai présenté l'utilisation mystérieuse du client de test de Flask.

la prochaine fois

Tutoriel pour faire du développement piloté par les tests (TDD) avec les décorateurs Flask-2

Recommended Posts

Tutoriel pour faire du développement piloté par les tests (TDD) avec Flask-1 Test Client Edition
Tutoriel pour faire du développement piloté par les tests (TDD) avec Flask-2 Decorators
[Test Driven Development (TDD)] Chapitre 21 Résumé
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 5 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 4 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 1, 2, 3 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 6 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe en Python ~ Tutoriel Django 7 ~
Développement piloté par les tests avec Django Partie 3
Mettre en œuvre un test piloté par table en Java
Développement piloté par les tests avec Django Partie 4
Développement piloté par les tests avec Django Partie 6
Développement piloté par les tests avec Django Partie 2
Développement piloté par les tests avec Django Partie 1
Développement piloté par les tests avec Django Partie 5
Découvrez la partie I «Monnaie multinationale» du livre «Test Driven Development» avec Python
Démarrage du développement piloté par les tests avec PySide & Pytest
(Pour moi) Mettez Flask dans VS Code
Conseils pour créer de grandes applications avec Flask
Résumé du tutoriel Django pour les débutants par les débutants ⑤ (test)