Używam JUnit 4.4 i Maven i mam wiele długotrwałych testów integracyjnych.
Jeśli chodzi o zrównoleglenie zestawów testów, istnieje kilka rozwiązań, które pozwalają mi równolegle uruchamiać każdą metodę testową w jednej klasie testowej. Ale to wszystko wymaga, abym zmienił testy w taki czy inny sposób.
Naprawdę myślę, że byłoby dużo czystszym rozwiązaniem równoległe uruchamianie X różnych klas testowych w wątkach X. Mam setki testów, więc nie obchodzi mnie wątkowanie poszczególnych klas testowych.
Czy jest na to sposób?
Od junit 4.7 można teraz uruchamiać testy równolegle bez używania TestNG. Właściwie było to możliwe od wersji 4.6, ale w 4.7 wprowadzono szereg poprawek, które sprawią, że będzie to opłacalna opcja. Możesz także przeprowadzić równoległe testy ze sprężyną, o których możesz przeczytać tutaj
źródło
Zainspirowany eksperymentalnym programem ParallelComputer firmy JUnit, stworzyłem własne programy do biegania ParallelSuite i ParallelParameterized . Korzystając z tych programów uruchamiających, można łatwo zrównoleglać zestawy testów i testy parametryzowane.
ParallelSuite.java
ParallelParameterized.java
Użycie jest proste. Po prostu zmień wartość adnotacji @RunWith na jedną z tych klas Parallel * .
źródło
tempus-fugit oferuje coś podobnego, sprawdź szczegóły w dokumentacji. Opiera się na JUnit 4.7 i po prostu zaznacz swój test
@RunWith(ConcurrentTestRunner)
.Twoje zdrowie
źródło
Możesz sprawdzić bibliotekę open source - Test Load Balancer . Robi dokładnie to, o co prosisz - równolegle uruchamiaj różne klasy testowe. To integruje się na poziomie ant-junit, dzięki czemu nie musisz w żaden sposób zmieniać swoich testów. Jestem jednym z autorów biblioteki.
Pomyśl także o tym, aby nie uruchamiać ich w wątkach, ponieważ możesz potrzebować piaskownicy na poziomie procesu. Na przykład, jeśli trafiasz do bazy danych w testach integracji, nie chcesz, aby jeden test zakończył się niepowodzeniem, ponieważ inny test dodał dane w innym wątku. W większości przypadków testy nie są pisane z myślą o tym.
Wreszcie, jak rozwiązałeś dotychczas ten problem?
źródło
TestNG może to zrobić (to był mój pierwszy odruch - wtedy zobaczyłem, że masz już wiele przypadków testowych).
W przypadku JUnit spójrz na połączenie równoległe .
źródło
Testy można uruchamiać równolegle przy użyciu komputera ParallelComputer dostarczonego przez firmę Junit. Oto mały fragment na początek.
Pomoże to, gdy musisz uruchomić testy z kodu, ponieważ nie ma on żadnych zależności od Maven ani innych narzędzi do zarządzania kompilacją.
Zwróć uwagę, że spowoduje to równoległe uruchomienie wszystkich przypadków testowych, jeśli masz jakiekolwiek zależności między różnymi przypadkami testowymi, może to spowodować fałszywe alarmy. I tak NIE POWINIENEŚ poddawać się niezależnym testom.
źródło
Inny wybór: Punner, nowy równoległy junit runner i wtyczka maven. Nie musisz zmieniać swojego kodu, skopiuj go do swojego pom.xml:
Punner może równolegle uruchamiać metody testowe, może utrzymywać wyniki testowe oddzielnie i czyste.
Punner zredukuje wyjście konsoli mvn, na przykład:
Punner produkuje z pewnością kompatybilne dane wyjściowe, możesz również uzyskać nieprzetworzone dane dziennika i raport w formacie przeceny z katalogu raportów:
Punner to mój osobisty projekt, napisałem Punner, aby przyspieszyć fazę testów jednostkowych innych projektów, takich jak framework IPC, precyzyjne blokowanie, obsługa dzienników, silnik rozproszonego przepływu pracy, itp. To zaoszczędziło mi dużo czasu.
Punner nie obsługuje jeszcze niektórych zaawansowanych funkcji. Bardzo się cieszę, gdybyś mógł spróbować i przekazać mi swoją opinię.
źródło
Możesz zmienić swój test na TestNg w ciągu minuty (wystarczy zmienić import), TestNG jest najlepszy w testowaniu równoległym.
źródło
Możesz wypróbować Gridgain, który umożliwia uruchamianie dystrybucji testów w siatce obliczeniowej.
źródło