Kurz testování - záznam, prezentace, otázky a odpovědi k 2. lekci

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

Záznam a prezentace

Záznam (omlouvám se za chybějící úvod)

Prezentace ke stažení

Zdrojový kód ukázkové aplikace včetně testů

Otázky a odpovědi

Otázky jsem si dovolil jazykově a stylisticky korigovat.

Organizace kurzu

Není někde uložený minulý LiveMeeting?
Ano, veškeré odkazy zveřejňuji na https://blogs.msdn.com/vyvojari. Konkrétně první lekce je zde.

Je třeba se registrovat každý týden zvlášť anebo stačí jednou pro celý kurz?
Stačí jednou pro celý kurz. Jenom upozorňuji na nutnost zadávat v LiveMeetingu stále stejný email kvůli spárování účasti pro získání knihy.

Automatické testování uživatelského rozhraní

Je podporován AJAX?
Ano.

Je podpora pro Visual FoxPro?
Ne, není. FoxPro samotné je napsané v C++, takže některé věci by mohly fungovat, ale moc bych si od toho zřejmě nesliboval.

Máte zkušenosti s UI testy na platformě SharePoint?
Zkoušel jsem je. SharePoint je webová aplikace, automatizace je bez problémů.

Momentálně testujete webovou aplikaci, spíše by mě zajímalo testování klasických aplikací a problémy kolem možností testování UI.
Desktopové aplikace ve WPF a WinForms jsou plně podporovány, Silverlight s omezeními. C++ aplikace oficiálně podporované nejsou, ale zpravidla rozumně fungují. Více v prezentaci.

Je možné testovat vzájemné kombinace vstupních parametrů?
Pokud máte na mysli tzv. data-driven testy, tak ty fungují na principu „co řádek s daty, to jedno provedení testu“. Příslušné nakombinování si tedy musíte udělat sám.

Je možné nahraný test využít pro zátěžové testování?
Na každém počítači může běžet pouze jeden test uživatelského rozhraní v každý okamžik, k vytvoření realistické zátěže byste potřeboval hodně počítačů. Zátěžové testy se dělají jinak, povíme si o tom ve čtvrté lekci.

Znamená jakákoliv změna v UI nutnost nahrát test znovu?
Pokud změna nevyvolá změnu vyhledávacích kritérií použitých ovládacích prvků (např. Tag == DIV a ID == result), není třeba nic měnit. Pokud se tyto změní, musíte buď zeditovat vyhledávací kritéria prvků v mapě prvků UI, případně při radikálních změnách může být méně pracné nahrát sekvenci znovu.

Mohu pro vyhledávání prvku na stránce používat regulární výrazy?
Ne, standardně jsou k dispozici pouze operátory „is equal“ a „contains“.

Lze testy vytvářet pod VS 2010, přičemž samotná aplikace se vyvíjí ve VS2008?
Ano, určitě. Testy neví nic o zdrojovém kódu anebo způsobu vzniku aplikace, znají pouze cestu k EXE souboru nebo URL stránky.

Lze nějak kódově zautomatizovat mazání cookies při startu testu? (pro IE i Firefox)
Objekt BrowserWindow žádnou takovou metodu nemá. Není ale problém, abyste cookies vymazal sám ze souborového systému, např. vlastním kódem v metodě označené atributem TestInitialize.

Co používáte za plug-in ve VS2010 k nedefaultnimu zobrazení tooltipu při najetí myší na třídu?
Používám Productivity Power Tools, které si můžete stáhnout na https://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef

Je potřebné při spuštění každého testu zavírat prohlížeč? Co se může stát, kdyby se prohlížeč nezavřel?
Důvodem je požadavek, aby byly testy robustní a na sobě nezávislé. Pokud by po předchozím testu zůstal otevřený prohlížeč, mohlo by to interferovat s dalším prováděným testem. Jinými slovy – jeden selhaný test by mohl způsobit selhání všech následujících testů.

V jakých verzích Visual Studia je možné vytvářet UI testy?
Ve Visual Studiu 2010 edice Premium nebo Ultimate.

Lze pro UI testy využívat jako zdroje dat pro vložení nějaké xml nebo databázi? Stejně jako pro porovnání výsledku?
Ano, jedná se o data-driven testy, které lze vidět v poslední ukázce v prezentaci.

