簡體   English   中英

在unittest中運行芹菜工人

[英]Running a Celery worker in unittest

我有以下設置:

  • Django-Celery項目A注冊任務foo
  • 項目B:使用Celery的send_task來調用foo
  • 項目A和項目B具有相同的配置:SQS,用於序列化的msgpack,gzip等。
  • 每個項目都位於不同的github存儲庫中

我在項目A中對“foo”進行了單元測試,完全沒有使用Celery,只是foo(1,2,3)並斷言結果。 我知道它有效。

我已經過單元測試,項目B中的send_task發送了正確的參數。

我沒有測試,需要你的建議是兩個項目之間的集成。 我想要一個單元測試:

  • 在項目A的上下文中啟動一個worker
  • 使用項目B的代碼發送任務
  • 斷言,第一步中啟動的工作人員使用我在第二步中發送的參數來獲取任務,並且foo函數返回了預期結果。

似乎可以通過使用python的子進程並解析worker的輸出來解決這個問題,但這很難看。 在這種情況下,推薦的單元測試方法是什么? 您可以分享的任何代碼段嗎? 謝謝!

我不確定是否值得使用單元測試明確測試運輸機制(即通過芹菜發送任務參數)。 就個人而言,我會按如下方式編寫測試(可以在幾個單元測試中拆分):

  • 使用項目B中的代碼生成包含樣本參數的任務。
  • 使用Celery使用的相同方法對任務參數進行編碼(即,對參數進行pickle或將它們編碼為JSON)。
  • 再次解碼任務參數,檢查沒有發生損壞。
  • 調用任務函數,確保它產生正確的結果。
  • 對任務函數的結果執行相同的編碼/解碼序列。

使用此方法,您將能夠測試它

  • 任務生成按預期工作
  • 任務參數和結果的編碼和解碼按預期工作

如有必要,您仍然可以使用系統測試獨立測試運輸機制的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM