Skip to content
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

✔️ CLUSTERING & DEDUPLICATION: test de bout en bout #1291

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

maxcorbeau
Copy link
Contributor

@maxcorbeau maxcorbeau commented Jan 29, 2025

✔️ CLUSTERING & DEDUPLICATION: test de bout en bout

Carte Notion : CLUSTERING & DEDUPLICATION: tests automatisés du DAG de bout-en-bout

  • 💡 quoi: test automatisé de bout en bout du DAG cluster_acteurs_suggestions
  • 🎯 pourquoi: par contraintes métiers, le DAG devient bcp trop complexe (16 paramètres airflow et surement d'autres à venir, des centaines de combinaisons possibles), et il est impossible de guarantir la fiabilité d'ensemble du DAG en testant simplement les tâches/fonctions de manière isolée, d'où un test de bout-en-bout du DAG
  • 🤔 comment:
    • On créer de la donnée DB
    • On créer une config airflow
    • On lance le dag avec dag.test(run_conf=conf)
    • On peut ensuite inspecter les ti/TaskInstance de chaque tâche et s'assurer du résultat escompté

🖼️ Exemples

🟢 Tâche qui fonctionne

Pour l'instant la 1ère tâche cluster_acteurs_config_create fonctionne et on est capable de récupérer les champs calculées de la config qui correspondent aux sources créées en DB:

Fixture:

        s1 = SourceFactory(code="ecopae", id=252)
        s2 = SourceFactory(code="cyclevia", id=90)

Test:

        config: ClusterConfig = ti.xcom_pull(
            key="config", task_ids="cluster_acteurs_config_create"
        )
        assert config.include_source_ids == [252, 90]

🔴 Tâche qui échoue

Par exemple on a un problème à la sélection des acteurs et donc assert ti.state == State.SUCCESS échoue:

image

Et en regardant les logs on comprend pourquoi

    df = django_model_queryset_to_df(query, fields)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "dags/utils/django.py", line 195, in django_model_queryset_to_df
    raise ValueError("Pas de données retournées par la query Django.")
ValueError: Pas de données retournées par la query Django.

➡️ A faire sur cette PR

  • Définir un maximum de cas de figures métiers
  • Générer de la donnée qui couvre ces cas
  • Tester ces cas

A la fin de cette PR on devrait avoir un DAG robuste, couvert par ce test de bout en bout, et on devrait pouvoir détecter les regressions facilement quand on fait évoluer le DAG

Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant