Roman Hesteric / 26. 06. 2008, 00:00
Ako zvýšiť rýchlosť testovania webových aplikácií prostredníctvom open-source projektu Canoo WebTest? Jednoducho! Spúšťajte testy paralelne.
To platí najmä pre funkčné testy webových aplikácí. Canoo Webtest je veľmi rýchly v porovnaní s inými funkční 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 to teda naozaj funguje? 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 Canoo demo testy z tretej časti mojich článkov o Canoo WebTestoch. Nasledujúcim príkazom sa vytvoril ukážkový testovací projekt [myWebTestProject], ktorý na účely paralelného behu viacerých testov troška upravíme.
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 napríklad nasledovne:
<?xml version="1.0"?>
<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 teda 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 využitím paralelizmu. Ako vidíte na obrázku, testy sa spustili všetky naraz a navzájom sa nečakajú.
V konzole, ktorá zobrazuje výpisy testovacieho klienta môžeme sledovať ako jednotlivé thready vyberajú testy čakajúce vo fronte [Thread-21 - picking webtest].
Kedy používať paralelný beh viacerých testov? Ako píše autor tejto úpravy na svojom blogu, 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žitíe 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 paralené 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.
Autor pracuje ako developer vo firme www.together.sk
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk