Kurz testování – záznam, zdrojový kód, prezentace, otázky a odpovědi ke 4. lekci

V úterý 25.1. pokračoval online kurz pod názvem "Leden - měsíc testování aplikací". Účast na čtvrté lekci, věnované výkonnostnímu a zátěžovému testování, byla opět vysoká, stejně jako počet dotazů. Stále je ještě možné se přihlásit a zúčastnit se alespoň poslední lekce, více informací najdete na https://www.microsoft.com/cze/events/kurz-testovani-aplikaci/.

Záznam, prezentace, zdrojové kódy

Záznam

Prezentace o výkonnostním testováním

Zdrojové kódy

Otázky a odpovědi

Jednotlivé otázky jsem si dovolil stylisticky a jazykově upravit.

Organizace kurzu

Jakou formou knihu dostaneme, papírovou nebo elektronickou (soubor mailem)?
Jedná se o papírovou knihu. Jenom pevně doufáme, že budeme schopni zajistit dostatek výtisků v češtině.

Na jakou adresu zasíláte knihy? Na firemní? Nebo se dá domluvit i na soukromou adresu?
Všem registrovaným účastníkům kurzu pošleme mail, ve kterém bude – zda mají nárok na knihu, a v případě, že ano, též poštovní adresa uvedená při registraci. Kdo ji bude chtít změnit, může nám poslat mail s opravenou adresou pro zaslání.

Co když budu na posledním LiveMeetingu chybět? Nepřijdu o knihu?
Ne, nepřijdete. Důležitá je účast na libovolných 4 z 5 LiveMeetingů. Zaslání knihy budeme řešit po e-mailu.

Zátěžové a výkonnostní testování

Do jaké míry ovlivňuje ukládání výsledků do databáze výsledky testů? Není lepší měřit zátěž externě?
Data z měření ukládá do databáze počítač v roli Test Controller. Objem dat ani frekvenci zápisu není nijak velká a primárně závisí na vašem nastavení. Každopádně je ale dobrý nápad nepoužívat pro ukládání výsledků stejný databázový server jako ten, který je podroben zátěži.

Dají se zátěžové testy použít i proti SharePoint webu?
Určitě, při pohledu zvenčí je SharePoint webová aplikace jako každá jiná. Pro SharePoint dokonce existuji i speciální testovací kit, více na https://technet.microsoft.com/en-us/library/ff823731.aspx

Je možné použít Coded UI Test pro zátěžové testy anebo to není vhodné?
Po technické stránce to možné je a je to dokonce podporovaný scénář. Je zde ale jedno důležité omezení, a to že na jednom operačním systému běží nejvýše jeden Coded UI test, tudíž musíte mít tolik operačních systémů (alespoň virtuálních), jako je virtuálních uživatelů. Paradoxně tedy platí obě tvrzení, která jste postavila proti sobě. Ano, jde použít, ne, není to vhodné.

Je nějaká možnost zašifrování nahraného hesla při záznamu zátěžového webového testu?
Do záznamu se ukládá heslo v otevřeném tvaru, šifrování by výrazně komplikovalo přenositelnost nahraného testu. Vzhledem k tomu, že v typickém zátěžovém testu se vytváří větší množství fiktivních uživatelů s hesly, nepovažuji tento způsob za nijak riskantní z bezpečnostního hlediska.

Pro vyhodnocení používáte novou verzi Excelu anebo jsou záložky jenom schované?
Podporován je Excel 2007 a 2010, já používám 2010. Záložky jsou schované kvůli nízkému rozlišení při nahrávání.

Je možné měřit výkonnost aplikace ve virtuálním systému?
Možné to určitě je, otázkou zůstává, nakolik pak lze z výsledků extrapolovat na výkonnost na fyzickém operačním systému. V případě procesorové a paměťové zátěže je to celkem přímočaré, u diskové zátěže (např. databázové přístupy) může být ovlivnění výkonu virtualizací značné.

