V úterý pokračoval online kurz pod názvem "Leden - měsíc testování aplikací". Účast na třetí lekci, věnované virtuálním testovacím prostředím, byla stále 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 http://www.microsoft.com/cze/events/kurz-testovani-aplikaci/.

Záznam a prezentace

Záznam

Prezentace o virtuálních testovacích prostředích

Prezentace o licencích a edicích Visual Studia ve vztahu k testování

Otázky a odpovědi

Otázky jsem si dovolil jazykově a stylisticky upravit, podobné otázky sloučit apod.

Licence

Jak je SCVMM licencováno? Je to zvláštní licence nebo je součástí TFS? Je licenčně omezen počet spravovaných serverů, virtuálů, testerů? Říkal jste, že HyperV je zdarma. Jak je to například s licencováním OS v tomto prostředí?
Zjednodušeně řečeno, pokud máte Visual Studio s MSDN předplatným, máte veškeré produkty pokryty. Podrobněji o tom píše kolega Burian v tomto příspěvku. Dále doporučuji stáhnout krátkou prezentaci o edicích Visual Studia.

Virtualizace testování

Většinu problémů, které nedokážeme otestovat se týkají Citrix prostředí, ve kterém jsou naše aplikace provozované. Jak je to s podporou těchto prostředí?
Neznám do detailu všechny Citrix produkty. Určitě není problém připravit virtuální prostředí včetně nainstalovaných Citrix produktů, stejně jako není problém se k nim vzdáleně připojovat a testovat je. Co nefunguje, je automatické testování a fast forward přes klienta vzdáleného připojení – testovací software (Test Manager nebo Test Agent) a testovaný software (vaše aplikace) musí běžet ve stejném operačním systému.

Je SCVMM něco jako FlexCap?
Tento nástroj mi bohužel není znám, takže nemohu odpovědět. SCVMM je nástroj pro všechny aspekty správy virtualizace v datovém centru. Podrobnější informace naleznete na jeho domovské stránce, doporučuji např. tento whitepaper.

Je možné použít virtuální stroje z VMWare? Jak by probíhalo propojení s takto vytvořeným virtuálem? Jaká jsou omezení takto vytvořeného prostředí?
Je možné je použít, ale k dispozici je pouze podmnožina funkcí. TFS se k těmto virtuálům chová stejně jako k fyzickým počítačům, tzn. nemůže je plně ovládat. K dispozici tak je plná funkčnost testování, ale nefunguje síťová izolace, klonování, automatická instalace aplikací apod. Propojení se vytvoří tak, že do virtuálu nainstalujete Test Agenta, spojíte ho s Test Controllerem a vytvoříte tzv. physical environment. Podrobnější diskusi najdete na http://msdn.microsoft.com/en-us/library/dd997438.aspx.

Je možno tyto virtuální prostředí využít pro zátěžové testování? Docela často je problém nasimulovat HW, na kterém poběží aplikace v reálu, může toto vyřešit virtuál?
Bude hodně záležet na typu zátěže. Ve virtuále můžete velmi dobře měřit spotřebu paměti a zátěž procesoru při zátěži, na druhou stranu poskytuje velmi zkreslené výsledky při přístupech na virtualizovaný disk (např. databáze).

Nemáte zkušenost s převodem VMWare image do vhd (HyperV) image? Přemýšlím o možnosti neprovádět složitou instalaci/konfiguraci?
Osobní zkušenosti nemám, ale migrace VMWare virtuálů do HyperV je standardní součástí nástroje SCVMM, kde se nazývá V2V, virtual-2-virtual a provádí se nad zastaveným VMWare virtuálem, viz např. tento whitepaper. Alternativně lze použít nástroj disk2vhd.

Je možné vytvoření testovacího prostředí z image skutečného PC např. od zákazníka?
Migrace fyzických počítačů do HyperV je standardní součástí nástroje SCVMM, kde se nazývá P2V, physical-2-virtual a provádí se nad běžícím operačním systémem Windows XP a vyšším pomocí techniky snapshotu disku, viz např. tento whitepaper. Alternativně lze použít nástroj disk2vhd.

Virtuální stroje běží na stanici nebo na serveru?
Běží na hostitelském počítači s HyperV, což může být Windows Server 2008 nebo Windows Server 2008 R2.

Tyto testy běží v pozadí nebo momentálně na PC nic neudělám?
Jak je uvedeno v předchozí odpovědi, testy běží na serveru a můžete je monitorovat pomocí vzdáleného připojení. Na svém vlastním počítači můžete pracovat bez omezení, v případném vzdáleném připojení ale nemůžete dělat nic, abyste se testu “nepletli do cesty”.

