Paralelné spúšťanie testov v TestNG

Pri automatizovanom testovaní chceme často skrátiť čas vykonávania testu, aby sme získali výsledky testu čo najrýchlejšie. Keď spúšťame testy Selenium pomocou balíka testNG, štandardne sa testy spúšťajú sériovo. Ale testNG poskytuje neodmysliteľnú podporu na paralelné spúšťanie testov. Pomocou tohto návodu budeme môcť vykonávať paralelné vykonávanie testov v Selenium alebo v akomkoľvek nástroji na automatizáciu testov podporujúcom jazyk Java.
Skôr ako začneme s paralelným vykonávaním, stručne si priblížime súbor testNG.xml (tí, ktorí poznajú súbor testng.xml, môžu túto časť preskočiť a prejsť na ďalší odsek – „Paralelné spúšťanie testov“).
Súbor testng.xml uľahčuje vykonávanie testov a zoskupovanie viacerých rôznych testov z rovnakých alebo rôznych tried. Tento súbor XML má rôzne značky pre sadu, testy, triedy a/alebo balíky, pričom koreňová značka je suite.
Ukážka súboru testNG.xml :
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="ITtesterTestSuite" verbose="1" >
<test name="parallelExecutionTests" >
<classes>
<class name="testsInParallel" />
<class name="testsInParallel" />
</classes>
</test>
</suite>
Po kliknutí pravým tlačidlom myši na súbor testng.xml a spustení ako sada TestNG nájde testNG testy s anotáciou @Test v triede testsInParallel.java a spustí vykonávanie testov.
Spustenie paralelných testov
Na paralelné spustenie testov stačí pridať tieto dve dvojice kľúč-hodnota v suite:
- parallel=“{methods/tests/classes}“
- thread-count=“{počet vlákien, ktoré chcete spustiť súčasne}“.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="ITtesterTestSuite" verbose="1" parallel="methods" thread-count="5">
<test name="parallelExecutionTestsA" >
<classes>
<class name="testsInParallelA1" />
<class name="testsInParallelA2" />
</classes>
</test>
<test name="parallelExecutionTestsB" >
<classes>
<class name="testsInParallelB1" />
<class name="testsInParallelB2" />
</classes>
</test>
</suite>
Pozrime sa na účel troch možností, ktoré možno nastaviť ako hodnotu pre parameter „parallel“ –
methods – hodnota metódy pre atribút parallel spustí všetky testy nezávisle na samostatných vláknach (maximum dostupných vlákien). V uvedenom príklade sa všetky testovacie metódy uvedené v rámci všetkých štyroch tried budú spúšťať paralelne v maximálne 5 vláknach.
tests – hodnota testu spustí metódy uvedené v príznaku test v tom istom vlákne. Vo vyššie uvedenom príklade sa všetky testovacie metódy pod označením „parallelExecutionTestsA“ spustia v tom istom vlákne a všetky testovacie metódy pod označením „parallelExecutionTestsB“ sa spustia v tom istom vlákne. Budú teda existovať dve vlákna, z ktorých každé bude paralelne, ale nezávisle od seba, spúšťať testovacie metódy v rámci testov parallelExecutionTestsA a parallelExecutionTestsB.
class – hodnota class bude spúšťať všetky testovacie metódy uvedené v triede v tom istom vlákne a s každou metódou triedy spustenou v inom vlákne. Takže by existovali štyri vlákna, v ktorých by sa spúšťali testy v štyroch triedach – testsInParallelA1,testsInParallelA2,testsInParallelB1,testsInParallelB2.