BlogCanoo Webtest: Testy nikdy nebežia dostatočne rýchlo

Canoo Webtest: Testy nikdy nebežia dostatočne rýchlo

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.

WebTest_Monitor1

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ú.

WebTest_Monitor2

V konzole, ktorá zobrazuje výpisy testovacieho klienta môžeme sledovať ako jednotlivé thready vyberajú testy čakajúce vo fronte.

WebTest_Console

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.

Dobrý článok? Chceš dostávať ďalšie?

Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.

Súhlasím so spracovaním mojich osobných údajov. ( Viac informácií. )

Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.

Roman Hesteric
Roman Hesterichttp://www.priklady.eu
Pracuje ako QA Architekt v Swiss Re. Predtým CTO pre Java a .Net aplikácie. Autorizovaný spolupracovník na projekte Canoo Webtest. Držiteľ certifikátov MCTS a MCPD pre SharePoint server. V IT pracuje 25 rokov, od starého dobrého Turbo Pascalu od Borlandu, cez Javu, až po C#. Administrátor matematického portálu www.priklady.eu

Čítaj ďalej: