Ich versuche, eine Testmethode für unser Django-Sellerie- Projekt zu entwickeln. Ich habe die Notizen in der Dokumentation gelesen , aber es gab mir keine gute Vorstellung davon, was ich tatsächlich tun sollte. Ich mache mir keine Sorgen um das Testen der Aufgaben in den eigentlichen Daemons, sondern nur um die Funktionalität meines Codes. Hauptsächlich frage ich mich:
- Wie können wir
task.delay()
während des Tests umgehen (ich habe versucht einzustellen,CELERY_ALWAYS_EAGER = True
aber es machte keinen Unterschied)? - Wie verwenden wir die empfohlenen Testeinstellungen (wenn dies der beste Weg ist), ohne unsere settings.py tatsächlich zu ändern?
- Können wir noch
manage.py test
einen benutzerdefinierten Läufer verwenden oder müssen wir ihn verwenden?
Insgesamt wären Hinweise oder Tipps zum Testen mit Sellerie sehr hilfreich.
python
django
unit-testing
celery
Jason Webb
quelle
quelle
CELERY_ALWAYS_EAGER
macht keinen Unterschied?.delay
der Versuch, eine Verbindung herzustellen.BROKER_BACKEND=memory
könnte in diesem Fall hilfreich sein.BROKER_BACKEND=memory
behoben. Wenn Sie das als Antwort geben, werde ich es als richtig markieren.Antworten:
Versuchen Sie die Einstellung:
(Danke an askols Kommentar.)
quelle
Ich verwende den Dekorator override_settings gerne für Tests, für deren Abschluss Sellerieergebnisse erforderlich sind.
Wenn Sie dies auf alle Tests anwenden möchten, können Sie den Sellerie-Testläufer verwenden, wie unter http://docs.celeryproject.org/en/2.5/django/unit-testing.html beschrieben, der im Grunde dieselben Einstellungen außer (
BROKER_BACKEND = 'memory'
) festlegt .In den Einstellungen:
Schauen Sie sich die Quelle für CeleryTestSuiteRunner an und es ist ziemlich klar, was passiert.
quelle
djcelery
.Hier ist ein Auszug aus meiner Testbasisklasse, in dem die
apply_async
Methode herausgearbeitet und die Aufrufe aufgezeichnet werden (einschließlichTask.delay
). Es ist ein wenig eklig, aber es hat meine Anforderungen in den letzten Monaten erfüllt, in denen ich es verwendet habe.Hier ist ein Beispiel dafür, wie Sie es in Ihren Testfällen verwenden würden:
mymodule.py
test_mymodule.py
quelle
Da ich dies immer noch in den Suchergebnissen sehe, überschreiben die Einstellungen mit
arbeitete für mich gemäß Celery Docs
quelle
Für alle, die 2019 hierher kommen: Lesen Sie diesen Artikel , in dem verschiedene Strategien behandelt werden, einschließlich des synchronen Aufrufs von Aufgaben.
quelle
Das habe ich getan
In myapp.tasks.py habe ich:
In myapp.test_tasks.py habe ich:
quelle