2017-03-23 2 views
0

Je construis une petite application Flask qui exécute un travail de temps en temps, disons une fois par mois. J'utilise apschduler pour cela. Existe-t-il un moyen de mettre en place un test pour cela? J'utilise py.test.Test des tâches planifiées en Python/Flask

Quelque chose comme:

def test_cron(self, app): 
    wait(months=1) 
    assert cron_has_run 

Toutes les suggestions?

+1

Testez la tâche, pas apscheduler. apscheduler est déjà testé, vous pouvez compter sur lui pour programmer les choses. – davidism

+0

mais je veux tester que j'ai configuré la tâche correctement avec apscheduler. Mes critères sont en fait plus complexes que simplement courir tous les mois, n'y a-t-il aucun moyen de tester cela? – cyniphile

Répondre

0

Vous ne devriez pas avoir besoin de tester que le travail s'exécute réellement, car il est géré par apscheduler, qui a déjà été testé. Au lieu de cela, testez la tâche elle-même et testez que vous l'avez planifié comme prévu.

Vous pouvez inspecter les travaux planifiés à l'aide de get_jobs. Si vous voulez tester que vous avez planifié un travail correctement, planifiez-le puis trouvez son travail dans la liste. Vous pouvez tester si next_run_time est un mois, par exemple.

for job in get_jobs(): 
    if name != 'name of job you care about': 
     continue 

    assert job.next_run_time >= datetime.utcnow() + timedelta(days=30) 
    assert job.next_run_time <= datetime.utcnow() + timedelta(days=32) 

Si vous êtes intéressé à comment les tests apscheduler son planificateur, vous pouvez regarder le code: https://github.com/agronholm/apscheduler/blob/master/tests/test_schedulers.py. Il utilise des simulacres et des dates dans le passé.