2015-01-26 8 views
5

Mam projekt API uruchomiony na localhost: 8000 podłączony do testowej bazy danych, a ja mam aplikację kątową front-end działającą na localhost: 9000. Jak zresetować bazę danych po uruchomieniu każdego testu z przodu? Używam Kątomierza do moich frontowych testów E2E. Nie chcę kpić z całego zaplecza. Mimo to sprawi to, że mój test będzie działał szybciej, jednak każda interakcja użytkownika spowoduje zmiany w stanach serwera, a następnie kilka kolejnych żądań do tych samych punktów końcowych serwera, upuszczanie tych punktów końcowych z różnymi zwrotami w różnych punktach może być zbyt dużym kodem niż po prostu rozmowa do prawdziwego serwera. Wolałbym zresetować bazę danych do stanu początkowego lub przepłukać wszystkie tabele.Resetuj oddzielną usługę backendu podczas testowania interfejsu frontowego

Jednym z możliwych sposobów na to jest napisanie mojego zestawu testów E2E z przodu w moim projekcie interfejsu API. Od teraz jest uruchamiany przez program testujący backend, może łatwo zresetować bazę danych przed każdym przypadkiem testowym. Ale wolałbym, aby moje testy były w moim projekcie front-end, ponieważ mój api będzie również obsługiwał innych klientów, nie tylko klienta przeglądarki. A ponieważ mój backend jest w php i używa Phununit do testowania, podczas gdy używam Protractor do przetestowania mojego front-endu, integracja go z backendem wydaje się być trochę nie na miejscu.

Czy napotkasz ten problem i jakie jest twoje rozwiązanie? Jak koordynujesz oba projekty w swoim teście E2E (lub integracji?)?

+0

Sądzę, że jednym ze sposobów jest zapewnienie obsługi "resetowania" w backendach i wywołanie tego interfejsu API dla każdego nowego testu. –

+0

@NewDev To brzmi jednak groźnie. Ale myślę, że możesz to zabezpieczyć, chroniąc go sprawdzaniem środowiska. Innym sposobem jest ustalenie sposobu resetowania bazy danych w wywołaniu zwrotnym onPrepare dla kątomierza. Zastanawiam się, czy są jeszcze lepsze sposoby. Dzięki za odpowiedź. – randomor

+0

Absolutnie powinno to być tylko w twoim środowisku testowym, a nie w Prod :) Btw, to wciąż nie jest substytutem kpiny, tak jak nie zastępuje testów jednostkowych, ale na e2e czasami są potrzebne takie rzeczy. –

Odpowiedz

1

Poszedłem do pisania wszystkich testów E2E wewnątrz projektu API po przejściu po stronie klienta trasa bez powodzenia. Kompilacja:

  1. Interfejs API zawiera wszystkie fabryki i modele, które mogą być używane do ładowania instancji testowych. Jeśli testuję tylko od strony klienta, muszę ponownie utworzyć relacje modelu i fabryki, aby to działało i muszę śledzić wszystkie zmiany z modeli API.

  2. Muszę ręcznie skonfigurować stronę klienta, aby rozmawiać ze środowiskiem testowym API za każdym razem przed uruchomieniem testu E2E. A także ręcznie ustawić serwer api, aby był w trybie testowym. Ponieważ musisz utrzymywać aktualny serwer sieciowy API gdzieś, aby klient mógł trafić.

  3. W tej chwili wciąż trudno jest znaleźć sposób na przeniesienie tego bardzo spersonalizowanego ustawienia testowego do chmury, a tym samym zintegrowanie go z serwerem ciągłej integracji, ponieważ klient i api to dwa oddzielne projekty. Ale w końcu mam pewne testy E2E po stronie klienta uruchomione na mojej lokalnej maszynie, co jest lepsze niż brak testów.

1

Mam ten sam problem. Moim rozwiązaniem jest dodanie punktu końcowego api "reset" w celu przywrócenia bazy danych do stanu sprzed rozpoczęcia testu E2E.

Używamy ASP.NET WebApi do zbudowania usługi RESTful. Oto moja struktura kodu.

[HttpGet] 
[Route("reset")] 
public IHttpAction Reset(){ 
    // check and remove records added in the e2e tests 

    // check and restore the records modified in the e2e tests 

} 

Więc wywołanie API do tej metody test/reset pomaga przywrócić bazy danych backend do stanu pierwotnego. Możemy umieścić połączenie wewnątrz afterAll() (jeśli korzystasz z JasmineJS). Możesz też po prostu wykonać reset ręczny, wykonując to połączenie GET od Postmana lub Fiddlera.

Czasami mam wiele metod resetowania api do wywołania. Tak, że mogę testować i resetować według grup funkcyjnych. Podobnie jak, wykonaj testy e2d na funkcjach zarządzania użytkownikami i zresetuj tę część danych, a następnie przejdź do następnej funkcji.

Należy wspomnieć, że jeśli klucz podstawowy w tabeli jest zsekwencjonowany, usunięcie danych dodanych w teście spowoduje przerwanie tej sekwencji.Upewnij się, że nasze testy nie "oczekują" od tego klucza podstawowego.

Całe zadanie polega na ponownym uruchomieniu testów e2e i uzyskaniu tego samego wyniku.


Oczywiście, jeśli jest to dozwolone, kolejnym dobrym wyjściem jest wykonanie kopii zapasowej bazy danych przed testem e2e i przywrócenie go po zakończeniu testu. Podręcznik, głupi, ale czasami wygodny i wystarczający, aby umożliwić powtórzenie testu e2e.

+0

Dzięki za pomysły! Czy konfigurujesz bazę danych do stanu początkowego po każdym teście, który jest zapisywany przez urządzenia? Byłoby miło mieć fabryki, abyśmy mogli uruchomić każdy przypadek użycia przy minimalnych początkowych danych. Czy zauważyłeś, że ich brakuje? Kończąc przenoszenie całego mojego E2E do backendu, mogłem wykorzystać istniejące modele i fabryki, a PHPUnit nie ma tak dobrej składni dla testów E2E w porównaniu z narzędziami opartymi na węzłach, takimi jak Protractor itp. – randomor

Powiązane problemy