Lze do role Desktop Client nasadit také databázový server MS SQL a testovat databázové dotazy?
Předně je třeba říci, že označení role je pouze určitou popiskou pro rozlišení virtuálů a nijak nedeterminuje operační systém anebo cokoliv dalšího týkajícího se virtuálu. Dovnitř virtuálu můžete nainstalovat MS SQL nebo jinou databázi a můžete nad ní provádět jakékoliv testy, ať už jsou to unit testy databázové vrstvy anebo funkční testy aplikace, která tuto databázi využívá.

Není problém, když běží na serveru virtuál s test agenty a zároveň na hostitelském operačním systému test controller?
Tato konfigurace je plně podporována. Ani z výkonnostního hlediska v tom žádný zásadní problém nevidím, test controller má hlavně koordinační úlohu a negeneruje žádnou významnou zátěž.

Jak to je s tím domain controllerem - pokud zaškrtnu zařazení virtuálu do domény, nainstaluje se domain controller sám nebo ho musím nainstalovat manuálně?
Domain Controller a DNS server si musíte nainstalovat sám, stejně jako přidat ostatní virtuály do domény. Funkce Network Isolation manipuluje pouze s TCP/IP nastavením - nastavuje IP adresy a DNS. Více viz http://msdn.microsoft.com/en-us/library/ee518924.aspx

Co vývoj pro mobilní zařízení anebo Windows 7 Embedded, lze virtualizaci použít?
Tento typ aplikací si ze své podstaty s virtualizací příliš nerozumí, takže odpověď zní spíše záporně.

Ostatní technické dotazy

Pokud testuji (například přihlášení do aplikace) a očekávám různé výsledky (uživatel A se může přihlásit, B, C se nemohou přihlásit, apod), je možné, aby test prošel pro všechny tyto možnosti? Problém je v tom, že pro uživatele A se objeví další formulář, zatímco B,C zůstanou na přihlašovacím okně a vyskočí messagebox?
Vámi popsaný případ bych asi řešil spíše dvěma různými testovacími případy. Nicméně je možné řešit to i jedním parametrizovaným případem se sadou parametrů {jmeno, heslo, vysledek}. Pokud takový případ automatizujete, musíte nahrát sekvence kroků pro obě varianty vývoje a do automatizovaného testu vložit konstrukci if…else v závislosti na hodnotě vysledek, kterou zístkate z TestContext.DataRow.

Je možné nechat automaticky ukončit test po nějaké době? Například - přihlašuji se do aplikace, očekávám přihlášení, ale vyskočí nějaké varovné okno, pak test běží naprázdno, protože nemůže najít nějaký ovládací prvek, se kterým měl dál pracovat...
Zkuste si pohrát s jemnými nastaveními kolem přehrávání testů, jsou tam právě i nastavení pro time-out a selhávání testů, více např. na http://blogs.msdn.com/b/vstsqualitytools/archive/2009/08/10/configuring-playback-in-vstt-2010.aspx 

Existuje nějaký jednoduchý způsob jak exportovat report z testu, který by byl čitelný ve Wordu či Excelu?
Nejsem si jistý, co vše v reportu chcete mít, ale veškerá data jsou s cca hodinovým zpožděním v datovém skladu. Nad ním je OLAP kostka a k té se můžete připojit Excelem a vytvořit si jaký chcete report. Kromě toho jsou na SharePointu projektu uložené některé připravené Excel reporty a v reportovacích službách jsou další reporty v tiskové kvalitě. Dále se zkuste podívat na bezplatný doplněk pro generování reportů zvaný TestScribe.

Co když potřebuji testovat blokový přístup k diskům (SAN), jak tester zjistí, že nepoužívá sdílené úložiště (CIFS share)?
Nejsem si jist, zda rozumím dotazu. Virtualizované testování je primárně určeno pro funkční testování, kde by hardware neměl hrát žádnou roli. Možná bude vaše otázka vhodnější ve 4. lekci věnované výkonnostním testům.

Je někde na internetu uvedený seznam API okolo TFS? Existuje k testovacímu prostředí něajké API pro programátory v C#, případně propojení s VS2010?
Testování, stejně jako ostatní složky TFS má plně zdokumentovaná API. Rovněž doporučuji sadu praktických příkladů na toto téma na blogu Shai Raitena.

Jaké je ideální rozvrstvení strojů? 1x server pro TFS, 1x server pro buildy apod.?
Odpověď je silně závislá na počtu současně pracujících uživatelů TFS. Pro běžné počty v řádu maximálně desítek můžete většinu funkcí nainstalovat na jediný počítač. První vyjímkou je Build Agent, který generuje krátkodobou, ale vysokou procesorovou zátěž a navíc často běží s právy lokálního administrátora a může spustit prakticky libovolný vývojářem zadaný kód, což považuji za bezpečnostní problém při kombinaci s TFS serverem. Druhou výjimkou, a to ze stejných důvodů, je Test Agent. Pokud chcete využívat virtualizované testování ve větším měřítku, je lepší mít dedikovaného hostitele, na kterém virtuály běží, neboť např. při klonování virtuálních prostředí je disková zátěž enormní, a měla by velmi negativní dopad na odezvy TFS. Pro vyzkoušení funkce to ale určitě není nutná podmínka.

