6

Chcielibyśmy przeprowadzić pewne zautomatyzowane testowanie integracyjne procesu, który wymaga przesłania danych do zewnętrznego źródła, a następnie sprawdzenia, czy dane zostały poprawnie wyświetlone na ich stronie internetowej..NET Zautomatyzowane testowanie długich procesów

Jednak dane mogą pojawić się na stronie internetowej dopiero po kilku godzinach.

Problem z tradycyjnym NUnit lub MSTest polega na tym, że test będzie wstrzymywany przez wiele godzin, czekając na wynik.

Widziałem, PNUnit, które mogą być używane - aby uruchomić wszystkie testy równolegle, ale nie wydaje mi się to rozwiązaniem eleganckim. A co jeśli jest 1000 testów? Czy nie stworzy to mnóstwa procesów/wątków na serwerze? I jak śledzić wszystkie z nich.

Czy ktoś rozwiązał ten problem? Czy w domu rozwinęło się rozwiązanie, czy jest na to rozwiązanie open source?

+0

Dzięki za odpowiedzi chłopaki. Ładne pomysły. Miałem nadzieję uzyskać odpowiedź od kogoś, kto wprowadził coś takiego. Myślę, że najlepszym sposobem podejścia do tego jest zlikwidowanie niektórych C# i stworzenie czegoś z pierwszych ksiąg. Nie jestem pewien, czy NUnit/MSTest itp. Mogą to zrobić w elegancki sposób. –

+1

Myślę, że twój test jest zbyt szeroki w swoim zakresie i zawiera wiele warunków, które mogą pójść źle, które nie mieszczą się w twoim kodzie. Nie jest to już test "jednostkowy", ale raczej "systemowy", dlatego trudno jest go dopasować do formy testowej.Testy jednostkowe mają być małymi wyizolowanymi elementami funkcjonalnymi ("jednostki"). Często działa jako część procesu kompilacji. Myślę, że chcesz wykonać więcej testów systemowych i powinieneś szukać narzędzi takich jak testery obciążenia lub testery symulacji klienta, itp ... Wiele z tych narzędzi zbudowano dla długotrwałych procesów. – BenSwayne

Odpowiedz

2

Ten problem można łatwo rozwiązać, oddzielając wstawianie i weryfikację danych testowych. Wystarczy załadować wszystkie dostępne dane testowe do systemu, odczekać kilka godzin, aż przetwarzanie zostanie wykonane, a następnie wykonać testy weryfikacyjne.

+0

Niezły pomysł. Nie sądzę jednak, że któryś z frameworków testowych nadaje się do tego? Na przykład Nunit uruchamiasz testy, które kończą się lub kończą niepowodzeniem. Czy sugerujesz ciągłe uruchamianie testów z innego procesu, a następnie używanie NUnit do sprawdzania poprawności danych w bazie danych zebranych w ostatnim dniu? –

+0

"Wszystkie" ramy nadają się do tej techniki! Musisz tylko załadować niektóre z góry określone dane testowe, których szukasz później, lub zapisać swoje dane testowe w teście "wsuń/wyślij" do systemu plików, a następnie przeczytaj ten plik w teście "weryfikuj" później, aby go sprawdzić. Sztuką jest wyczucie czasu, dlatego nie sądzę, że jest to odpowiedni test jednostkowy, ale raczej "test systemu". – BenSwayne

+0

Struktury testów jednostkowych mają zazwyczaj funkcję "SetUp", która zazwyczaj służy do przygotowania środowiska do testowania. Możesz go użyć do wstawienia danych testowych do twojego systemu. http://www.nunit.org/index.php?p=setupFixture&r=2.4 –

1

Wygląda na to, że PNUnit byłby dobrym rozwiązaniem. Jeśli martwisz się "zbyt wieloma procesami/wątkami" na serwerze, po prostu zmniejsz liczbę testów PNUnit na raz (powiedzmy, Max N); po zakończeniu testu zaplanuj następny test. Nie twierdzę, że PNUnit wie, jak to zrobić; być może będziesz musiał zaimplementować ten zwyczaj.

0

Martin, zanim dotrę do mojego rozwiązania dla jednostki testowania go Wydaje mi się, że chciałbyś przetestować tylko to, co możesz kontrolować. Powyższe jest bardziej podobne do tego, co nazywam testowaniem regresji. Zakładam, że "ich" strona internetowa jest cudzą stroną. Czy mogę zapytać, co się stanie, jeśli zastosujesz się do zasad interfejsu/integracji, ale nic nie pojawi się na ich ekranie, podczas gdy może to być problem, co byś zrobił lub mógłbyś z tym zrobić? Co się dzieje, gdy zmieniają stronę lub algorytmy? Konieczne będzie napisanie kodu na podstawie tego, co robią, co jest do bani.

To powiedziawszy, jak wspomniano powyżej, można oddzielić testy ładowania i testy danych weryfikacyjnych. Przyznaję, że nic nie wiem o PNunit, ale zwyczajne rzucanie w nie nic nie rozwiąże 3-godzinnego opóźnienia w każdym teście w obie strony.

Jeśli chcesz uruchomić synchronicznie, możesz załadować wszystkie dane w ClassInitialize(), a następnie uśpić, aż nadejdzie czas na sprawdzenie i uruchomienie rzeczywistych testów.

Jeśli to ja, potrzebowałbym jednego projektu testowego do testów ładowania, a następnie jednego projektu do weryfikacji wyników kilka godzin później. Synchronizacja nie wygląda na to, że przyniosłoby ci wiele korzyści, poza zapewnieniem, że warunek wstępny minie przed testowaniem wyników, co można obsłużyć również w inny sposób.

+0

dzięki za sugestię. wydaje się, że teraz obciążenie, a następnie sprawdzić później jest popularny. Problemem jest to, że żadne ramy nie obsługują tego, więc opcje są po prostu "roll your own" lub rozpocznij inicjatywę open source. –

+0

Próbowałem rozwiązać problem, dlaczego nie wyszło mi na to żadne ramy i prawdopodobnie jest to, że druga strona to czarna skrzynka i testy, które potwierdzają, że czarna skrzynka powinna znajdować się w tym rozwiązaniu, a nie aplikacja zużywająca, ale to tylko moje opinia. wzdłuż linii podziału obaw –