Lze UI test kombinovat s otestováním vygenerovaných dat v modelu?
Nejsem si jistý, jak je to myšleno. Domnívám se, že máte na mysli data-driven test, ten je určitě možný.

Pro data-driven testy jsou podporovány csv, xml co klasický jednoduchý Excel?
Podporovány jsou csv, xml a databáze. Jako databázi je možné použít ODBC zdroj napojený na Excel, který má strukturu tabulky s názvy sloupečků v prvním řádku. Osobně bych ale doporučil používat spíše jednoduché XML soubory, které můžete verzovat spolu s kódem, porovnávat verze apod., což u binárních formátů není možné.

Jak se identifikuje vstup přes buňku gridu? Jak testovat počet řádků v datagridu?
Odpověď závisí na použité technologii a gridu. Např. ve WPF máte k dispozici objekt datagridu, který má řádky a sloupce, jejich počty apod. Každá buňka je pak samostatně identifikovatelný objekt. Aby tyto ovládací prvky fungovaly, musí objekty, na které se vážou vracet unikátní a opakovatelný řetězec v metodě ToString(), něco jako Product2346.

Jakým způsobem otestovat počet řádků v gridu (WinForms)?
Pokud máte na mysli prvek DataGridView, tak při automatizaci ho zastupuje třída UIDatGridViewTable, která má vlastnost Rows.

Pokud kříž "crosshair" je neaktivní během záznamu testu, kde je chyba?
V jedné metodě nelze kombinovat výkonné akce a kontrolní kroky (na které potřebujete zaměřovací kříž). Domnívám se tedy, že už jste při záznamu vykonal nějakou akci, proto je neaktivní. Je nutné vygenerovat metodu a pak bude kříž opět k dispozici na provádění kontrol.

Jak se vypořádat s neočekávanou asynchronní událostí a následnou ztrátou focusu?
Ve vlastním testu by žádná „nečekaná“ věc nastat neměla, měl by být stoprocentně opakovatelný a pokud není, znamená to selhání testu. Může samozřejmě nastat nějaké vyrušení zvenku, např. nabídka, že jsou k dispozici aktualizace doplňku prohlížeče nebo něco podobného, což je samozřejmě problém. Obecně se doporučuje udržovat prostředí co nejjednodušší a všechny podobné funkce povypínat.

Je nutno pro testy UI mít test agenta případně jaká jsou omezení, pokud ho nemám?
Abyste mohl spustit testy UI, musíte to provést buď uživatelskou akcí na počítači s VS 2010 Premium nebo Ultimate anebo jako vzdálené provedení testu na počítači s Test Agentem (bez Visual Studia). Jde tedy jenom o režim spouštění, vlastní průběh i možnosti jsou zcela stejné.

Bylo by možné někde zveřejnit základní nastavení a konfiguraci VS, tak aby bylo možno tyto testy nahrávat. Momentálně mám potíže se souborem exctrlst.exe a věřím, že další se objeví časem.

Visual Studio stačí pouze nainstalovat, žádná konfigurace není třeba. Pokud máte nějaký problém, jedná se zřejmě o chybu. Případně se mi ozvěte na mjurek(zavináč)microsoft.com

Dá se UITest propojit s TFS build službou, např. že se spouští každou noc při buildu?
Ano, to je jeden ze základních scénářů. Více informací se dozvíte ve třetí lekci.

Mohu setřídit UI akce podle pořadí vykonávání jednotlivých kroků?
Kroky v rámci metody jsou vždy setříděny podle pořadí vykonávání. Pokud máte na mysli setříděný metod podle pořadí nahrávání (nikoliv abecedně), tak to možné není. Nemělo by to ani smysl, protože poté, co metody nahrajete jsou v tomto pořadí uvedeny v kódu příslušného testu, který můžete posléze libovolně změnit.

Mohl byste do příště zařadit ukázku testování alespoň dvou aplikací? Jedna něco vytvoří a druhá si to převezme a zpracuje?
Obávám se, že na to nezbude čas. Pokud máte na mysli test dvou aplikací současně (např. vložím v tlusté aplikaci pro správu e-shopu nový produkt a pak zkontroluji v druhé aplikaci v prohlížeči, že zákazník nový produkt vidí), tak to je bez problémů možné.