Funguje nahrávání i přehrávání webových zátěžových testů i přes protokol HTTPS?
Ano, zcela bez problémů. Komplikovanější by bylo pouze používání klientských certifikátů, zde by bylo zřejmě nutné psát extenzi testu.

Dá se testovat v nějakém prostředí též Visual Basic for Applications v Excelu?
Ve Visual Studiu 2010 to bohužel není reálné.

Na jaké jednotky se dá měřit délka trvání testů? Rozlišuje setiny nebo jen sekundy?
Rozlišení je minimálně v řádu tisícin sekundy (zobrazují se vždy jenom 3 platné číslice).

Je možné tímto způsobem získávat a analyzovat výkonnostní data z Windows Azure?
Pomocí Load Testu můžete Windows Azure zatížit, ale nemůžete sbírat hodnoty výkonnostních čítačů. Tyto hodnoty lze sbírat mechanismy Windows Azure a ukládat do Azure Storage k pozdější analýze, viz např. https://msdn.microsoft.com/en-us/library/gg433015.aspx. Každopádně ale budete mít výsledky testů a výkonnostní čítače v současné verzi VS nasbírané odděleně.

Je možné nahrávat zátěžové testy i ze Silverlight aplikace běžící v browser módu?
Otázku bych trochu zobecnil na „je možné nahrávat i pro webové stránky, ve kterých běží doplňky prohlížeče“. Je to možné za předpokladu, že doplněk využívá pro svá volání HTTP funkce prohlížeče (které jsou nahrávacím doplňkem monitorovány) a nemá vlastní HTTP knihovny. Konkrétně Silverlight může pracovat v obou těchto režimech, více viz https://msdn.microsoft.com/en-us/library/dd920295(v=VS.95).aspx

O zátěžovém testování web aplikací toho existuje spousta, spíše by mě zajímaly zátěžové testy Windows aplikací. Bude tomuto tématu věnována nějaká prezentace?
Zátěžové testování těchto aplikací není úplně realistické, protože velmi brzy narazíte na úzké hrdlo v podobě systému běžícího aplikaci. Tlusté aplikace se zpravidla testují tak, že se jde o vrstvu níže – testují se tedy prostřednictvím zátěžového spuštění unit testů volajících např. webové služby anebo uložené procedury z nižších vrstev aplikace. Speciální prezentaci nepřipravujeme.

Existuje nějaký podrobný popis sledovaných indikátorů?
„Vnější“ indikátory typu „Tests completed/sec“ jsou myslím celkem samopopisné. Pokud máte na mysli „vnitřní“ indikátory – výkonnostní čítače, tak pokud si na počítači pustíte nástroj Performance Monitor a zvolíte možnost Add Counters, uvidíte dole buď tlačítko Explain anebo checkbox Show description (podle verze OS), kde si můžete význam jednotlivých čítačů dohledat.

Po spuštění testu jsem vždy viděla pouze vytížení mého PC. Je možno sledovat zatížení přímo serveru, na kterém běží web? Chci zatížit max. 200 uživatelů a test spouštět i vytvářet ze svého PC.
Ano, můžete sbírat informace i z ostatních počítačů, za předpokladu, že máte právo se na ně připojit a právo vidět výkonnostní čítače (vyzkoušejte spuštěním Performance Monitoru a připojením na vzdálený počítač). V případě jednoduché konfigurace musí toto právo mít člověk spouštějící Visual Studio, v případě distribuované konfigurace musí mít toto právo účet, pod kterým běží test controller. Pak už jenom stačí v definici zátěžového testu přidat další počítače (web server, SQL server apod.) pro sběr výkonnostních dat.

Je podrobná analýza výsledku zátěžového testu možná i VS 2010 Premium nebo jen v edici Ultimate?
Pouze ve verzi Ultimate.

