To platí najmä pre funkčné testy webových aplikácií. Canoo Webtest je veľmi rýchly v porovnaní s inými funkčnými testovacími nástrojmi. Ak však množstvá testov rastú, alebo ak chceme rýchle získať výsledky testov, často nadobudneme pocit, že testy sú jednoducho pomalé. Nová – zatiaľ experimentálna vlastnosť Canoo WebTest-u umožňuje špecifikovať počet podprocesov [workers-threads], ktoré by mali byť použité počas testov, čo môže priniesť obrovské zvýšenie rýchlosti bez zmeny pôvodných testov.
Stačí teda nastaviť počet podprocesov [workers-threads] a namiesto jednoduchého volania:
ant
zavolať ANT s parametrami:
ant -Dwt.parallel.nbWorkers=20
Ako teda naozaj funguje paralelné testovanie?
Princíp je nasledovný: zaradiť test do fronty, skôr než sa vykoná. Myšlienka je veľmi jednoduchá a jej implementácia v podstate tiež. Dá sa to jednoducho vysvetliť pomocou niekoľkých riadkov kódu. WebTest je postavený na ANT-e, to znamená, že jeho task namapovaný ako <webtest> obsahuje kód:
class WebTestTask extends Task { void execute() { // vykonaj test } }
Na paralelný beh testov sa zmenilo mapovanie tasku <webtest> a nová trieda bude vyzerať nasledovne:
class WebTestTaskParallel extends WebTestTask { void execute() { workQueue.add this } void executeReally() { super.execute() } }
Po tejto úprave je teda možné paralelné spustenie viacerých testov. Keď sa potom zavolá metóda execute(), inštancia pridá samú seba do fronty a riadenie sa predá Ant-u, kde sa pokračuje normálne ďalej. Množina „workers-threadov“ neustále sleduje frontu a volaním executeReally() z WebTestTask spúšťa skutočný test. To je v podstate princípom paralelizmu, zvyšok kódu je o synchronizácii medzi jednotlivými threadmi.
Poďme si teraz ukázať ako to funguje v praxi. Ako príklad použijeme demo príklad z časti môjho blogu. Nasledujúcim príkazom sa vytvoril ukážkový testovací projekt [myWebTestProject], ktorý na účely paralelného behu viacerých testov troška upravím.
webtest -f “cesta k webtest home adresáru“\ webtest.xml wt.createProject
Úprava sa týka počtu testov, ktoré sa majú vykonať, čiže súbor „allTests.xml“ z adresára /tests upravíme nasledovne.
<?xml version="1.0"?> <project default="test"> <target name="test" description="runs all the tests"> <ant antfile="googleWebTest.xml"/> <ant antfile="googleWebTestSteps.xml"/> <ant antfile="googleWebTest.xml"/> <ant antfile="webTestConference.xml"/> <ant antfile="googleWebTestSteps.xml"/> <ant antfile="googleWebTest.xml"/> <ant antfile="googleWebTestSteps.xml"/> <ant antfile="googleWebTestSteps.xml"/> <ant antfile="googleWebTestSteps.xml"/> </target> </project>
Pred spustením takto upraveného testu je ešte potrebné v prípade, že používate proxy server, jeho správne nastavenie. V súbore build.xml stačí odkomentovať pripravené proxy nastavenia a zadať tie vaše.
Build.xml:
Activate this if you are behind a proxy and want to test a server outside your local network See http://ant.apache.org/manual/OptionalTasks/setproxy.html <setproxy proxyhost="myProxy" proxyport="X.XX.XXX.XXX" />
Po spustení príkazom „ant“ bežia testy postupne. WebTest monitor zobrazuje priebeh testov počas behu celej sady – bez paralelizmu. Ako vidíte, testy sa spúšťajú postupne, každý ďalší test sa spustí až po ukončení toho predchádzajúceho.
Teraz skúsme tú istú sadu testov odštartovať príkazom
„ant -Dwt.parallel.nbWorkers=20“
WebTest monitor zobrazuje priebeh testov počas behu celej sady – s vyuzitím paralelizmu. Ako vidíte, testy sa spústili všetky naraz a navžajom sa nečakajú.
V konzole, ktorá zobrazuje výpisy testovacieho klienta môžeme sledovať ako jednotlivé thready vyberajú testy čakajúce vo fronte.
Kedy používať paralelný beh viacerých testov?
Prvotným zámerom bolo urýchlenie behu testov. Táto nová vlastnosť, dostupná od verzie Canoo WebTest R1700, dokáže zrýchliť beh testov až o 50-75%.
Jej použitie je však limitované filozofiou testov. Ak napríklad používate smoke testy, ktoré už svojou filozofiou neumožňujú paralelný beh, pretože každý nasledujúci test predpokladá správne a bezchybné ukončenie toho predchádzajúceho, paralelný beh nebude možný. Napriek tomu však ostáva veľa ďalších možností, kde sa paralelné nasadenie použiť dá. V princípe sa dajú použiť všade tam, kde sú jednotlivé testy nezávislé a na svoj beh nepotrebujú žiadne predchádzajúce kroky.