V rámci čeho mají být identifikátory prvků UI jednoznačné?
Záleží, jak jsou pro daný prvek zaznamenána vyhledávací kritéria, ale měly by být jednoznačné minimálně v rámci nadřazeného elementu uživatelského rozhraní.

Můžu vidět všechny možné metody, které mohu užít nad konkrétním objektem?
Každý objekt v UI je zastoupen nějakým automatizačním objektem, což je třída v .NET frameworku. Její vlastnosti a metody můžete zjistit běžnými způsoby (např. funguje IntelliSense).

Co podpora 3rd party komponent, jde mi třeba o FarPoint? Pro weby používáme některé produkty firmy telerik, jsou tyto prvky podporovány?
To je otázka spíše na výrobce těchto komponent. U webových komponent závisí zejména na tom, jaká ID používá pro vygenerované HTML prvky. U tlustých komponent na tom, v jak dobré úrovni abstrakce popisuje akce prováděné v rámci prvku. Ke konkrétním komponentám se nechci vyjadřovat.

Jde lokalizovat elementy UI i obráceně? Tj. v kódu dostanu varování, pokud měním vlastnost objektu, která by vedla k rozbití testu?
To by bylo jistě užitečné, ale vaše aplikace „neví“ nic o tom, že je testována a jakým způsobem, tudíž nemůže na tento fakt upozornit. Na druhou stranu zpravidla je jedinou relevantní vlastností pro lokalizaci prvku identifikátor, takže je to celkem snadné.

Nechci nahrávat sekvenci kroků, je zde možnost přidávat prvky UI do repository?
Zřejmě máte na mysli přidávání prvků do stromu ovládacího kódu. To přímo možné není, ale můžete vygenerovat metody nebo kontroly hodnot (tím se příslušné prvky přidají do stromu), a poté tyto metody smazat – prvky ve stromu zůstanou.

Nějak mi uniklo, jak zařídit aby se IE sám spustil. Test mi čeká, až ho spustím já ručně.
Spuštění aplikace – ať už tlusté anebo stránky v prohlížeči – je standardním krokem v záznamu kroků. Pro jeho zaznamenání se doporučuje umístit odkaz na EXE soubor anebo webovou stránku na plochu a během záznamu testu spustit aplikaci přes tento odkaz, takto se krok korektně zaznamená. Alternativně můžete aplikaci spustit pomocí třídy BrowserWindow.

Spustil jsem nahrávání testu, přešel do Visual studia, zvolil zobrazení stránky v prohlížeči (měl by se spustit webdev server) a zavřel prohlížeč. Z tohoto nahrávání se zaznamenalo pouze zavření prohlížeče, které přirozeně při spuštění selhalo, protože prohlížeč nebyl otevřen. Lze nahrávání používat vývojářem s použitím webdev serveru?
Títmo způsobem není spuštění prohlížeče zaznamenáno, použijte způsob popsaný v předchozí odpovědi. Testu je přirozeně jedno, jaký webový server používáte, přesto Web Development Server nepovažuji za příliš vhodný, neboť neběží neustále a je třeba ho vždy spouštět. Doporučuji spíše IIS anebo od VS 2010 SP1 použít IIS Express (viz tento článek).

Lze jednotlivé UI mapy sdílet mezi jednotlivými projekty s Coded UI testy (tak, že se jejich úprava promítne do všech Coded UI testů)?
Standardně všechny Coded UI testy sdílí UI mapy v rámci jednoho projektu, přesně jak popisujete. Pokud chcete tutéž funkci mít i napříč více projekty, je možné do dalších projektů mapu přilinkovat, což je standardní funkce Visual Studia pro jakýkoliv typ souboru, viz např. https://msdn.microsoft.com/en-us/library/9f4t9t92.aspx

Ostatní technické dotazy

Lze použít jako virtuální prostředí VirtualBox nebo VMware?
Ano, ale nemáte k dispozici plnou paletu funkcí jako u HyperV. Více ve třetí lekci.