Je zátěžové testování včetně sběru výkonnostních dat a adaptérů použitelné i pro spouštění jiných zátěžových testů (např. vytvořených nějakým jiným generátorem)?
Zátěžové testování včetně veškerých funkcí je použitelný na cokoliv, co dokážete zabalit do unit testu v C# nebo ve VB.NET.

Pokud mám test typu přihlášení (stále stejný uživatel), zobrazení profilu, odhlášení... Nestane se v zátěžovém testu, že uživatel1 odhlásí všechny ostatní uživatele ze systému, když pracují se stejnými údaji?
Každý virtuální uživatel se chová jako samostatná HTTP relace, včetně URL i POST parametrů či cookies. Pokud se tedy informace o přihlášení uchovává v některém z těchto prostředků nezávisle pro každého uživatele (což je velmi typické), neovlivní jeden uživatel druhého.

Když chci spouštět zátěžové testy na TFS a ne ve Visual Studiu, tak se používá Visual Studio Agents 2010?
Visual Studio Agents 2010 je pouze instalační médium, není to žádný licencovaný produkt. Obsahuje komponenty Lab Agent (pro virtualizaci testování), Test Agent a Test Controller. Testovat lze buď lokálně (stejný počítač iniciuje i provádí testy) anebo vzdáleně (testy provádí agent nebo agenti určení controllerem, agent i controller může být jeden a tentýž počítač, je třeba nastavit vzdálené provádění v souboru .testsettings). Vlastní testování můžete spouštět mnoha způsoby např. z Visual Studia, z příkazové řádky pomocí mstest.exe anebo jako součást automatického buildu. Myslím, že tento výčet možností splní všechny vaše nároky.

Ostatní dotazy

Četl jsem „Jak testuje software Microsoft“, v ní bylo uvedeno, že MS má více testerů než vývojářů - jak to je u českého MS?
Vámi zmíněná informace je pravdivá. Nicméně v české pobočce neprobíhá vývoj produktů, tudíž tu nejsou ani testeři.

Existují možnosti profilování i ve verzi VS 2008?
Ano, je ve verzi VS 2008 for Software Developers anebo Team Suite. Ve verzi 2010 je ve verzích Premium a Ultimate. Novinky ve verzi 2010 jsou ale poměrně rozsáhlé, viz https://blogs.msdn.com/b/profiler/archive/2009/06/10/write-faster-code-with-vs-2010-profiler.aspx

Lze nějak kódově zautomatizovat mazání cookies při startu testu? (pro IE i Firefox)
Ano, je to možné voláním statických metod ClearCookies, případně ClearCache na objektu BrowserWindows (v odpovědích po druhé lekci jsem mylně uvedl, že to možné není a musíte se postarat sám).

Když vytvořím sadu testů na jednom počítači a chtěl bych je provádět na jiném počítači (může být připojený k prvnímu) - jde to?
Ano, bez problémů. První způsob předpokládá repository zdrojových kódů, ve kterém jsou uloženy kódy i testy. Pak můžete na jednom počítači vyvíjet a na druhém testovat – Visual Studio se licencuje na konkrétního člověka, který je může používat na libovolném počtu počítačů. Druhá možnost je nainstalovat na druhý počítač Test Agenta, na jeden z obou počítačů nainstalujete Test Controller, agenta připojíte ke controlleru a pak v nastavení testu (Edit Test Settings) zvolíte možnost Remote Execution. Pak vlastně z jednoho počítače můžete „úkolovat“ druhý, který provádí testy, jejichž výsledky vidíte na prvním počítači.

Jak funguje v profilování v případě, že používáme DLL bez zdrojových kódů a problém je v ní?
Za předpokladu, že kód není obfuskován, tak uvidíte korektně jména všech volaných objektů a metod v DLL knihovně. Pokud je to vaše knihovna a máte funkční tzv. Source Server, kódy se dotáhnou z TFS. Pokud je to cizí knihovna, k níž nemáte zdrojový kód, tak samozřejmě ne.

Příjemné čtení,
Michael