Test wysyła formularz i musi poczekać na wiadomość. Są dwa sposoby: odpytywać skrzynkę co kilka sekund albo dać się powiadomić. Wybór wpływa na czas przebiegu testów i na to, jak często będą migać bez powodu.
Odpytywanie
Test pyta w pętli, czy coś przyszło, aż przyjdzie albo skończy się cierpliwość.
def czekaj(lokal, proby=20, przerwa=3):
for _ in range(proby):
r = requests.get(f"{API}/inboxes/{lokal}/messages",
headers=KOPF, timeout=10).json()
if r["count"]:
return r["messages"][0]
time.sleep(przerwa)
raise AssertionError("Nie przyszlo")
Zalety: działa wszędzie, także na komputerze programisty za routerem domowym. Nie wymaga publicznego adresu ani dodatkowej usługi. Da się uruchomić w dowolnym narzędziu testowym.
Wady: zużywa limit zapytań i dokłada trochę opóźnienia — średnio pół odstępu między próbami.
Powiadomienie zwrotne
Serwis sam wywołuje Twój adres, gdy coś przyjdzie. Brzmi elegancko i w środowisku produkcyjnym często jest lepsze. W testach ma jednak konkretny koszt: potrzebny jest publicznie dostępny adres, do którego serwis się dodzwoni.
Na komputerze programisty oznacza to tunel w rodzaju ngrok, na serwerze ciągłej integracji — najczęściej dodatkową usługę pośredniczącą. Do tego trzeba obsłużyć przypadki, gdy powiadomienie przyjdzie zanim test zdąży zacząć nasłuchiwać, co przy szybkich systemach zdarza się częściej, niż można przypuszczać.
Nasza skrzynka testowa powiadomień zwrotnych nie oferuje — właśnie dlatego, że w typowym zastosowaniu testowym korzyść jest niewielka, a konfiguracji sporo.
Jak dobrać odstępy
Trzy zasady, które oszczędzają najwięcej kłopotów:
Krótki odstęp, dużo prób. Dwadzieścia prób co trzy sekundy to minuta oczekiwania w najgorszym razie, a zwykle kilka sekund. Odwrotnie — pięć prób co dwanaście sekund — daje ten sam limit czasu, ale test kończy się średnio o pół minuty później.
Nie licz na to, że pierwsza wiadomość jest tą właściwą. Jeśli aplikacja wysyła dwie (powitalną i potwierdzającą), sprawdzaj temat albo nadawcę, a nie tylko to, czy cokolwiek przyszło.
Osobna skrzynka na każdy test. Adres jest losowy i długi, więc równoległe przebiegi sobie nie przeszkadzają. Współdzielona skrzynka to najczęstsza przyczyna testów, które działają lokalnie i psują się na serwerze.
Co zrobić z limitem
Przy 3000 zapytaniach na godzinę i dwudziestu próbach na test wychodzi około stu pięćdziesięciu testów z odczytem poczty w ciągu godziny. Jeśli zestaw jest większy, warto wydłużyć odstęp do pięciu sekund albo odpytywać tylko w tych przypadkach, które faktycznie tego wymagają — reszta scenariusza zwykle nie potrzebuje skrzynki.