Kolik testů bude řádově potřeba pro otestování středně složité aplikace? Pokud se vždy znovu spouští celá aplikace, bude běh hodně dlouhý (i hodiny, možná desítky hodin)?
Záleží na definici termínu “středně složitý”. Pokud byste měl testovacích případů řádově stovky a jeden běžel řekněme minutu, jsme v řádu hodin, což přes noc bez problémů proběhne. Při extrémních požadavcích na objem testů je možné dát do role běžící testy více virtuálů, Test Controller pak jednotlivé testovací případy jsou rozděleny mezi více počítačů.

Mnohdy je zapotřebí testovat závislost chování aplikace na datech. Existuje v některé edici nástroj na generování komplexních testovacích dat?
Ano, tyto nástroje jsou součástí databázového projektu v edici Visual Studio 2010 Premium nebo Ultimate a podporují generování dat v databázi SQL 2000 a vyšší (příklad k vyzkoušení). Pro Oracle existuje doplněk od firmy Quest.

Je možné kopírovat testovací případy (Test Case) z jednoho týmového projektu do druhého?
Tato možnost je v Visual Studiu anebo v Team Exploreru (který má každý tester k dispozici), v Test Manageru zdá se není. Vyberte jednu pracovní položku (např. testovací případ) a z kontextové nabídky zvolte “Create Copy of Work Item”. Pro hromadné kopírování by bylo třeba napsat skript proti TFS API.

Jakým způsobem se kopíruje testovací plán?
Funkce na kopii celého plánu v rozhraní Test Manageru není. Můžete ale mezi plány kopírovat sady testovacích případů. V kontextové nabídce v obsahu testovacího plánu je tato možnost pod “Copy suite from another test plan”.

Testování přináší určitou režii a vyplatí se až od určité složitosti a nasazení aplikace. Máte nějaký osobní odhad, u jakého typu aplikací testování nasadit?
To je těžké kvantifikovat. Testování se zpravidla nevyplatí u aplikací, které jsou jednorázové a není třeba je dlouhodobě udržovat – většina aplikací je ale přesně opačných...

Máte nějaký přehled podpůrných nástrojů nebo používáte další nástroje k Test Manager (např. tooly pro zapisování jednotlivých kroků testovacího případu na více řádků)?
Žádný seznam si nevedu, doporučuji hledat (např. na www.codeplex.com). Určitě doporučuji např. výše zmíněný nástroj TestScribe, dále Test Attachment Cleaner Power Tool a samozřejmě též Visual Studio 2010 Feature Pack 2.

V testech jste zadali vstupní údaje a kontrolujete, zda dostanete očekávaný výsledek. Co ale když chci také kontrolovat, jak rychle operace proběhla? Nebo zda je nová verze rychlejší nebo pomalejší než předchozí?
Standardně se kontrola času neprovádí (s výjimkou timeoutů). Nicméně automatizovaný test je kód, který je plně pod vaší kontrolou. Klidně si tam můžete spustit stopky, měřit čas a rozhodovat podle času o selhání testu. Pro porovnávání výkonnosti jsou lepší výkonnostní testy, kterým se budeme věnovat ve 4. díle seriálu.

Lze nějak skládat testy v seznamu testů? Snažila jsem se je nějakým způsobem seřadit, ale při spuštění se toto neprovedlo a testy se spouštějí nahodile.
Řazení je opravdu nahodilé. Podle všech teoretických pouček by měly být jednotlivé testy zcela nezávislé a jejich pořadí tudíž lhostejné. V praxi je často výhodný pragmatičtější přístup, který je výrazně méně pracný (jakkoliv proti němu mohou puristé protestovat). V takovém případě doporučuji sloužit více testů v konkrétním pořadí do jednoho většího testu, něco jako AddAndDeleteCustomer

Nahrál jsem si test, ale nedaří se mi otevřít soubor UIMap.uitest pomoci designeru, který byl vidět v ukázkách. Mám VS 2010 Premium. Je něco na mém VS špatně nebo to v této verzi nelze otevřít?
V originálně vydaném Visual Studiu 2010 lze otevírat .uitest soubory pouze jako XML textové soubory. Vizuální editor přibyl až v rozšíření Feature Pack 2, které si musíte doinstalovat.

Michael