Celeryを使用したテスト—Pythonドキュメント
セロリでのテスト
タスクと単体テスト
単体テストでタスクの動作をテストするには、モックを使用することをお勧めします。
熱心なモード
:setting: `task_always_eager` 設定によって有効になるイーガーモードは、定義上、単体テストには適していません。
イーガーモードでテストする場合、ワーカーで発生することのエミュレーションのみをテストすることになり、エミュレーションと実際に発生することの間には多くの矛盾があります。
熱心に実行されたタスクは、デフォルトではバックエンドに結果を書き込まないことに注意してください。 この機能を有効にする場合は、:setting: `task_store_eager_result` をご覧ください。
Celeryタスクは、タスクとして呼び出されるコンテキストでアクションを実行する方法のみを定義する必要があるという点で、Webビューによく似ています。
これは、タスクがシリアル化、メッセージヘッダー、再試行などの処理のみを最適に処理し、実際のロジックが他の場所に実装されていることを意味します。
次のようなタスクがあったとします。
Note
:バインドされているのタスクは、タスクの最初の引数が常にタスクインスタンス(自己)になることを意味します。 つまり、最初の引数として自己引数を取得し、タスククラスのメソッドと属性を使用できます。
この例のようにモックを使用して、このタスクの単体テストを作成できます。
pytest
バージョン4.0の新機能。
Celeryは、統合(またはユニット)テストスイートで使用できるフィクスチャを追加する:pypi: `pytest` プラグインも利用できるようにします。
有効化
Celeryは最初、プラグインを無効な状態で出荷します。これを有効にするには、次のいずれかを実行できます。
pip install celery[pytest]
pip install pytest-celery
- または環境変数を追加します
PYTEST_PLUGINS=celery.contrib.pytest
- または、ルートconftest.pyに
pytest_plugins = ("celery.contrib.pytest", )
を追加します
マーク
celery-テストアプリの構成を設定します。
celery
マークを使用すると、単一のテストケースに使用される構成を上書きできます。
または、クラス内のすべてのテストケースの場合:
備品
関数スコープ
celery_app-テストに使用されるCeleryアプリ。
このフィクスチャは、テストに使用できるCeleryアプリを返します。
例:
celery_worker-ライブワーカーを埋め込みます。
このフィクスチャは、統合テストに使用できるCeleryワーカーインスタンスを開始します。 ワーカーは別のスレッドで開始され、テストが戻るとすぐにシャットダウンされます。
デフォルトでは、フィクスチャはワーカーが未処理のタスクを完了するまで最大10秒待機し、制限時間を超えると例外を発生させます。 タイムアウトは、celery_worker_parameters()
フィクスチャによって返される辞書のshutdown_timeout
キーを設定することでカスタマイズできます。
例:
ハートビートはデフォルトで無効になっています。つまり、テストワーカーはworker-online
、worker-offline
、およびworker-heartbeat
のイベントを送信しません。 ハートビートを有効にするには、celery_worker_parameters()
フィクスチャを変更します。
セッションスコープ
celery_config-オーバーライドしてCeleryテストアプリの構成をセットアップします。
このフィクスチャを再定義して、テストCeleryアプリを構成できます。
フィクスチャから返された設定は、celery_app()
およびcelery_session_app()
フィクスチャの設定に使用されます。
例:
celery_parameters-オーバーライドしてCeleryテストアプリのパラメーターを設定します。
このフィクスチャを再定義して、テストCeleryアプリの__init__
パラメータを変更できます。 celery_config()
とは対照的に、これらはCelery
をインスタンス化するときに直接渡されます。
フィクスチャから返された設定は、celery_app()
およびcelery_session_app()
フィクスチャの設定に使用されます。
例:
celery_worker_parameters-オーバーライドしてCeleryワーカーパラメーターを設定します。
このフィクスチャを再定義して、テストCeleryワーカーの__init__
パラメーターを変更できます。 これらは、インスタンス化されるときにWorkController
に直接渡されます。
フィクスチャから返された設定は、celery_worker()
およびcelery_session_worker()
フィクスチャの設定に使用されます。
例:
celery_enable_logging-埋め込みワーカーへのログインを有効にするためにオーバーライドします。
これは、埋め込みワーカーへのログインを有効にするためにオーバーライドできるフィクスチャです。
例:
celery_includes-組み込みワーカーのインポートを追加します。
組み込みワーカーの起動時に、フィクスチャをオーバーライドしてモジュールを含めることができます。
これにより、インポートするモジュール名のリストを返すことができます。これには、タスクモジュール、シグナルを登録するモジュールなどがあります。
例:
celery_worker_pool-組み込みワーカーに使用されるプールをオーバーライドします。
フィクスチャをオーバーライドして、組み込みワーカーに使用される実行プールを構成できます。
例:
警告
gevent / eventletプールを使用することはできません。つまり、monkeypatchesを有効にしてテストスイート全体を実行している場合を除きます。
celery_session_worker-セッション全体に存在する組み込みワーカー。
このフィクスチャは、テストセッション全体を通して存続するワーカーを開始します(すべてのテストで開始/停止されるわけではありません)。
例:
警告
セッションワーカーと一時的なワーカーを混在させるのはおそらく悪い考えです…
celery_session_app-テストに使用されるCeleryアプリ(セッションスコープ)。
これは、Celeryアプリインスタンスを参照する必要がある場合に、他のセッションスコープのフィクスチャで使用できます。
use_celery_app_trap-デフォルトアプリにフォールバックするときに例外を発生させます。
これは、conftest.py
でオーバーライドして、「アプリトラップ」を有効にすることができるフィクスチャです。何かがdefaultまたはcurrent_appにアクセスしようとすると、例外が発生します。
例:
テストでデフォルトのアプリにアクセスする場合は、depends_on_current_app
フィクスチャを使用してマークを付ける必要があります。