Je potřeba mít při spouštění automatizovaných testů přiřazených k testovacímu případu virtuální prostředí anebo je možné jeho spuštění i lokálně u testera?
Virtuální prostředí není nezbytně nutné, je možné použít i tzv. physical environment, což může být fyzický počítač anebo virtuál nespravovaný TFS.

V případě, že manuální testy jsou doporučeny na lokálním PC - jakým způsobem je doporučeno řešení unifikovaného prostředí před testem? To, co známe z virtuálu - snapshot výchozího stavu.
Asi bych nebyl takto kategorický, co se týče doporučení, možná to bylo špatně pochopeno. Běh aplikace na lokálním počítači testera je pohodlnější pro testera, doporučil bych ho v situacích, kdy prostředí klienta nevyžaduje žádnou složitou přípravu – např. webová aplikace anebo aplikace spouštěná pouhým nakopírováním aplikace a spuštěním EXE souboru. Samozřejmě můžete tuto techniku kombinovat s virtualizovaným serverovým prostředím, do kterého je aplikace nasazena jako součást buildu.

Dají se tímto způsobem automatizovat i jiné testy než UI?
Unit testy mohou testovat prakticky cokoliv, co lze programově ošetřit, a mohou být spouštěné automaticky z jakékoliv verze Visual Studia 2010. Testy UI jsou pouze jejich speciálním případem.

Jaké jsou doporučené hardwarové požadavky na TFS server, aby slušně zvládal buildy, virtuální prostředí atd.
Žádné oficiální doporučení nejsou, TFS je co do nároků srovnatelná s webovou aplikací. Bez problémů funguje na běžném počítači s 2GB paměti, pokud zároveň chcete běžet i SharePoint, tak potřebujete více. Buildy a virtuály se doporučuje běžet na jiném počítači než TFS, protože krátkodobě spotřebovávají hodně zdrojů a zhoršily by odezvu TFS. Nepotřebujete na to žádné dodatečné licence. Nároky na build server jsou minimální (jakýkoliv běžný počítač), nároky na běh virtuálů závisí na jejich počtu a složitosti aplikací v nich běžících, těžko se dává nějaká konkrétní odpověď.

Chápu dobře, že jedno společné testovací prostředí není dobrá koncepce, když testeři potřebují obvykle souběžně testovat?
Záleží jaké máte požadavky. Testeři určitě mohou sdílet serverové prostředí anebo mohou používat terminálové služby a sdílet i klientskou aplikaci. Ať tak či onak, sdílené prostředí nejde moc dohromady s technikou snapshotů pro záznam chyby. Pokud ji chcete používat, je lepší prostředí nesdílet a pro jednotlivé testery je naklonovat.

Existuje nějaká možnost testování "blbostního" chování uživatele, např. nenumerická hodnota pro výpočet čísla? Nebo nějaké náhodné klikání apod.?
Automaticky můžete testovat cokoliv, ale bude to vždy jedna a tatáž, stále stejná posloupnost kroků. Pokud máte na mysli testování nazývané někdy „exploratory testing“ anebo „fuzzy testing“, tak to je nutné dělat manuálně, žádná podpora automatizace zde není.

Visual Studio 2010 Feature Packs - je možné se k tomuto nástroji dostat jinak než přes MSDN? Nebude to třeba v Service Packu 1 pro VS?
Pravděpodobně budou integrovány v příští verzi Visual Studia, ale nemám žádné informace o tom, že by se měly stát součástí SP 1.

Test agent musí běžet v interaktivním módu anebo může i jako služba pokud je zároveň přihlášený uživatel, pod kterým to běží.
Záleží, co má test agent testovat. Pokud uživatelské rozhraní, tak musí mít proces test agenta práva přístupu k vizuálním objektům na ploše. Pokud neběží v interaktivním módu, tak by tato práva neměl. Odpověď tedy je: pro Coded UI testy musí běžet v interaktivním módu.

Jakou pozici má Spec Explorer, který lze používat i ve VS2010 Pro? Ten by měl být schopen využití ve všech oblastech (kód, UI, ...)
Tzv. model-based testing je zajímavým a rozvíjejícím se přístupem pro návrh a testování aplikací, ale dle mého soudu dosud nedozrál pro masové použití v typických aplikacích. Každopádně v současné verzi ve Spec Exploreru není přílišná integrace s tradičními přístupy k testování.

Michael