- Informations générales
- Fonctionnalités
- Liste pré-requis
- Création environnement
- Activation environnement
- Installation des librairies
- Exécution de l'application
- Tests et couverture de code
- Tests unitaires
- Tests d'intégrations
- Tests fonctionels
- Tests de performances avec Locust
- Tests de couverture de code avec Coverage
- Rapport avec flake8
- Informations importantes sur les différents fichiers et dossiers
- Auteur et contact
- Application destinée à la réservation d'événements sportifs.
- L'objectif de ce projet est d'apporter des corrections aux fonctions existantes et d'implémenter de nouvelles fonctions.
- Effectuer un processus de test avec Pytest et Locust.
Plusieurs domaines de l'application Gudlft ont été améliorés à partir du projet forker et cloner à l'adresse suivante :
➔ Python_Testing
. Correction des erreurs
ERROR
: Entering a unknown email crashes the appBUG
: Clubs should not be able to use more than their points allowedBUG
: Clubs shouldn't be able to book more than 12 places per competitionBUG
: Booking places in past competitionsBUG
: Point updates are not reflectedFEATURE
: Implement Points Display Board
. Amélioration des fonctionnalités
def loadClubs():
def loadCompetitions():
def index():
def showSummary():
def book():
def purchasePlaces():
. Création des fonctionnalités
def load_mock_clubs():
def load_mock_competitions():
def display_points_clubs():
Retour en haut 🡅
- Opérations de réservation pour les événements disponibles sur l'application.
- Visualisation des clubs et du nombre de points.
Note : Testé sous Windows 10 Professionnel - Python 3.12.0 - Flask 3.0.0
Retour en haut 🡅
- Interpréteur Python, version 3.12 ou supérieure
Application conçue avec les technologies suivantes :
-
Python v3.12.0 choisissez la version adaptée à votre ordinateur et système.
-
Python est disponible à l'adresse suivante ➔ https://www.python.org/downloads/
-
Flask version 3.0.0 ➔ Documentation Flask
-
Windows 10 Professionnel
-
Les scripts Python s'exécutent depuis un terminal.
- Pour ouvrir un terminal sur Windows, pressez la touche
windows + r
et entrezcmd
. - Sur Mac, pressez la touche
command + espace
et entrezterminal
. - Sur Linux, vous pouvez ouviri un terminal en pressant les touches
Ctrl + Alt + T
.
- Pour ouvrir un terminal sur Windows, pressez la touche
Retour en haut 🡅
- Installer une version de Python compatible pour votre ordinateur.
- Une fois installer ouvrer le cmd (terminal) placer vous dans le dossier principal (dossier racine).
Taper dans votre terminal :
$ python -m venv env
Un répertoire appelé env
doit être créé.
Retour en haut 🡅
- Placez-vous avec le terminal dans le dossier principale (dossier racine).
Pour activer l'environnement virtuel créé, il vous suffit de taper dans votre terminal :
$ env\Scripts\activate.bat
- Ce qui ajoutera à chaque début de ligne de commande de votre terminal
(env)
:
Note : Pour désactiver l'environnement virtuel, il suffit de taper dans votre terminal :
$ deactivate
Retour en haut 🡅
- Le programme utilise plusieurs librairies externes et modules de Python, qui sont répertoriés dans le fichier
requirements.txt
. - Placez-vous dans le dossier où se trouve le fichier
requirements.txt
avec le terminal, l'environnement virtuel doit être activé. - Pour faire fonctionner le programme, il vous faudra installer les librairies requises.
- À l'aide du fichiers
requirements.txt
mis à disposition.
Taper dans votre terminal la commande :
$ pip install -r requirements.txt
Retour en haut 🡅
Lancement du serveur Flask.
- Utilisation de Flask. ➔ Documentation Flask
- Placez-vous avec le terminal dans le dossier principal.
- Activer l'environnement virtuel et ensuite lancer le serveur Flask.
Taper dans votre terminal la commande :
$ set FLASK_APP=server.py
$ flask run
Lancement de l'application dans le navigateur de votre choix.
Se rendre à l'adresse. ➔ http://127.0.0.1:5000/
Note navigateur : Les tests ont était fait sur Firefox et Google Chrome.
Retour en haut 🡅
- Nous effectuons des tests de plusieurs manières pour garantir la qualité du code.
Note : Pour exécuter les tests il est nécessaire d'avoir activer l'environnement virtuel, mais il n'est pas nécessaire de lancer le serveur Flask.
- Utilisation de Pytest. ➔ Documentation Pytest
- Pour exécuter les tests à l'aide de Pytest, utilisez la commande suivante :
$ pytest -v
tests\functional_tests\test_server_functional.py [11%]
tests\integration_tests\test_server_points_table.py [14%]
tests\integration_tests\test_server_purchase_places.py [45%]
tests\unitary_tests\test_server_book.py [50%]
tests\unitary_tests\test_server_exception.py [64%]
tests\unitary_tests\test_server_loading_json.py [80%]
tests\unitary_tests\test_server_login.py [95%]
tests\unitary_tests\test_server_save_data.py [100%]
=================================== 42 passed in 97.09s (0:01:37) =================================
Retour en haut 🡅
- Les tests unitaires sont générés et exécutés grâce au module Pytest.
- Ils sont situés dans le dossier
tests/unitary_tests/
➔ (unitary_tests).test_server_book.py
test_server_exception.py
test_server_loading_json.py
test_server_login.py
Retour en haut 🡅
- Les tests d'intégrations sont générés et exécutés grâce au module Pytest.
- Ils sont situés dans le dossier
tests/integration_tests/
➔ (integration_tests).test_server_points_table.py
test_server_purchase_places.py
Retour en haut 🡅
-
Utilisation de Selenium. ➔ Documentation Selenium
-
Les tests fonctionels sont générés et exécutés grâce au module Selenium.
-
Ils sont situés dans le dossier
tests/functionnal_tests/
➔ (functional_tests).test_server_functional.py
-
Les tests vérifient :
- le fonctionnement du serveur
- la navigation sur les pages
- la saisie de données
- la validation de l'affichage
Chaque méthode de test est conçue pour tester un aspect spécifique de l'application.
- Les tests sont les suivants :
1. def test_home_page():
# Vérifie que la page d'accueil s'affiche correctement et contient le titre attendu.
2. def test_display_points_table_clubs():
# Vérifie que la page "View clubs points" s'affiche correctement
# et affiche le message "Points available by clubs".
3. def test_login_user():
# Test le processus de connexion de l'utilisateur
# et vérifie que la page de bienvenue affiche l'adresse e-mail de l'utilisateur connecté.
4. def test_book_places_reservation_success():
# Teste le processus de réservation de places pour une compétition.
# Il simule la sélection de places, la réservation et vérifie le message de confirmation.
5. def test_book_places_reservation_success():
# Teste le processus de réservation de places pour une compétition.
# Il simule la sélection de places, la réservation et vérifie le message de confirmation.
# Ensuite, le test vérifie que les points disponibles sont mis à jour
# conformément à la réservation effectuée et que le nombre
# de places disponibles pour cette compétition est correctement réduit.
6. def test_logout():
# Teste le processus de déconnexion de l'utilisateur et vérifie que l'utilisateur est redirigé
# vers la page de connexion.
Retour en haut 🡅
-
Utilisation de Locust. ➔ Documentation Locust.
-
Les tests de performances sont générés et exécutés grâce au module Locust.
-
Ils sont situés dans le dossier
tests/performance_tests/
➔ (performance_tests).locustfile.py
-
Lancer le serveur de test de performance :
$ locust -f tests\performance_tests\locustfile.py
- Se rendre sur l'adresse : http://localhost:8089/
- Choisir les options et lancer les tests.
Sur cette page, vous devez préciser :
- Number of total users to simulate : le nombre total d'utilisateurs à simuler.
- Spawn rate : le taux de création d'utilisateurs, il correspond au nombre d’utilisateurs créés par seconde jusqu’à atteindre le nombre total d’utilisateurs.
- Host : l’adresse de l'application, dans notre cas http://127.0.0.1:5000/ l’application est lancée sur le
localhost
.
Page de connexion Locust
Rapport Locust
Type | Name | # reqs | # fails | Avg | Min | Max | Med | req/s | failures/s |
---|---|---|---|---|---|---|---|---|---|
GET | .index | 10 | 0(0.00%) | 79 | 23 | 123 | 62 | 0.30 | 0.00 |
POST | .showSummary | 10 | 0(0.00%) | 47 | 23 | 116 | 33 | 0.30 | 0.00 |
GET | // | 559 | 0(0.00%) | 120 | 13 | 220 | 120 | 16.63 | 0.00 |
GET | //logout | 528 | 0(0.00%) | 118 | 14 | 218 | 120 | 15.71 | 0.00 |
POST | //purchasePlaces | 585 | 0(0.00%) | 63 | 7 | 164 | 63 | 17.40 | 0.00 |
POST | //showSummary | 635 | 0(0.00%) | 63 | 8 | 160 | 63 | 18.89 | 0.00 |
GET | /logout | 10 | 0(0.00%) | 101 | 84 | 109 | 109 | 0.30 | 0.00 |
GET | book | 545 | 0(0.00%) | 60 | 6 | 163 | 61 | 16.21 | 0.00 |
GET | display_points_clubs | 578 | 0(0.00%) | 60 | 5 | 161 | 61 | 17.19 | 0.00 |
Aggregated 3460 0(0.00%) 80 5 220 69 102.93 0.00
Response time percentiles (approximated)
Type | Name | 50% | 66% | 75% | 80% | 90% | 95% | 98% | 99% | 99.9% | 99.99% | 100% | # reqs |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GET | .index | 80 | 100 | 120 | 120 | 120 | 120 | 120 | 120 | 120 | 120 | 120 | 10 |
POST | .showSummary | 42 | 47 | 55 | 65 | 120 | 120 | 120 | 120 | 120 | 120 | 120 | 10 |
GET | // | 120 | 130 | 140 | 140 | 160 | 170 | 190 | 200 | 220 | 220 | 220 | 559 |
GET | //logout | 120 | 130 | 140 | 140 | 160 | 180 | 200 | 200 | 220 | 220 | 220 | 528 |
POST | //purchasePlaces | 63 | 69 | 73 | 75 | 84 | 92 | 100 | 120 | 160 | 160 | 160 | 585 |
POST | //showSummary | 63 | 69 | 73 | 76 | 87 | 94 | 100 | 120 | 160 | 160 | 160 | 635 |
GET | /logout | 110 | 110 | 110 | 110 | 110 | 110 | 110 | 110 | 110 | 110 | 110 | 10 |
GET | book | 61 | 66 | 71 | 73 | 82 | 89 | 100 | 110 | 160 | 160 | 160 | 545 |
GET | display_points_clubs | 61 | 67 | 71 | 74 | 83 | 93 | 100 | 110 | 160 | 160 | 160 | 578 |
Aggregated 69 85 100 110 130 150 170 190 220 220 220 3460
Retour en haut 🡅
- Utilisation de Coverage pour mesurer la couverture de code. ➔ Documentation Coverage
- Cette commande exécute les tests en utilisant Coverage pour collecter les informations de couverture.
$ pytest --cov=.
tests\functional_tests\test_server_functional.py [11%]
tests\integration_tests\test_server_points_table.py [14%]
tests\integration_tests\test_server_purchase_places.py [45%]
tests\unitary_tests\test_server_book.py [50%]
tests\unitary_tests\test_server_exception.py [64%]
tests\unitary_tests\test_server_loading_json.py [80%]
tests\unitary_tests\test_server_login.py [95%]
tests\unitary_tests\test_server_save_data.py [100%]
---------- coverage: platform win32, python 3.12.0-final-0 -----------
Name Stmts Miss Cover
-------------------------------
server.py 161 0 100%
-------------------------------
TOTAL 161 0 100%
================================= 42 passed in 103.20s (0:01:43) =================================
Renvoie : 100% de couverture de code.
- Pour afficher un rapport de couverture avec plus de détails.
$ pytest --cov=. --cov-report html
- Cela générera un dossier
htmlcov
dans lequel vous pouvez ouvrir le fichierindex.html
pour visualiser un rapport interactif de la couverture de code dans votre navigateur.
Rapport Coverage
Retour en haut 🡅
Tapez dans votre terminal la commande :
$ flake8
- Ne renvoie aucune erreur.
Retour en haut 🡅
-
Contient 4 dossiers contenant les fichiers de configuration pour les tests. ➔ (tests)
-
functional_tests
➔ (functional_tests.py)
-
integration_tests
➔ (integration_tests.py) -
integration_tests
➔ (test_server_purchase_places.py) -
integration_tests
➔ (locustfile.py)
-
unitary_tests
➔ (test_server_book.py) -
unitary_tests
➔ (test_server_exception.py) -
unitary_tests
➔ (test_server_loading_json.py) -
unitary_tests
➔ (test_server_exception.py)
-
- Le dossier contient toute la configuration des pages
html
➔ (templates)
-
Dossier qui contient qui contient les images et les badges nécessaire à l'application.
- Le fichier contient la configuration de
Coverage
➔ (.coveragerc)
- Le fichier contient la configuration de
Flake8
➔ (.flake8)
Retour en haut 🡅
Pour toute information supplémentaire, vous pouvez me contacter.
Bubhux : bubhuxpaindepice@gmail.com