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
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.
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
$ docker --version
Docker version 19.03.12, build 48a66213fe
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
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)
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()
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
Les classes qui héritent de ʻunittest.TestCaseexécutent toujours
setUp (self)avant d'exécuter le cas de test. Plus précisément,
setUp (self)est exécuté avant d'exécuter
test_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.
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
.
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
.
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.
Dans le code de test, j'ai présenté l'utilisation mystérieuse du client de test de Flask.
Tutoriel pour faire du développement piloté par les tests (TDD) avec les décorateurs Flask-2
Recommended Posts