Pour tester correctement une application FastAPI, il est essentiel de configurer un environnement de test adéquat. Cela permet de valider le bon fonctionnement des endpoints, des bases de données et d'autres parties de l'application avant de déployer le code en production. Le processus de configuration des tests pour une application FastAPI suit plusieurs étapes fondamentales, qui incluent la création de fichiers de configuration, la définition de tests unitaires et l'exécution de tests d'intégration.
La première étape consiste à définir la structure du projet. Un projet FastAPI minimaliste doit commencer par la création d'un dossier de tests, qui contiendra tous les modules nécessaires pour tester l'application. Il est également nécessaire d'ajouter un fichier de configuration pytest.ini à la racine du projet. Ce fichier doit contenir des instructions pour pytest, un framework populaire pour les tests en Python, et il inclura la définition du chemin PYTHONPATH pour que pytest sache où trouver les modules de l'application. La structure du projet pourrait ressembler à ceci :
Le fichier pytest.ini devrait inclure la ligne suivante pour que pytest sache où chercher les modules de l'application :
Une fois cette configuration en place, on peut commencer à écrire les tests. Le fichier test_main.py contiendra les tests pour l'endpoint /home. Par exemple, pour tester cet endpoint avec httpx, qui permet d'effectuer des requêtes HTTP de manière asynchrone, le test pourrait être structuré comme suit :
Une fois le test écrit, il est possible de vérifier sa bonne configuration en collectant tous les tests dans le projet avec la commande suivante :
Cette commande permet de vérifier que pytest trouve bien tous les tests définis dans le projet et est capable de les exécuter correctement. Si tout est configuré correctement, on peut ensuite exécuter les tests avec la commande :
Une fois les tests exécutés, pytest affichera les résultats, vous indiquant si les tests ont réussi ou échoué.
Écriture et exécution de tests unitaires
Une fois l'environnement de test mis en place, l'étape suivante consiste à écrire et exécuter des tests unitaires. Les tests unitaires permettent de valider le comportement d'une partie spécifique de l'application de manière isolée. Ces tests sont cruciaux pour s'assurer que les différentes parties de l'application fonctionnent comme prévu.
Dans le cadre de FastAPI, les tests unitaires se concentrent principalement sur les endpoints de l'application. Par exemple, nous pouvons tester un endpoint GET /home avec la classe TestClient fournie par FastAPI. Cette classe permet d'effectuer des requêtes HTTP synchrones pour tester les endpoints de manière plus simple et plus rapide que d'autres solutions comme httpx.
Avant d'écrire les tests, il est conseillé de définir une fixture de test, qui permet de réutiliser du code entre différents tests. Cette fixture sera stockée dans le fichier conftest.py, un fichier utilisé par pytest pour centraliser les éléments partagés entre plusieurs modules de test.
Une fois cette fixture définie, il devient facile de l'utiliser dans le test pour effectuer une requête GET sur le endpoint /home :
Cette approche permet d'écrire des tests plus compacts et plus rapides que ceux utilisant httpx. Une fois le test écrit, il suffit de lancer pytest à nouveau :
Si tout fonctionne comme prévu, vous obtiendrez un retour indiquant que les tests ont été exécutés avec succès.
Tests d'intégration
Les tests d'intégration, quant à eux, sont essentiels pour vérifier que les différentes parties de votre application interagissent correctement entre elles. Ils sont particulièrement importants pour tester l'intégration avec des services externes, des bases de données ou d'autres API.
Prenons l'exemple d'une application qui utilise une base de données SQL. Pour tester l'ajout et la lecture d'éléments dans la base de données, il est nécessaire de configurer une connexion à la base de données dans l'application. Voici un exemple de configuration d'une base de données avec SQLAlchemy dans un module database.py :
Ensuite, il faut configurer la session de base de données dans le fichier main.py :
Les endpoints qui interagiront avec la base de données pourront maintenant être créés. Par exemple, un endpoint permettant d'ajouter un élément à la base de données pourrait ressembler à ceci :
Une fois l'endpoint créé, un test d'intégration pourra être écrit pour vérifier l'ajout d'un élément à la base de données, en utilisant la fixture définie précédemment. Il sera aussi nécessaire de vérifier que la base de données retourne les données ajoutées via un autre endpoint qui lit les éléments de la base de données.
Les tests d'intégration garantissent que l'application fonctionne correctement en combinant plusieurs composants du système. Ils permettent de s'assurer que les données sont correctement ajoutées à la base de données et peuvent être lues sans erreurs.
Il est important pour le lecteur de comprendre que les tests d'intégration doivent être réalisés avec des bases de données isolées ou des bases de données en mémoire pour éviter d'altérer les données de production. De plus, il est essentiel d'utiliser des outils comme pytest et TestClient pour s'assurer de la fiabilité et de l'efficacité des tests tout au long du développement.
Comment déployer une application FastAPI avec HTTPS pour le développement local
Lorsque vous travaillez sur une application web, la sécurité est une considération primordiale. Le protocole HTTPS (HyperText Transfer Protocol Secure) est la méthode de base permettant de sécuriser les communications entre le client et le serveur en cryptant les données échangées. Dans cet article, nous allons explorer comment activer HTTPS sur une application FastAPI pour des tests locaux, en utilisant l'outil mkcert pour générer des certificats SSL/TLS et en fournissant des conseils pour un déploiement en production.
Avant de commencer, il est essentiel d’avoir une version de FastAPI supérieure à 0.111.0 installée dans votre environnement. Assurez-vous d’avoir cette version ou une version plus récente en exécutant la commande suivante :
Si vous avez déjà installé FastAPI, vous pouvez également vérifier si vous disposez de la dernière version en utilisant la commande suivante :
Une fois l'installation terminée, nous pouvons commencer à configurer l'application. Créez un dossier de projet, par exemple live_application, et ajoutez un sous-dossier app contenant un fichier main.py avec le code suivant :
Avec cette configuration de base, l’application dispose d’un point de terminaison simple accessible via la route /, qui renvoie un message JSON. Pour démarrer le serveur en mode développement, utilisez la commande suivante :
Le serveur démarre alors et affiche des informations utiles, y compris les adresses auxquelles l'application est accessible localement. Le mode développement active le rechargement automatique de l'application à chaque modification du code, ce qui est pratique pendant le développement.
Activer HTTPS sur FastAPI pour des tests locaux
Afin de sécuriser notre application en utilisant HTTPS, nous allons générer des certificats SSL/TLS pour une utilisation locale avec l'outil mkcert. Ce dernier permet de créer des certificats racine pour que votre navigateur accepte les certificats générés localement comme sources fiables. Voici les étapes à suivre :
-
Installation de mkcert
Avant tout, installez mkcert sur votre machine. L'installation dépend de votre système d'exploitation, mais les instructions sont disponibles sur la page GitHub du projet ici. Une fois installé, exécutez la commande suivante pour vérifier que mkcert fonctionne correctement :
-
Configurer les certificats SSL/TLS
Pour créer des certificats pour le domaine
localhostet l'adresse127.0.0.1, utilisez la commande suivante :Cela générera deux fichiers : un fichier clé privée (
example.com+5-key.pem) et un certificat (example.com+5.pem). Ces fichiers seront utilisés pour activer HTTPS sur votre serveur FastAPI. -
Installer le certificat dans le magasin de confiance de votre système
Avant de commencer à utiliser les certificats générés, vous devez permettre à votre navigateur de leur faire confiance. Cela se fait en exécutant la commande suivante :
Cela ajoute un certificat local à votre magasin de confiance, ce qui permettra à vos navigateurs de l’accepter automatiquement comme source fiable.
-
Démarrer le serveur avec HTTPS
Pour démarrer le serveur avec les certificats SSL/TLS, utilisez la commande
uvicorncomme suit :Cela démarre le serveur FastAPI sur le port 443, en utilisant le certificat SSL et la clé privée. Une fois le serveur lancé, ouvrez votre navigateur et accédez à l'adresse
https://localhost:443. Vous devriez voir un petit cadenas dans la barre d'adresse, ce qui signifie que la connexion est sécurisée. -
Redirection automatique vers HTTPS
Par défaut, si vous tentez d’accéder à votre application via HTTP (par exemple,
http://localhost:443), vous obtiendrez une erreur. Pour éviter cela, vous pouvez configurer une redirection automatique de HTTP vers HTTPS en utilisant un middleware spécifique à FastAPI. Voici comment l'ajouter dans votre fichiermain.py:Ce middleware redirigera automatiquement les requêtes HTTP vers HTTPS, garantissant ainsi une communication sécurisée sur toute la durée de l'utilisation de l'application.
Conseils pour la production
Si vous envisagez de déployer votre application FastAPI en production, il est crucial de mettre en place des pratiques de sécurité adaptées. Bien que mkcert soit utile pour les tests locaux, il ne doit pas être utilisé en production. Pour les déploiements en production, vous devez obtenir un certificat SSL/TLS valide, émis par une autorité de certification reconnue. De plus, il est recommandé d’utiliser un serveur comme nginx ou traefik en tant que reverse proxy pour gérer les connexions HTTPS de manière sécurisée.
L'utilisation de HTTPS garantit que toutes les informations sensibles transmises entre le client et le serveur sont cryptées, ce qui protège contre l'écoute clandestine et l'altération des données. Cela renforce la confiance des utilisateurs et est désormais indispensable dans le développement d'applications web modernes.
Comment assembler et équilibrer le gimbal pour une caméra
Comment la conception conjointe de la trajectoire des UAV et de la planification des utilisateurs via l’apprentissage par renforcement profond améliore-t-elle la performance et la stabilité des systèmes ?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский