-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
✅ Airflow tests e2e: utilitaires & preuve de concept #1396
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Quelques commentaires pour commencer :)
"""Adds Django project root to sys.path, based on | ||
current directory structure: | ||
- core/ = Django root | ||
- dags/utils/django.py""" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"""Adds Django project root to sys.path, based on | |
current directory structure: | |
- core/ = Django root | |
- dags/utils/django.py""" | |
""" | |
Adds Django project root to sys.path, based on current file path | |
""" |
dags/utils/django.py
Outdated
django_add_to_sys_path() | ||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.airflow_settings") | ||
|
||
import django | ||
|
||
django.setup() | ||
|
||
from django.conf import settings |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
on peut mettre cet import dans django_settings_to_dict
dags/utils/django.py
Outdated
django_add_to_sys_path() | ||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.airflow_settings") | ||
|
||
import django | ||
|
||
django.setup() | ||
|
||
from django.conf import settings | ||
|
||
return django_settings_to_dict(settings) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pas sur que ce soit util de renvoyer ces infos au load
Pourquoi ne pas appeler directement django_settings_to_dict
là où tu as besoin de ces info ?
dags/utils/django.py
Outdated
def django_settings_to_dict(settings) -> dict: | ||
"""Returns useful information from settings | ||
as a JSON-compatible dict to help us debug | ||
(e.g. when setting up e2e Airflow tests)""" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
En vrai, ici, tu retourne les info de la connexion à la DB uniquement
def django_settings_to_dict(settings) -> dict: | |
"""Returns useful information from settings | |
as a JSON-compatible dict to help us debug | |
(e.g. when setting up e2e Airflow tests)""" | |
def get_django_db_connexion_settings(settings) -> dict: | |
""" | |
Returns database connection informations from Django settings as a dict to help us debug | |
(e.g. when setting up e2e Airflow tests) | |
""" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oui, mais c'est une abstraction pour avoir à renommer en permanence la fonction au fur et à mesure qu'on lui ajoute des infos
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Plutôt que mettre les test e2e dans dags_unit_tests, est-ce qu'on a pas intérêt à les mettre dans dags_e2e_tests ?
Plus globalement, ce serait pas mal de répartir les DAGs dans les sous-dossiers. Mettre es test des dags dans le dossier dags
qui sera renommer bientôt ?
✅ Airflow tests e2e: utilitaires & preuve de concept
Carte Notion: Airflow: tests automatisés DAG de bout-en-bout
🗺️ contexte: DAGs airflow qui se complexifient, on casse souvent les DAGs car les tests unitaires sont insuffisants
💡 quoi: utilitaires & preuve de concept de tests e2e airflow
🎯 pourquoi: améliorer la robustesse de nos tests
🤔 comment:
dags
:utils/django.py
: modifs pour retourner les infos DB (port, host, name) quand on faitdjango_setup_full
ce qui m'a permis de tester que la connexion DB test marchait bientemplates/dags/template_read_db.py
: un template de DAG pour démontrer comment ça marche et valider tous les utilitaires e2e (puisque ce template réspecte l'arborescence du projet)dags_unit_tests/
:e2e/
dédié/isolé: car les tests airflow e2e prennent du temps, ceci va permettre en dev & ci de lancer uniquement les tests souhaités dans l'ordre souhaitése2e/utils.py
: utilitaires pour travailler avec Airflow (init de l'environement, récupérer un DAG, une instance de tâche...)e2e/test_e2e_dag_*.py
: préfixer tous les tests de cette manière pour les distinguer & les chercher dans l’IDE plus facilement🖼️ Preuve de concept
Simple mais suffisante:
django_setup_full
puis les mêmes modèlesdag.test(run_conf=)
pour passer une config de DAG, notamment des valeurs qui seront disponibles dans leparams
des tâches Airflow📆 Prochaines PR
Documentation: j'ai enlevé des explications de code que je mettre dans des PRS de
docs/
Soumettre des tests e2e pour DAGs en cours surtout avant de leur apporter des changements importants:
dags/sources/*.py
dags/cluster/cluster_acteurs_suggestions.py