2013-06-19 21 views
5

Mam następującą konfigurację:Running pracownika Seler w unittest

  • Django Seler projekt zadaniem Rejestruje foo
  • Projekt B: Używa send_task seler, aby zadzwonić foo
  • Projekt A i projekt B mają ta sama konfiguracja: SQS, msgpack dla serializacji, gzip itp.
  • Każdy projekt działa na innym repozytorium github

Mam przetestowane telefony komórkowe do "foo" w projekcie A, nie używając w ogóle Celery, tylko foo(1,2,3) i potwierdzam wynik. Wiem, że to działa.

Przeanalizowałem urządzenie, że parametr send_task w projekcie B wysyła odpowiednie parametry.

Czego nie testuję i potrzebuję twojej porady na temat integracji między dwoma projektami. Chciałbym mieć unittest że:

  • rozpocząć pracownika w ramach projektu powstanie
  • Wyślij zadanie przy użyciu kodu projektu B
  • twierdzić, że pracownik rozpoczął się pierwszy etap dostaje zadanie, z parametrami przesłanymi w drugim kroku i że funkcja foo zwróciła oczekiwany wynik.

Wygląda na to, że można to zhakować, używając podprocesora Pythona i analizując dane wyjściowe pracownika, ale to jest brzydkie. Jakie jest zalecane podejście do testowania jednostek w takich przypadkach? Jakiś fragment kodu, który możesz udostępnić? Dzięki!

+0

Pomóż nam zrozumieć, dlaczego chcesz sprawdzić, co dzieje się po stronie pracownika? Czy nie wystarczy przetestować od strony wzywającej i czy prawidłowa odpowiedź oznacza, że ​​test zakończył się sukcesem? –

Odpowiedz

1

Nie jestem pewien, czy warto przetestować mechanizm transportu (tj. Wysłanie parametrów zadania przez selera) za pomocą testu jednostkowego. Osobiście napisałbym mój test w następujący sposób (można podzielić na kilka testów jednostkowych):

  • Użyj kodu z projektu B, aby wygenerować zadanie z przykładowymi parametrami.
  • Zakoduj parametry zadania, używając tej samej metody, którą użył Celery (tj. Wytrawiania parametrów lub kodowania ich jako JSON).
  • Odtworzyć ponownie parametry zadania, sprawdzając, czy nie wystąpiły żadne uszkodzenia.
  • Wywołanie funkcji zadania, upewniając się, że daje właściwy wynik.
  • Wykonaj tę samą sekwencję kodowania/dekodowania dla wyników funkcji zadania.

Korzystając z tej metody, będzie można przetestować, że dzieła generacji

  • Zadaniem jako przeznaczone
  • Kodowanie & dekodowania parametrów zadań i wyników prac zgodnie z oczekiwaniami

Jeśli to konieczne, nadal można niezależnie testować działanie mechanizmu transportowego za pomocą testu systemowego.