Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Vyšší odborná škola informačních služeb v Praze
Eva Sellnerová
Automatizované testování prostřednictvím programu TestComplete Bakalářská práce
2008
Zadání: Zpracujte návrh implementace programu TestComplete do procesů automatizovaného testování ve společnosti LMC, s.r.o. Vyhodnoťte výsledky a přínosy implementace.
Prohlášení: Prohlašuji, že jsem bakalářskou práci na téma “Automatizované testování prostřednictvím programu TestComplete” zpracovala samostatně a použila jsem pouze zdrojů, které cituji a uvádím v seznamu použité literatury.
V Praze dne 16. prosince 2007
……………………………………………………. Eva Sellnerová
Obsah
Obsah 1. METODIKA POSTUPU PRÁCE.................................................................................................... 6
2. SPOLEČNOST LMC, S.R.O. A JEJÍ HISTORIE .................................................................. 7 2.1.
INFORMAČNÍ SYSTÉM SPOLEČNOSTI LMC, S.R.O ..................................................................... 9
3. PRODUKTY SPOLEČNOSTI LMC, S.R.O. A JEJICH TESTOVÁNÍ ................. 11 3.1.
LMC G2 ENTERPRISE ................................................................................................................... 13
3.1.1 3.1.2
LMC G2 Enterprise ....................................................................................................................... 14 LMC G2 Enterprise - Aktivní pracovní pozice................................................................................ 15 3.2. LMC G2 EXPRESS ......................................................................................................................... 16 3.2.1 LMC G2 Express ............................................................................................................................ 16 3.2.2 LMC G2 Express - Došlé reakce .................................................................................................... 17 3.3. TESTOVÁNÍ A TESTERSKÉ ODDĚLENÍ VE SPOLEČNOSTI LMC, S.R.O .................................. 18
4. AUTOMATIZOVANÉ TESTOVÁNÍ ............................................................................................ 20 4.1. 4.1.1 4.1.2
AUTOMATIZOVANÉ TESTOVÁNÍ, JEHO VÝHODY A NEVÝHODY. .......................................... 20 Nejdůležitější a nejlepší vlastnosti testovacích nástrojů ................................................................. 20 Některé nevýhody automatizovaného testování .............................................................................. 21
5. VÝBĚR TESTCOMPLETU (SROVNÁNÍ S JINÝMI NÁSTROJI AUTOMATIZOVANÉHO TESTOVÁNÍ) ............................................................................................ 22
6. POPIS PRÁCE V PROGRAMU TESTCOMPLETE........................................................... 28 6.1. 6.2. 6.2.1 6.2.2
6.3.
ZAČÁTEK PSANÍ AUTOMATICKÉHO TESTU ................................................................................ 28 VYTVOŘENÍ NOVÉHO PROJEKTU V PROGRAMU TESTCOMPLETE ........................................ 28 Popisy jednotlivých oken v TestCompletu ....................................................................................... 30 Popisy spodních záložek TestCompletu .......................................................................................... 32 ZÁPIS DO PROGRAMU TESTCOMPLETE...................................................................................... 32
7. IMPLEMENTACE PROGRAMU TESTCOMPLETE DO AUTOMATIZACE PRACOVNÍCH PORTÁLŮ...................................................................................................................... 33 7.1. 7.1.1 7.1.2
AUTOMATIZOVANÝ TEST PRO PRACOVNÍ PORTÁL JOBS.CZ.................................................. 33
Popis kontroly pracovního portálu Jobs.cz..................................................................................... 34 Postup automatizace Jobs.cz .......................................................................................................... 36 7.2. AUTOMATIZOVANÝ TEST PRO PRACOVNÍ PORTÁL HOTJOBS.CZ ......................................... 39 7.2.1 Popis kontroly pracovního portálu Hotjobs.cz ............................................................................... 39 7.2.2 Postup automatizace Hotjobs.cz ..................................................................................................... 40
Obsah
7.3.
AUTOMATIZOVANÝ TEST PRO PRACOVNÍ PORTÁL TOPJOBS.SK .......................................... 42
7.3.1 7.3.2
Popis kontroly pracovního portálu Topjobs.sk ............................................................................... 43 Postup automatizace Topjobs.sk ..................................................................................................... 44 7.4. AUTOMATIZOVANÝ TEST PRO PRACOVNÍ PORTÁL LIVE.TOPJOBS.SK ................................ 47 7.4.1 Popis kontroly pracovního portálu Live.topjobs.sk ........................................................................ 47 7.4.2 Postup automatizace Live.topjobs.sk .............................................................................................. 48 7.5. AUTOMATIZOVANÝ TEST PRO PRACOVNÍ PORTÁL PRACE.CZ .............................................. 50 7.5.1 Popis kontroly pracovního portálu Prace.cz .................................................................................. 50
8. ZÁVĚR ..................................................................................................................................................... 52
9. POUŽITÉ ZDROJE ............................................................................................................................ 53
10.
PŘÍLOHY ............................................................................................................................................ 56
10.1. AUTOMATIZACE PRACOVNÍHO PORTÁLU PRÁCE.CZ (ZDROJOVÝ KÓD).............................. 56 10.2. KNIHOVNA FUNKCÍ ........................................................................................................................ 63 10.3. PŘEHLED VZHLEDU PRACOVNÍCH PORTÁLŮ ............................................................................ 77
Anotace
Anotace Tato bakalářská práce se zabývá problematikou zautomatizování některých pracovních činností v testerském oddělení společnosti LMC, s.r.o. Automatizace těchto činností je prováděna za účelem ušetření pracovní kapacity testerů, která je velmi zahlcena prováděním rutinních činností. Automatizace probíhala prostřednictvím programu TestComplete.
Metodika postupu práce
1. Metodika postupu práce Rozhodla jsem se psát svou bakalářkou práci o zkvalitnění práce v Testerském oddělení společnosti LMC, s.r.o. Ráda bych zautomatizovala, prostřednictvím programu TestComplete, některé operativní, každodenní činnosti testera, které zabírají zbytečně mnoho času a zdržují od testování důležitých aplikací a nových projektů. Poté, co se společnost LMC rozhodla pro automatizaci, bylo nutné zvolit, které pracovní činnosti se budou automatizovat, za pomoci kterého nástroje a jak dlouho by samotná automatizace měla trvat, než bude výsledek prezentován vedení společnosti LMC, konkrétně řediteli IT oddělení a majiteli společnosti. V časovém rozmezí od května 2007 do června 2007 probíhal výběr vhodného programu pro automatizaci, z něhož nakonec vyhrál TestComplete. Nejdříve se určilo, co vše se od programu očekává. Funkce, které musí zvládat. Vznikla tedy tabulka, kde je uvedeno co vše musí program ovládat a pro kterou aplikaci nebo pro kterou její část je tento úkon nezbytný. V tomto časovém rozmezí se také vybíralo z vhodných programů, programy byly voleny dle zkušeností. Měsíc byla otevřená tabulka a každý, kdo již měl nějakou zkušenost s některým z programů, mohl dopsat program do tabulky a doplnit o něm potřebné informace. Zapisování do tabulky se mohli účastnit všichni testeři, Team leader testerů a jeden Middle manager (nadřízený Team leadera testerů). Dále se určilo, které všechny operativní činnosti by bylo možné zautomatizovat. Prozatím kontrola všech pěti pracovních portálů, které společnost LMC vlastní a které se musí několikrát denně zkontrolovat. Dále pak některé úkony v aplikaci LMC G2, kterou společnost LMC provozuje (např. vystavování pozic, zakládání uživatelů v aplikaci, registrace společností do aplikace), vše samozřejmě pro testovací účely. Tabulka byla po měsíci uzavřena, poté Team leader testerů a Middle manager vybrali vhodný program pro automatizaci – TestComplete. Pro tuto bakalářskou práci jsem do tabulky ještě doplnila některé informace, které chyběly a podařilo se mi je zjistit. Do měsíce, po výběrovém řízení, byla zakoupena licence programu TestComplete, nainstalovala se na jeden testerský počítač, na který mohl každý z testerů přes vzdálený přístup. Bylo ještě nutné určit od kdy je možné s programem začít automatizovat. Automatizace začala, v srpnu 2007, automatizací všech pěti pracovních portálů, určilo se které pracovní portály se mají začít automatizovat. Současně se začaly automatizovat pracovní portály Prace.cz a Jobs.cz. Automatizaci Prace.cz prováděl můj kolega, který již má přímo s TestCompletem zkušenosti. Já jsem se věnovala psaní automatického testu pro pracovní portál Jobs.cz. Konkrétní postup, co vše se má zautomatizovat uvádím v tabulce, která určuje kam má tester kliknout a co vše má zkontrolovat, na kterém pracovním portálu. Bohužel během psaní automatického testu pro Praci.cz se vyskytl problém, kterého jsme se všichni nejvíce obávali, vedení rozhodlo a kompletní změně tohoto pracovního portálu. Práce mého kolegy byla tedy zcela zbytečná a s automatizací musel začít znovu, respektive se snažil předělat celý test, který již měl napsaný. Nakonec tedy celá automatizace trvala zhruba čtyři měsíce. Všechny výběrové tabulky, postupy práce a psaní automatických testů prostřednictvím programu TestComplete uvádím níže.
Str. 6
Společnost LMC, s.r.o. a její historie
2. Společnost LMC, s.r.o. a její historie Společnost LMC, ve které pracuji, je vedoucím hráčem českého e-recruitmentu. Tuto společnost založil, v roce 1996, dnes již na internetovém trhu práce velmi známý podnikatel Libor Malý. Jejími klienty je většina prestižních českých i zahraničních zaměstnavatelů. Většina bank a spořitelen (Česká spořitelna, GE Money Bank, Komerční banka, Direct pojišťovna, ČSOB pojišťovna...) většina velkých státních podniků, také mnohé zahraniční firmy (Deloitte, AMCICO AIG Life, Accenture, Hyundai, Microsoft, DHL, Siemens, Ernst & Young...), které působí na českém trhu práce. Také personální agentury (Manpower, Adecco, Grafton, Stimul...) a všechny úřady práce v České republice. V polovině devadesátých let, založila společnost LMC český internetový trh práce a má na něm dominantní postavení. Je provozovatelem nejvyhledávanějších pracovních serverů Jobs.cz, Prace.cz, Hotjobs.cz a nově (od září 2007) spuštěných serverů, pro slovenské zaměstnavatele, Topjobs.sk a Live.topjobs.sk. Kromě on-line recruitmentu, LMC pro klienty, zajišťuje i další služby v oblasti řízení lidských zdrojů jako tiskovou inzerci a výběr uchazečů o zaměstnání (prostřednictvím aplikace LMC G2). Návštěvníci pracovních serverů najdou na těchto stránkách nejen nabídky práce, ale i odborné poradenství a informace, které jim usnadní orientaci na pracovním trhu. Dále si zde mohou například zřídit vlastní účet a vytvořit si životopis. Napomáhají tak tvořit poptávku po pracovních místech. Za společností LMC stojí nyní již jedenáctiletá historie: ve zkratkách.
1996 Založili úplně první českou webovou stránku nabízející služby - www.jobs.cz. Tak vznikl elektronický trh práce, internetová adresa pro elitu pracovního trhu. Netrvalo to ani deset let a pracovní portál Jobs.cz pokryl celý region střední a východní Evropy. Začali spolupracovat i s dalšími pracovními servery v okolních zemích. 2000 Byl spuštěn druhý pracovní portál www.prace.cz. Široké veřejnosti přináší nejvíce nabídek práce na českém internetu. Každý den přes 50 000 pracovních inzerátů, až 1500 brigád a 40 000 aktivních životopisů. Dalo by se říct, že pracovní portál Prace.cz je kopií Jobs.cz, s rozšířenými nabídkami práce a jiným designem. V průběhu let se z Jobs.cz stal pracovní portál na kterém inzerují převážně velké a zahraniční firmy, tzv. elita pracovního trhu. 2004 LMC se stává jedním ze spoluzakladatelů středoevropské aliance předních operátorů elektronického trhu práce ONREA (On-line Recruitment Alliance). Sdružuje služby Jobs.cz, Profesia.sk (Slovensko), Pracuj.pl (Polsko), Professia.hu (Maďarsko). Aliance se postupně rozšiřuje i do dalších evropských zemí (Bulharsko, Estonsko, Litva, Lotyšsko, Rumunsko, Ukrajina).
2005 Spouští softwarovou aplikaci LMC G2, která personalistům zajišťuje komplexní správu náborového procesu. Tzn. inzerent vystaví pozice, které má zájem obsadit, může vystavovat na pracovní portál Jobs.cz nebo Prace.cz, jednotlivé pozice může také prostřednictvím aplikace zveřejňovat v tisku (např. v denících Bohemia a Moravia, Hospodářských novinách, Technickém Týdeníku a v časopisu Str. 7
Společnost LMC, s.r.o. a její historie Computer, dále mají možnost prostřednictvím aplikace ohlásit svou vystavenou pozici na konkrétní úřad práce, jedná se o zákonnou povinnost. Jde o systém, jenž zajistí inzerci na vybraných místech (internet, tisk, personální agentury). Umožní přehledně roztřídit příchozí odpovědi a snadno sledovat jednotlivá kola pohovorů až po případný nástup zaměstnance. V roce 2005 se služba ještě jmenovala LMC G1. 2007 Společnost LMC vstupuje na slovenský trh práce. Svým klientům začíná vedle náboru zaměstnanců pomáhat také s personálním marketingem. Společnost LMC začíná pro své klienty stále více nabízet službu „kariérních stránek“ např.: (gemoney.jobs.cz, kb.jobs.cz, accenture.jobs.cz). Image firmy hraje stále důležitější roli při výběru nového zaměstnání. Vzhledem k nedostatku kvalifikovaných pracovníků v některých oborech, může o obsazení nové pozice rozhodnout právě image, kterou tedy pomáhá budovat HR marketing.
Str. 8
Společnost LMC, s.r.o. a její historie
2.1. Informační systém společnosti LMC s.r.o Společnost LMC využívá jako svůj interní komunikační systém aplikaci RT (Request Tracker), ve které spolu mohou komunikovat všechny oddělení. Je to aplikace, kde jsou uvedeni všichni pracovníci společnosti. Tito uživatelé jsou zařazeni do front (já například patřím do fronty IT-TEST – oddělní IT a TEST jako testeři). Tato aplikace slouží na zadávání požadavků mezi jednotlivými odděleními, například pokud mám nějaký technický problém, vytvořím požadavek do fronty Support a přiřadím mu prioritu. Požadavky mohu přivlastňovat i konkrétním lidem, pokud přesně vím na koho můj požadavek z daného oddělení spadá, přiřadím ho přímo jemu. Nepsané pravidlo pro zpracovávání a řešení požadavku je, nejdříve řešit požadavky, které mám jako vlastník a které mají zároveň nejvyšší prioritu. V RT mohu i jednoduše vyhledávat, dle mnoha kritérií (stav požadavku, vlastník požadavku, žadatel, předmět požadavku, fronta a mnoho dalších). Požadavek může mít šest různých stavů (nový, otevřený, testovaný, čekající, zamítnutý a vyřešený), pokud jsem zadavatelem požadavku a tento požadavek změní stav, popřípadě k němu někdo připíše svůj komentář, automaticky mi o tom přijde zpráva na můj firemní e-mail. Dle stavu se dá poznat v jakém stupni rozpracovanosti se požadavek nachází.
1) Domovská stránka Request Trackeru (uprostřed nahoře: Požadavky, které přihlášený uživatel vlastní. Po pravé straně: Vypsané všechny fronty (jednotlivá oddělení), které se v Request Trackeru nacházejí.
Str. 9
Společnost LMC, s.r.o. a její historie 2) Tvorba nového požadavku: Nutné zadat frontu, do které požadavek spadá, název požadavku, text, prioritu, popřípadě modul a verzi, kterého se požadavek týká. U společnosti LMC například modul: G2 a název konkrétní části aplikace, verze: 7.2.1.
3) Vyhledávání konkrétního požadavku v Request Trackeru.
Str. 10
Produkty společnosti LMC, s.r.o. a jejich testování
3. Produkty společnosti LMC, s.r.o. a jejich testování Společnost LMC tedy rozvinula softwarovou aplikaci LMC G2. Jedná se o softwarovou aplikaci pro nábor zaměstnanců. Společnost LMC vyvinula a spouští systém automatického propojování nabídky a poptávky na trhu práce, doplněný o další funkce správy náborového procesu. Aplikace LMC G2 umožní personalistům odbourat velkou část rutinních úkonů spojených s náborem a věnovat se více vlastní odborné činnosti, uchazeči o zaměstnání se mohou místo nárazového hledání práce věnovat kontinuálnímu profesnímu rozvoji. Část aplikace zahrnuje databázi uchazečů o zaměstnání. Jejím klíčovým prvkem je osobní profil, který si vytváří a průběžně aktualizuje a ukládá do databáze sám návštěvník serveru. Údaje nemusí, pokud nechce, veřejně vystavovat. Pouze je zpřístupní personalistům či jen vyhledávacím „robotům“ v jejich službách. Díky filtrům aplikace mají zaměstnavatelé možnost porovnávat popis pracovní pozice, pro niž hledají vhodné kandidáty, s údaji v profilech registrovaných uchazečů. Propojování nabídky a poptávky probíhá skrytě a automaticky. Další část systému je správa náborového procesu. Obdržené životopisy umožní shromažďovat na jednom místě a třídit si je podle svých požadavků. Systém také nabízí možnost další komunikace s vybranými uchazeči. Díky LMC G2 je hledání zaměstnanců i práce mnohem méně pracné.
Str. 11
Produkty společnosti LMC, s.r.o. a jejich testování Schéma ukazující propojení aplikace pro tvorbu životopisů (uchazeče, hledající zaměstnání) s aplikací LMC G2, která umožňuje personalistům vystavovat pozice, pro které hledají vhodné kandidáty a dále umožňuje spravovat celý náborový proces do doby nástupu uchazeče. Obě dvě aplikace jsou dostupné z pracovních portálu Jobs.cz, Prace.cz a Topjobs.sk
V současné době společnost LMC nabízí dva druhy aplikace G2. LMC G2 Enterprise, která je orientována na firmy s rozsáhlou potřebou náboru. A aplikace LMC G2 Express, která je určena středním a menším firmám.
Str. 12
Produkty společnosti LMC, s.r.o. a jejich testování
3.1.
LMC G2 Enterprise:
Obsahuje tyto bezplatné moduly: Došlé reakce – personalisté zde mají k dispozici přehledný seznam všech uchazečů, kteří reagovali na pozici nebo k ní byli přiřazeni. Mohou s nimi provádět základní akce (komunikace, hodnocení, zamítnutí atd.). Prohledávání CV – v tomto modulu lze prohledávat databázi uchazečů, kteří zaregistrovali svůj životopis na stránkách Jobs.cz, Topjobs.sk nebo Prace.cz a přiřazovat je k pozicím. Šablony zpráv – personalista si zde vytvoří šablony pro firemní komunikaci s uchazeči. Např. šablonu pro zasílání zprávy uchazeči, pro zasílání souhlasu se zákonem č. 101 atd. A tyto placené moduly: Předvybraní uchazeči – navazuje na modul „Došlé reakce“ a navíc umožňuje zapsat interní poznámku k uchazeči, zadání výsledku interview (včetně slovního hodnocení kandidáta), změnu či potvrzení termínu pohovoru a nástupu. Liniový manažer – rozšiřuje funkcionalitu aplikace o možnost komunikace a sdílení dat o pracovních pozicích a uchazečích mezi personalistou a manažerem zodpovědným za příslušný nábor. Personální agentury (PA) – umožňuje komunikaci firmy s personálními agenturami při výběrovém řízení. Firma odesílá své pozice do vybraných PA, ze kterých pak přijímá vhodné uchazeče. Databáze uchazečů – přehledným způsobem archivuje všechny potenciálně zajímavé kandidáty, pro něž aktuálně není ve firmě uplatnění. S kandidáty lze udržovat pravidelný kontakt pomocí hromadných e-mailů. Historie aktivit – do této kategorie patří dva moduly: Historie pozic a Historie uchazečů. Díky nim získá uživatel kontrolu nad prací jednotlivých náborářů (popř. celého oddělení), respektive dokážete přesně monitorovat reakce konkrétního uchazeče a vývoj jeho vztahu s personalistou. SLA (Service level agrement) – jedná se o modul, který umožňuje komunikaci klienta se společností LMC. Pokud má klient nějaký problém, popřípadě je nespokojený s fungováním služby nebo s funkčností některé její části, vystaví přes tento modul požadavek, kterému je přiděleno specifické číslo a dostane se do interního komunikačního systému společnosti LMC, která garantuje řešení tohoto problému do čtyř hodin. Tímto požadavkem se zabývá oddělení Péče o zákazníka, popřípadě pokud se jedná o technický problém tak oddělení Péče o zákazníka postoupí tento požadavek Technickému supportnímu oddělení. Poté co společnost LMC vyřeší daný problém, přes interní systém odpoví na požadavek a tato odpověď se opět projeví v aplikaci LMC G2 v modulu SLA.
Str. 13
Produkty společnosti LMC, s.r.o. a jejich testování
3.1.1 LMC G2 Enterprise (aplikace se ovládá přes levé menu) Pohled na levé menu aplikace, kde jsou vidět všechny moduly, které má klient zakoupeny. Horní lišta slouží pro přepínání grafického vzhledu, aplikace má tři jazykové verze (Čeština, Slovenština a Angličtina). Uprostřed je tzv. titulní stránka aplikace, umožňuje rychlý přístup k nejčastěji využívaným akcím v aplikaci. Po pravé straně je vždy aktuální anketa, kterou můžeme nalézt i na pracovních portálech. Dále sekce O-zóna, která obsahuje rozhovor se zajímavou osobností.
Str. 14
Produkty společnosti LMC, s.r.o. a jejich testování
3.1.2 LMC G2 Enterprise (pohled do modulu: Aktivní pracovní pozice) Pohled do modulu v němž je možné vytvářet pracovní pozice. Personalista, který je přihlášen v pravém horním rohu (Eva Sellnerová, Testovací firma), zde vidí své aktivní pozice a služby, které má daná společnost předplaceny. V tomto pohledu má personalita možnost prodloužit platnost vystavené pozice, pozastavit pozici, archivovat pozici, editovat pozici, přiřadit nad pozici tzv. agenta, který bude prohledávat databázi životopisů a do pohledu došlé reakce zašle uchazeče, vhodné na tuto pozici.
Str. 15
Produkty společnosti LMC, s.r.o. a jejich testování
3.2.
LMC G2 Express: (určena pro menší společnosti, proto obsahuje také méně modulů)
Obsahuje tyto bezplatné moduly:
Došlé reakce Předvybraní uchazeči A tyto placené moduly:
Databáze uchazečů Personální agentury
3.2.1 LMC G2 Express (aplikace se ovládá opět přes levé menu) Grafické rozhraní je shodné s rozhraním LMC G2 Enterprise, pouze levé menu se liší počtem modulů, které má společnost zakoupeny.
Str. 16
Produkty společnosti LMC, s.r.o. a jejich testování
3.2.2 LMC G2 Express (pohled do modulu Aktuální nábory – Došlé reakce) Pohled do modulu v němž je možné pracovat s kandidáty, kteří reagovali na vystavené pozice, nebo na ně byli přiřazeni. Je možná komunikace s uchazečem, popřípadě zamítnutí uchazeče.
Str. 17
Produkty společnosti LMC, s.r.o. a jejich testování
3.3. Testování a testerské oddělení ve společnosti LMC s.r.o Společnost LMC v současné době zaměstnává přibližně 230 lidí. Společnost LMC se stále rozvíjí a expanduje na zahraniční trhy. Od září 2007 expandovala na Slovensko, spuštěním dvou nově vzniklých pracovních serverů pro Slovensko. Zaměstnavatelé, kteří využívají služeb aplikace LMC G2 nemusí samozřejmě vystavovat své inzeráty pouze na české internetové portály, mají možnost vystavit inzerát i na slovenské portály. A díky tomu že společnost LMC je poskytovatelem takzvaného ONREA Multipostingu, který umožňuje vystavit inzerát do dalších 8mi evropských zemí (Bulharsko, Rumunsko, Maďarsko, Polsko, Ukrajina - dva servery, Lotyšsko, Litva, Estonsko), mohou i české společnosti, hledat své zaměstnance na zahraničních trzích. Ve společnosti LMC pracuji na pozici testera softwarových aplikací, momentálně pracuji především na nejrozsáhlejší aplikaci, kterou LMC vlastní a tou je právě LMC G2. Testerské oddělení se od doby, kdy jsem nastoupila (1.8.2006) rozrostlo ze tří na deset lidí. Přibylo mnoho nových aplikací také dva již zmíněné slovenské webové portály, které společnost LMC vyvíjí a spravuje. Všechny aplikace je nutné každý den kontrolovat, testovat nově vytvořené aplikace i upgrady a updaty již existujících aplikací. Každý den se provádí takzvaná "kontrola pracovních portálů", při této kontrole se musí zkontrolovat všech pět pracovních serverů (velmi dopodrobna) jestli funguje každý odkaz. Dále se kontrolují interní nástroje, těch je dohromady osm. Jedna tato kontrola zabere přibližně 45 - 60 minut práce jednoho člena týmu. Kontroly probíhají v časech 7:00, 8:00, 9:00, 12:00, 15:00, 18:00, 21:00, tento systém zabírá velmi mnoho času a pohltí tak pracovní kapacitu jednoho člověka na téměř celý den. Dále se také provádí kontrola zákaznických designů (tím se rozumí kariérní stránky, které mimo jiné společnost LMC vytváří pro své klienty, těchto kariérních stránek spravuje LMC nyní přibližně 250 (např. gemoney.jobs.cz; kb.jobs.cz; cez.jobs.cz - právě část názvu jobs.cz určuje, že tyto kariérní stránky provozuje a spravuje společnost LMC, s. r. o.). Tato kontrola probíhá každý den v osm hodin ráno a je nutno zkontrolovat všech přibližně 250 kariérních sekcí, jestli všechny fungují tak, jak mají a nechybí na nich žádný obrázek. Celá tato kontrola trvá přibližně 1-2 hodiny denně. V průběhu dne jsou pak přibližně dva testeři alokováni na testovaní nově zadaných nebo změněných zákaznických designů (kariérní stránky). Otestovat celý zákaznický design (kariérní stránku) zabere přibližně hodinu a půl času práce testera. Jeden tester tak za den stihne otestovat přibližně pět zákaznických designů. Vzhledem k tomu, že si myslím, že některé činnosti, které provádíme každý den, by se daly zautomatizovat a ušetřit tak práci tří až čtyř lidí, kteří by se místo toho mohli věnovat práci na nově vyvíjených aplikacích, začala jsem se zajímat o automatizované testování programem, který se nazývá TestComplete. Ráda bych tedy psala svou bakalářskou práci o tom, jak by se prostřednictvím tohoto programu dala zautomatizovat běžná činnost testerů. Rozebrat otázku, proč si společnost LMC vybrala právě tento program z mnohých dalších možností. Co všechno při práci testera by se dalo zautomatizovat, zatím mě napadá automatizace kontroly pracovních portálů, kontrola zákaznických designů, automatizace takzvaných SmokeTestů (předem připravené a napsané scénáře, dle kterých se testuje základní funkčnost aplikace LMC G2, pokud se rozhodneme testovat dle těchto SmokeTestů, znamená to využít dva až tři testery na tento test denně). Popsat proč si společnost LMC vybrala právě tento program. Porovnání s jinými dostupnými programy na automatické testování (BadBoy, QuickTest Pro, QA Wizard, WinRunner, SilkTest, Test Partner, APP Perfect Test Studio 8.5.0). Jak probíhala implementace tohoto programu do pracovních postupů. Postupy jakým se provádí zápis do programu. Postupné určení toto co se má zautomatizovat. Problémy spojené s použitím TestCompletu. Omezení tohoto programu. Jak těžké je přizpůsobit automatizované testování změnám, které velmi často probíhají v aplikacích a na pracovních
Str. 18
Produkty společnosti LMC, s.r.o. a jejich testování portálech. Jestli se projekt podařil v takové míře, jak jsme očekávali. Jaký byl posun přibližně za půl roku, tedy za čas, který mám na dokončení své práce. Kolik lidské kapacity se tímto řešením ušetřilo. Ráda bych svou bakalářskou prací přispěla i společnosti LMC v lepším řízení a využití lidských zdrojů, především v testerském oddělení. Projekt prochází několika fázemi (odděleními) než se dostane do Testerského oddělení.
Zjednodušeně se dá říct, že produkt před vypuštěním na trh prochází několika fázemi. Kódování – testování – oprava, tento koloběh se může před konečným vypuštěním na trh i několikrát opakovat a většinou se to tak opravdu stává. Při každém testu se musí zkontrolovat ne jednou, ale opakovaně jestli chyby odhalené v předcházejících testech byly skutečně opraveny a jestli touto opravou nebyly do aplikace zavlečeny chyby další – toto je takzvané regresní testování. Konkrétně u aplikace LMC G2, pokud se k testu dodá nějaký nový upgrade aplikace, je nutné otestovat novou funkčnost, která byla přidána s tímto upgradem a samozřejmě také funkčnost stávající. Troufám si říct, že testování nového upgradu aplikace zabere přibližně měsíc práce šesti testerů. Bohužel je pravda, že testeři nejsou stroje a proto se velmi často stává, že pokud testujeme nějakou aplikaci a její funkčnost už poněkolikáté za sebou, nastává velká pravděpodobnost neodhalení nějaké chyby. Samozřejmě se tím snižuje kvalita práce testerského oddělení.
Str. 19
Automatizované testování
4. Automatizované testování Myslím, že také proto bylo vynaloženo mnoho úsilí, aby se vytvořily nástroje na automatizaci některých činností testera. Automatizované nástroje nemohou samozřejmě nahradit testera, ale mohou mu pomoci, aby odváděl práci snáze a kvalitněji. Konkrétně ve společnosti LMC, pokud se tester má soustředit na testování jemu přidělených okruhů a modulů v aplikaci LMC G2 nemělo by ho nic vyrušovat. Tzn. neměl by odbíhat od testování této aplikace k běžným rutinním úkolům, které jsou bohužel nezbytné. Mluvím o testování tzv. operativy a o kontrole pracovních portálů. Pod pojmem operativa se rozumí testování nově vzniklých problémů s aplikací LMC G2. Klient volá, že mu něco nefunguje a tester to samozřejmě musí ověřit, popřípadě musí určit, kde vznikl problém (například v minulosti se vyskytovaly problémy hlavně ve spojitosti s přechodem aplikace z http na https, dále pak jsou problémy s jednotlivými prohlížeči, velmi často se stává, že se aplikace chová jinak v různých prohlížečích, Mozila Firefox, Internet Explorer 6 a Internet Explorer 7, Opera, dále pak mohou mít samozřejmě zákazníci problém s funkčností některého modulu aplikace), do operativy také patří testování interních aplikací, které ovlivňují chod aplikace LMC G2. Jedná se například o tzv. Publisher, který ovlivňuje vystavování pozic, jak na produkční prostředí, tzn. na webové pracovní portály, které uživatel vidí na internetu, tak na testovacím prostředí. Toto testovací prostředí by měla vždy být kopie produkčního prostředí (kopírovaná například s měsíčním nebo dvouměsíčním zpožděním). Dále je pak další interní nástroj, který ovlivňuje reakce na vystavené pozice, které přijdou do aplikace LMC G2 do sekce Došlých reakcí. Tyto aplikace musí být vždy v naprostém pořádku, protože ovlivňují základní funkčnost LMC G2. Dále do operativy patří viz výše zmíněné testování zákaznických designů, kterých je denně přibližně sedm. Kontrola pracovních portálů je již také výše zmíněna, je to kontrola všech pracovních portálů, které společnost LMC vlastní (Jobs.cz, Prace.cz, Hotjobs.cz, Topjobs.sk, Live.topjobs.sk). Tyto kontroly probíhají v časových intervalech (7:00, 8:00, 9:00, 12:00, 15:00, 18:00, 21:00), dále pak v 8:00 probíhá kontrola všech kariérních sekcí, které společnost LMC spravuje. V první fázi jsem se pokusila zautomatizovat alespoň kontrolu všech pracovních portálů, aby testerovi odpadla nepříjemná rutinní práce, která denně zabere několik hodin. Z vlastní zkušenosti vím, že pokud testuji aplikaci LMC G2 a několikrát denně musím testování přerušit, abych zkontrolovala jestli správně fungují a běží všechny pracovní portály, je těžké se vrátit k tomu, kde jsem skončila a neudělat chybu, popřípadě něco nevynechat.
4.1.
Automatizované testování, jeho výhody a nevýhody.
Automatizované testování je zjednodušení práce testera, prostřednictvím napsání většinou jednoduchého skriptu pomocí nástroje na automatizaci. Tester si promyslí, co je potřeba zautomatizovat, jakým způsobem by se to dalo zapsat do programovacího jazyka a může začít psát svůj vlastní automatický skript. Automatizované testování by mu mělo pomoci s běžnou činností, například s opakovaným klikáním na určité položky.
4.1.1 Nejdůležitější a nejlepší vlastnosti testovacích nástrojů jsou: Rychlost – automatické nástroje mohou provádět testy, 10 krát i 100 krát rychleji než tester, například konkrétně u kontroly pracovního portálu Prace.cz, která se již podařila zautomatizovat, tento test zabere přibližně 3 minuty, tester tuto kontrolu vykoná za 45 minut.22 Efektivnost – během testování aplikace LMC G2 tester nemůže dělat mnoho jiných věcí, testování LMC G2 zabere velmi mnoho času, pokud ale využijeme testovací nástroj, který zkrátí čas testování Str. 20
Automatizované testování nezbytné operativní činnosti, měl by zbýt potřebný čas na testování LMC G2 a na promýšlení dalších testovacích postupů.22 Správnost a přesnost – po ručním testování několika desítek možná i stovek případů, se zákonitě oslabí pozornost testera a tester začne dělat ve své práci chyby, testovací nástroj zkontroluje výsledky vždy stejně a vždy naprosto dokonale, pokud je samozřejmě správně napsán.22 Neúnavnost – pokud je automatický nástroj spuštěn, tak nezná únavu, běží a běží.22
4.1.2 Některé nevýhody automatizovaného testování: Software se neustále mění, tzn. testovací skripty se musejí stále udržovat aktuální, což dá někdy opravdu velkou práci. Není to tak dávno co se to opravdu stalo, celý pracovní portál Jobs.cz se převlékl do nového kabátu. Sekce, které na něm byly se změnily, zrušily, posunuly například na jinou záložku. Texty v tzv. Poradně se aktualizovaly, každá ze sedmi záložek (Titulka, Můj Jobs, Nabídky práce, Brigády, Absolventi/Studenti, Poradna, Vstup pro firmy) na Jobs.cz se změnila od základů. A přesně tehdy nastal tento problém. Celý skript, který se předtím velmi dlouho pečlivě připravoval se vyhodil a nyní se musel udělat úplně nový. Stejně tak se stalo u pracovního portálu Prace.cz.23 Tester bohužel nemůže ovlivnit, kdy tyto designové a textové změny proběhnou, proto se velmi dlouho a důkladně zvažovalo jestli má vůbec cenu používat automatizované nástroje, jestli to ve finále nezabere mnohem větší čas na údržbu testovacích skriptů, aby byly stále aktuální. Po důkladném prozkoumání jsme dospěli k názoru, že má smysl automatizovat. Tyto designové změny se dějí v průběhu jedenkrát za rok.23 Další věc, která se nedá zautomatizovat, která souvisí z předchozím odstavcem je nemožnost zautomatizovat ověření správnosti designu. Pokud použiji automatizovaný skript na kontrolu pracovního portálu, tento skript samozřejmě neobjeví chybu, že je design posunutý, jiná barva, kus ho chybí, ověří samozřejmě pouze to, jestli jsou na něm jednotlivé prvky, které tam mají být, jestli odkazy vedou tam kam mají, jestli nechybí logo, jestli se dá odpovědět na vystavenou pozici, jestli se dá přihlásit do aplikace pro správu životopisu, jestli se z daného webového portálu dá přihlásit do aplikace LMC G2. Právě kvůli nemožnosti ověření vzhledu stránky se dělají tzv. printscreeny (vyfocení obrazovky), které pak tester musí vizuálně zkontrolovat.23 Automatizovaný software umí pouze to na co je napsaný, nikdy nemůže umět více. Pokud celý automatický test proběhl v pořádku, neznamená to, že celá aplikace popřípadě pracovní portál je v pořádku, znamená to pouze to, že při automatickém testu nebyla nalezena žádná chyba, neznamená to, že tam nikde není. Automatické testy, také připravuje tester, který může něco opomenout popřípadě může napsat test špatně. Neměli bychom se věnovat pouze práci s nástroji na automatizované testování, musíme u toho také manuálně testovat danou aplikaci, jinak bychom žádné chyby nenašli. Někdy se může stát, že nástroj najde nějakou chybu, tester než dojde k tomu, že tuto chybu ohlásí, musí zkusit manuální navození této chyby. Pokud se mu nepovede chybu znovu navodit ručně, není to chyba, protože s velkou pravděpodobností se to nepodaří ani uživateli. Někdy pokud automatizovaný skript, nalezne mnoho chyb, tester musí umět z tzv. logu (výsledky z automatizovaného testování) vyčíst, kde přesně je chyba a pokusit se jí znovu navodit ručně, což může být ve výsledku mnohem delší než samotná ruční kontrola webových portálů.
Str. 21
Výběr programu TestComplete
5. Výběr TestCompletu (srovnání s jinými nástroji Automatizovaného testování) Nástrojů na automatické (automatizované) testování je mnoho. Já jsem měla možnost posoudit pouze ty, ze kterých si společnost LMC vybírala. Z těchto nástrojů vyhrál TestComplete. Vybíralo se pouze z nástrojů, s nimiž měli moji kolegové a nadřízení zkušenost a dle těch, které byly pro společnost LMC dostupné. V přehledné tabulce jsou obsaženy informace, které se mi podařilo získat o jednotlivých nástrojích na automatizované testování. Informace jsem získávala od kolegů, kteří již měli s některými nástroji zkušenost, od svých nadřízených, dále také ze stránek výrobců automatizovaného nástroje.
Str. 22
Výběr programu TestComplete Tabulka: Porovnání nástrojů na automatizované testování. Název nástroje:
BadBoy
QuickTest Pro
QA Wizard
WinRunner
eTest
Mercury
Seapine
Mercury
Empirix
?
?
?
?
?
www.badboy.com.au
www.mercury.com
www.seapine.com
www.mercury.com
www.empirix.com
?
4500 EUR
3000 EUR
6500 EUR
?
Ne
Ano
Ano
Ano
Ne
Ano
Ano
Ano, ale je
Ano
Ano
Výrobce Zastoupení v České republice (Helpdesk) WWW odkaz Cena za licenci pro jednoho uživatele za rok Kontakt (Společnost LMC má/nemá kontakt) Trial Verze
potřeba kód. Poznámka
Nepodařilo se
Nepodporuje jiné
nahrát a spustit
prohlížeče než
ani nejjednodušší
Internet Explorer.
skript, podobnou zkušenost má kolega v Logosu, kterému nepomohli ani v Seapine.
Str. 23
Výběr programu TestComplete TestComplete Enterprise
SilkTest
Test Partner
AppPerfect Test Studio 8.5.0
AutomatedQA
Borland
Compuware
?
www.automatedqa.com/support/ -
pouze v zahraničí
?
?
www.automatedQA.com
www.borland.com
www.compuware.com/products/qacenter/enterprise.htm
?
Cena za licenci
1000 USD na jméno, float licence 3000
4250 USD
6700 EURO
495 USD na
pro jednoho
USD - jméno u name licence se změní
jeden
na žádost e-mailem do druhého dne
počítač
Název nástroje: Výrobce Zastoupení v České republice
support funguje především přes e-mail
(Helpdesk) WWW odkaz
uživatele za rok Kontakt
Ano
Ne
Ano
Ne
Ano - Trial na 30 dní, Trial verze
Ano
Ano, ale je třeba dohodnout se se zástupci Compuware.
Ano, 15 dnů
(Společnost LMC má/nemá kontakt) Trial Verze
obsahuje všechny funkce, které má registrovaná verze až na tyto omezení: Každý projekt nesmí obsahovat více než dva skripty, skript nesmí obsahovat více než 500 řádků. Celý projekt nesmí obsahovat více než 6 podprojektů. Poznámka
Doplňujícími produkty jsou TestExecute
Nepodařilo se
a TestRecorder
nahrát a spustit
Nepodporuje jiné
ani nejjednodušší
prohlížeče
skript.
než Internet Explorer
Str. 24
Výběr programu TestComplete Další tabulka představuje, co se od jednotlivých nástrojů očekává. S čím by měl být nástroj schopný pracovat. Na co ho chce společnost LMC využívat. Na těchto požadavcích na nástroj pro automatizaci se dohadovalo vedení v IT oddělení společnosti LMC, Team leader testerů a dva testeři senioři.
BadBoy
QuickTest Pro
QA Wizard
WinRunner
TestComplete Enterprise
SilkTest
Test Partner
eTest
Jobs.cz a LMC G2
Nástroj musí umět pracovat s popup okny.
ne
ano
ano
ano
ano
ano
ano
ano
G2 Registrace firmy
Nástroj musí umět získat seznam všech hodnot z comboboxu a poté provést tolik iterací testu, kolik je hodnot. Tyto hodnoty používá jako parametr iterace.
ne
ano
ano
ano
ano
ano
ano
ano
G2
Nástroj musí umožnit z databáze získat parametry pro test (SQL dotazem do databáze).
ano
ano
ano
ano
ano
ano
ne
Nástroj musí umět brát hodnoty z testdatasetu a používat je pro parametry testu (např. IČ, rodná čísla apod.).
ano
ano
ano
ano
ano
ano pouze z externího souboru (CSV, Excel, ...)
ano
ne
Nástroj musí umět v multiselectboxu vybrat více hodnot najednou.
ano
ano
ano
ano
ano
ano
ano
ano
G2 GIS
Jedním z parametrů v testdatasetu bude to, zda-li se jedná o kladný nebo záporný testscript (průchod). Nástroj musí umět porovnat tento parametr s výsledkem testu (zda-li kladný průchod dopadl kladně, záporný záporně)
ano
ano
ano
ano
ano
ano
ano
ano
Pracovní portály
Nástroj musí umět převzít od testované aplikace datum v textové podobě (kopírováním textu z webové stránky) a porovnat jej se systémovým datem. Zároveň by měl umožnit vyhodnotit, zda-li datum získané z aplikace není starší než půl hodiny nebo dva dny (příklady).
ano
ano
ano
ano
ano
ano
ano
ano
Pracovní portály
Nástroj musí umět zkontrolovat přítomnost konkrétních prvků na stránce (prvky mohou být prvky formuláře, texty apod.).
ano
ano
ano
ano
ano
ano
ano
ano
Pracovní portály
Nástroj musí umět spouštět testy v dávkách v předem definovaných časech.
ano
ne
ano
ano
ano
ano
ano
ano
G2 Registrace firmy G2 Registrace firmy
Str. 25
Výběr programu TestComplete
BadBoy
QuickTest Pro
QA Wizard
WinRunner
TestComplete Enterprise
SilkTest
Test Partner
eTest
LMC G2
Nástroj musí umět získat z webové stránky adresu určitého odkazu, tento odkaz parsovat a získat z něj hodnoty, které bude používat jako parametry dále v testu.
ne
ano
?
ne
ano
ano
?
ano
Jobs.cz
Nástroj musí umět dělat screenshoty (i rollout screenshoty) a ty ukládat v podobě souborů. Soubory by mělo být možné volitelně pojmenovat (např. "názevscriptu_čísloiterace").
ne
ano
ano
ano
ano
ano
ano
ne
Interní nástroje
Nástroj by měl umožňovat získat konkrétní text z webové stránky (text mezi "A" a "B"), tento text parsovat (např. oddělovačem ",") a zjistit na kolik dílu text rozdělil.
?
ano
?
ano
ano
ano
ano
ano
LMC G2
Nástroj by měl umět zjišťovat informace z hlavičky HTTP odpovědi (především zjistit status, např. 404 apod.).
?
ano
ano
ano
ano
?
ano
ano
Nástroj by měl mít možnost "nahrávání" testu a následně "programování" testu (případně pouze programování testu).
?
ano
ano
ano
ano
ano
ano
ano
Nástroj by měl umět testovat webovou aplikaci a když narazí na chybu, přepnout se do jiné webové aplikace a tam v ní něco provést (zareportovat chybu). A poté se vrátit zpátky do testované aplikace.
?
ano
ano
ano
ano
ano
ano
ano
G2 i Pracovní portály
Nástroj by mohl umět udělat restore databáze před zahájením testu.
?
ano
ano
ano
ano
ano
ano
ano
Pracovní portály
Nástroj by mohl umět zkontrolovat zarovnání prvků na stránce (otázkou zůstává, vůči čemu by se mělo zarovnání kontrolovat).
?
ano
ano
ano
ano
ano
ano
ne
* o produktu AppPerfect Test Studio 8.5.0 - jsem bohužel tyto informace nezískala
Str. 26
Výběr programu TestComplete Z těchto nástrojů si společnost LMC vybrala TestComplete, hlavně kvůli nejnižší ceně za licenci a také kvůli tomu, že dva testeři umí s tímto programem pracovat. I z druhé tabulky vyplývá, že TestComplete umí všechny požadované funkce, které byly určeny, že jsou důležité, aby je testovací nástroj zvládal. U některých programů se tyto informace bohužel nedaly vůbec získat.
Str. 27
Popis práce v programu TestComplete
6. Popis práce v programu TestComplete 6.1.
Začátek psaní automatického testu
Po dohodě ve společnosti LMC se měl nejdříve zautomatizovat nejdůležitější pracovní portál a tím je Jobs.cz, poté v následujícím pořadí Hotjobs.cz, Topjobs.sk, Live.topjobs.sk a jako poslední Prace.cz. Automatický test byl psán podle dokumentu, který určuje co vše se v rámci jedné kontroly pracovních portálů, má zkontrolovat. Dokument se interně nazývá TestCase pro kontrolu webů. Je zde přesně určeno kam tester při ručním testování má kliknout, co vše má zkontrolovat, na co si má dát pozor. V průběhu psaní automatických testů, bylo zjištěno, že kontrola je velmi dlouhá a proto se některé její části vypustily a vůbec nebyly automatizovány. Co je nutné vypustit rozhodli tři lidé, Team leader Technického supportního oddělení, Team leader testerů a já jako senior tester a také proto, že jsem původní dokument kontroly pracovních portálů vypracovala.
6.2.
Vytvoření nového projektu v programu TestComplete
Při vytváření nového projektu je možné si vybrat z mnoha šablon a také samozřejmě jazyk, ve kterém chci automatický test psát. Vždy jsem si vybrala šablonu s názvem All Items (obsahuje všechny dostupné projektové časti), dále pak jazyk, ve kterém jsem test psala. Vybrala jsem si DelphiScript, s jinými programovacími jazyky z nabídky nemám zkušenosti.
Str. 28
Popis práce v programu TestComplete
Poté následuje obrazovka, na které si vybírám, které objekty budu potřebovat pro svůj testovací skript.
Mohu samozřejmě nechat zaškrtlé všechny objekty, minimálně však musí vždy zůstat zaškrtlé Events a Script. ActiveX Objects – dobré pokud mám ve skriptu objekty typu ActiveX, které je potřeba kontrolovat. Events – tato složka musí být zaškrtlá vždy, pro přidávání jakýchkoli objektů do skriptu. HTTP Load Testing – tato složka zajistí výkonný zátěžový test webových serverů. Low-Level Procedures Collection – tato složka nahraje velmi detailně úkoly provedené myší a klávesnicí, kód, který bychom jinak nenapsali a ve stejné rychlosti ho dokáže znovu přehrát. Manual Test – přidá do skriptu objekty, které je třeba testovat ručně. Name Mapping – tento objekt dovolí namapovat dlouhý název objektu na krátký a dále pak můžeme pracovat s tím krátkým. Network Suite – umožňuje běh několika testů, ale na různých počítačích. ODT – (Object Driven Testing) – umožňuje vytvářet objekty ve struktuře, tyto objekty jsou na sobě závislé, přenos stejných vlastností. Script – potřebný pro psaní testovacích skriptů. Stores – úložiště, kde si mohu např. ukládat obrázky a poté je porovnávat s ostatními printscreeny. Unit Testing – testování jednotlivých funkcí nebo částí programu. User Forms – pro tvorbu vlastních formulářů. Win32 Tested Applications – potřebné pro nastavení aplikací, které tester testuje a po nastavení si je může jednoduše spouštět. Poté co si vyberu objekty, které budu potřebovat, kliknu na tlačítko Finish, program mi vytvoří prostor potřebný pro psaní skriptu pro automatizaci.
Str. 29
Popis práce v programu TestComplete
6.2.1 Popisy jednotlivých oken v TestCompletu Po vytvoření nového projektu, se mi otevře TestComplete se všemi svými možnostmi. Na obrázcích popíši alespoň základní okna programu a k čemu slouží. Záložka Code Explorer – na této záložce mohu vidět jednotlivé skripty, tyto skripty zde mohu také vytvářet, jsou zde jednotlivé procedury, mohu zde prohledávat celý kód a naleznu zde i přehled všech použitých funkcí.
Str. 30
Popis práce v programu TestComplete Záložka Project Explorer – na této záložce naleznu skripty, ale již bez funkcí, dále se zde nacházejí logy k jednotlivých skriptům, zde vidím všechny objekty, které jsem si na začátku navolila.
Záložka Object Browser a Project Workspace – na záložce Object Browser mohu nalézt informace o spuštěných procesech ve stromové struktuře, na pravé straně pak popis jejich vlastností. Project Workspace slouží k návratu na záložku Code Explorer nebo Project Explorer.
Str. 31
Popis práce v programu TestComplete
6.2.2 Popisy spodních záložek TestCompletu Záložka Bookmark – kamkoli do textu (kódu) si mohu přidat záložku pomocí klávesové zkratky ctrl + shift + 1, vyhledat samotnou záložku v textu mohu přes klávesovou zkratku ctrl + 1. Záložka Search/Replace results – přes klávesovou zkratku ctrt + f vyhledávám zadaný výraz ve zdrojovém kódu, pokud dám search all, výsledky se mi zapíší dolů na tuto záložku. Záložka Breakpoint – klikem na číslo u řádku v programu, mohu vložit tzv. breakpoint (pauzu), pokud spustím test, tak na tomto breakpointu se zastaví. Tato funkčnost je vhodná ke krokování programu. Na této záložce naleznu seznam všech breakpointů. Záložka Watchlist – přes tuto záložku mohu zjistit čemu se rovná daná proměnná při spuštěném běhu programu. Záložka Call Stack – tato záložka slouží jako zásobník volaných funkcí, vidím funkce, které jsem volala. Není to přímo historie. Do zásobníku se funkce vkládají a pokud z nich vyskočím tak ze zásobníku zase zmizí.
6.3.
Zápis do programu TestComplete
Zápis do programu TestComplete mohu provádět různými způsoby: Pokud alespoň trochu znám jazyk, který jsem si na začátku vybrala, pro psaní skriptu, není těžké vymyslet a zapsat do programu některé funkce, které mi umožní jednodušeji zkontrolovat daný pracovní portál dle předem připraveného TestCasu. Mám na mysli funkce jako: vyfiltruj z comboboxu nějaký údaj, udělej printscreen, porovnej s časovým údajem u vystavené pozice aktuální datum (zvláště důležité na hotjobs.cz a live.topjobs.sk, kde jsou nejaktuálnější pozice, zadané v rozmezí vystavení před deseti minutami až před třemi dny, starší pozice tam uživatel nedohledá). Pokud neznám ani jeden z programovacích jazyků, mohu prostřednictvím programu TestComplete nahrát jednoduchý sled kroků, jak postupuji v rámci kontroly na pracovním portálu. Zjednodušeně, otevřu si stránku s pracovním portálem např. www.jobs.cz, spustím, přes ikonu v programu TestComplete, nahrávání. Program již sám snímá sled mých kroků a poté co nahrávání ukončím převede je do jazyku, který jsem si na začátku vybrala. Přes ikonu červeného kolečka, spustím nahrávání.
Str. 32
Automatizace pracovních portálů
7. Implementace programu TestComplete do automatizace pracovních portálů 7.1.
Automatizovaný test pro pracovní portál Jobs.cz
Vzhledem k tomu, že portál Jobs.cz je považován za nejdůležitější z pěti pracovních portálů, které společnost LMC vlastní, bylo rozhodnuto, že se začne automatizovat jako první. Takto bylo rozhodnuto dle Team leadera testerů a jeho nadřízených. Dle dokumentu, který se nazývá TestCase pro kontrolu pracovních portálů, bylo rozhodnuto co vše se na Jobs.cz zautomatizuje. Vlastně všechny činnosti, které dělá tester při kontrole pracovního portálu Jobs.cz. Na tabulce je vidět původní popis kontroly pracovního portálu Jobs.cz, která se ale v průběhu automatizovaného testování změnila. Bohužel v průběhu se zjistilo, že test by byl příliš dlouhý a nestačil by se spouštět v takových intervalech jak společnost LMC potřebuje a proto byl zkrácen. Nicméně tabulka pro kontrolu pracovních portálů zůstala stejná a nezkrátila se.
V přehledné tabulce jsem uvedla postup kroků, kam tester kliká a očekávaný výsledek.
Str. 33
Automatizace pracovních portálů
7.1.1 Popis kontroly pracovního portálu Jobs.cz (step by step) Krok
Popis činnosti Klik na rychlé hledání, provést výběr -
1 2
Klik na Odpovědět
Přijede odpovědní formulář
Klik na záložku "Nabídky práce"
Zobrazí se záložka "Nabídka práce"
Klik na "Rozšířené hledání" 5
Zobrazí se záložka "Rozšířené hledání"
Výběr: obor, profese, lokalita Klik na logo Jobs vlevo nahoře
7 8
Otevře se pozice s jejím popisem
4
6
Zobrazí se výběr pozic dle volby
lokalita, obor (náhodně) Klik na jednu pozici z výběru
3
Očekávaný výsledek
Zobrazí se výběr dle volby Zobrazí se titulní stránka Jobs.cz
Klik uprostřed na "Žhavé nabídky"
Zobrazí se www.hotjobs.cz
Klik na zpět v prohlížeči
Zobrazí se titulní stránka
9
Jobs.cz Klik na záložku "Brigády"
10
Zobrazí se formulář pro hledání brigád
11
Výběr: lokalita, okres, obor
Zobrazí se výběr dle volby
12
Klik na brigádu ze seznamu
Zobrazí se popis brigády
13
Klik na Odpovědět
Přijede odpovědní formulář
Klik na logo Jobs vlevo nahoře
Zobrazí se titulní stránka
14
Jobs.cz Klik na záložku "Nabídky práce"
15
práce" Klik na nabídky práce "Dle firem"
16 17
Zobrazí se záložka "Nabídka Zobrazí se hledání pozic dle firem
Výběr jednoho písmene, výběr jedné
Zobrazí se výpis pozic zadané
společnosti pod písmenem
firmy
Klik na logo Jobs vlevo nahoře
Zobrazí se titulní stránka
18
Jobs.cz Klik na záložku "Absolventi/Studenti"
Zobrazí se platný odkaz, zobrazují se pozice, platy, šipky
19
a aktivní mapa Klik na logo Jobs vlevo nahoře
20
Zobrazí se titulní stránka Jobs.cz
Klik na záložku "Vstup pro firmy"
Zobrazí se stránka "Vstup společnosti do systému"
21
(přihlášení do aplikace LMC G2) Klik na "Přihlášení společnosti do
22
Zobrazí se přihlašovací okno
systému LMC"
Str. 34
Automatizace pracovních portálů
Krok
Popis činnosti Zvol: Počet let praxe = 0, Minimální
Dojde k výpisu CV, které mají
požadované vzdělání = základní; Klik
dnešní datum (kontrola jestli
na "Vyhledat"
jsou v databázi životopisů
23 24
aktuální data) Klik na "Odhlásit"
Zavře se prohlížeč
Klik na logo Jobs vlevo nahoře
Zobrazí se titulní stránka
25 26
Jobs.cz Klik na záložku "Můj Jobs"
Zobrazí se záložka "Můj Jobs"
Přihlásit se, přihlašovací jméno a heslo
Zobrazí se titulní stránka
*)
aplikace pro správu životopisu,
27
k němuž uživatel přihlášen Klik na logo Jobs vlevo nahoře
28 29
Uživatel zůstane na titulní straně "Přihlášen"
Klik do levého sloupce "Spojte se s
Otevře se kariérní sekce vybrané
Elitou", klik na náhodnou společnost
společnosti např. kb.jobs.cz
Klik na zpět v prohlížeči
Zobrazí se titulní stránka
30
Jobs.cz Klik na rychlé hledání, provést výběr -
31
Očekávaný výsledek
Zobrazí se výběr pozic dle volby
lokalita, obor (náhodně) Klik na jednu pozici z výběru
32
Otevře se pozice s jejím popisem
Klik na Odpovědět
Přijede odpovědní formulář s předvyplněnými údaji uživatele,
33
který je přihlášen Klik na logo Jobs vlevo nahoře
34 35
Jobs.cz Klik na "O-zóna"
Zobrazí se seznam diskuzí
Klik na logo Jobs vlevo nahoře
Zobrazí se titulní stránka
36
Jobs.cz Klik na "Poradna"
37
Zobrazí se titulní stránka Profesní poradny
Klik na logo Jobs vlevo nahoře 38 39
Zobrazí se titulní stránka
Zobrazí se titulní stránka Jobs.cz
Klik na libovolnou odpověď v "Anketa"
Anketa přestane být aktivní
*) Údaje takto označené nebudu s ohledem na společnost LMC zveřejňovat.
Tato tabulka tedy stanovila, co vše se má zapsat do programu TestComplete. Začal tedy proces implementace do programu TestComplete.
Str. 35
Automatizace pracovních portálů
7.1.2 Postup automatizace Jobs.cz S nastavením programu, jsem si ze začátku nebyla úplně jistá, proto jsem si nechala poradit od svých zkušenějších kolegů. Nejdříve jsem si vytvořila nový projekt Jobs.cz, který obsahovat skript se třemi dalšími složkami: Složka Main – obsahuje informace o tom, jak se mají zapisovat (logovat) výsledky do nějakého výstupu (logu). V tomto případě na disk C, kam mají přístup všichni testeři, kteří pak následně budou výsledky TestCompletu kontrolovat. Příklad velmi snadno pochopitelného zdrojového kódu, který obsahuje složka Main (i s poznámkami). uses Test, Jobs; procedure Main; begin try toLog('----------------------------------'); toLog('Zacatek testu'); toLog('----------------------------------'); //////////////// spouštěné testy /////////////// JobsTest; //////////////////////////////////////////////// toLog('----------------------------------'); toLog('Konec testu'); toLog('----------------------------------'); except log.error('Exception', ExceptionMessage) end; SaveResults('c:\TC\ResultLog\', 'Jobs.mht'); //ulož na disk C: end;
Složka Jobs – druhou složkou je samotný skript (přejmenovaný na Jobs), a v něm přesně popsaný postup, co má TestComplete udělat. Začíná tím, že se má použít test, ve kterém jsou popsány některé funkce, důležité pro tento pracovní portál. V kódu mám i poznámky, co je potřeba dodělat, s některými funkcemi jsem si prozatím nevěděla rady. Například jak nastavit náhodný výběr lokality a pracovního oboru. uses Test; //Test Jobs.cz – zápis kontroly pracovního portálu do logu procedure JobsTest; var sTestName : String; begin try sTestName := 'Jobs.cz'; toLog('=========================='); toLog('Test ' + sTestName + ' zahajen'); toLog('=========================='); ////////////////////////// test ////////////////////////// //spuštění IE, nastavení proměnných, otevření URL jobs.cz ToLog('4 - Jobs.cz'); IEToURL('http://jobs.cz'); //Klikni na záložku Nabídky práce ToLog('4.1 - Klikni na Nabidky prace');
Str. 36
Automatizace pracovních portálů
ClickLinkByText(WebPage.item('BODY'), 'Nabídky práce'); //Klikni na Rychlé hledání na záložce “Nabídky práce” proveď výběr (lokalita, obor) //dodělat náhodné nastavení položky z daného seznamu, zatím nastaveno takto ToLog('4.2 - Rychle hledani a proved výběr lokalita, obor'); SetListBox(WebPage.Item('branchList'), 'Nákup'); //obor SetComboBox(WebPage.Item('local'), 'Liberecký'); //lokalita ClickTo(WebPage.Item('submit2')); //Hledej //Klikni na první pozici z výběru, který přijede ToLog('4.3 - Klikni na pozici z vyberu'); ClickFirstLinkOnNewPageCheckText(WebPage.Item('71')); ScreenShot('Detail pozice'); //ClickRandomLink(WebPage.Item('71')); //dodělat přeskakování po X odkazech //klik na Odpovědět na detailu otevřené pozice ToLog('4.4 - Klikni na Odpovedet'); ClickToReply(); ScreenShot('Odpovedni formular'); //Klikni na záložku Nabídky práce ToLog('4.5 - Klikni na Nabidky prace'); IEToURL('http://jobs.cz'); ClickLinkByText(WebPage.item('BODY'), 'Nabídky práce'); //Klikni na záložku Brigády ToLog('4.6 - Klikni na Brigady'); ClickLinkByText(WebPage.item('BODY'), 'Brigády'); ScreenShot('Brigady'); //Proveď ve vyhledávacím formuláři výběr lokalita, okres, obor ToLog('4.7 - Proved výber lokalita, okres, obor'); //dodělat nahodné nastavení položky z daného seznamu SetComboBox(WebPage.Item('locality'), 'Liberecký'); //kraj //SetComboBox(WebPage.Item('district'), 'Liberec'); //okres SetListBox(WebPage.Item('branch'), 'Administrativa'); //obor ClickTo(WebPage.Item(201)); //Hledej //Klikni na první pozici z výběru, který přijede ToLog('4.8 - Vyber brigadu ze seznamu - klik na prvni'); ClickFirstLinkOnNewPageCheckText(WebPage.Item('63')); ScreenShot('Detail pozice'); //ClickRandomLink(WebPage.Item('71')); //dodělat přeskakováni po X odkazech //klik na Odpovědět, na detailu otevřené brigády ToLog('4.9 - Klikni na Odpovedet pouze u brigad zdarma (modre) - nevime jestli je modra'); ClickToReply(); ScreenShot('Odpovedni formular'); //Klikni na logo Jobs.cz vlevo nahoře ToLog('4.10 - Klikni na www.jobs.cz na strance vlevo nahore'); //ClickTo(WebPage.item('18')); IEToURL('http://jobs.cz'); //Klikni na záložku Nabídky práce ToLog('4.11 - Klikni na Nabidky prace');
Str. 37
Automatizace pracovních portálů ClickLinkByText(WebPage.item('BODY'), 'Nabídky práce');
//klikni na záložce Nabídky práce na vyhledávání Dle firem ToLog('4.12 - Klikni na Nabidky prace Dle firem'); ClickLinkByText(WebPage.item('BODY'), 'Dle firem'); //klik na nahodné začáteční písmeno, ve výběru firem ToLog('4.13 - Proved vyber dle pismen'); ClickRandomLink(WebPage.Item(665)); ScreenShot('Vypis dle firem'); //klik na náhodnou firmu, už vybráno dle začátečního písmena ClickRandomLink(WebPage.Item(56)); ScreenShot('Pozice nahodne vybrane firmy'); //Přechod na titulní stranu - nelze klikat na logo Jobs.cz vlevo nahoře, pozice může být v designu např.(accenture.jobs.cz), tzn. nemá logo Jobs ToLog('4.14 - Klikni na www.jobs.cz na strance vlevo nahore - prechod na titulku'); IEToURL('http://jobs.cz'); //Klikni na záložku Absolventi / Studenti ToLog('4.15 - Klikni na Absolvetni/studenti'); ClickLinkByText(WebPage.item('BODY'), 'Absolventi / Studenti'); ScreenShot('Absolventi / Studenti'); //Klikni na logo Jobs.cz vlevo nahoře – přechod na titulní stránku ToLog('4.15 - Klikni na www.jobs.cz na strance vlevo nahore'); ClickTo(WebPage.Item('23'));
//Zavře IE CloseIEWindow(); ///////////////////////////////////////////////////////////////// /// zapiš konec automatického testu do logu except Log.Error('Exception', ExceptionMessage) end; toLog('=========================='); toLog('Test ' + sTestName + ' dokoncen'); toLog('=========================='); end;
Třetí složka je Test – tato složka je obsažena v u každého projektu, je to menší knihovna funkcí, které se na pracovních portálech využívají. Některé funkce byly tvořeny dle nápovědy, některé dle rady zkušenějších. Uvedeno v přílohách – Knihovna funkcí.
Str. 38
Automatizace pracovních portálů
7.2.
Automatizovaný test pro pracovní portál Hotjobs.cz
Dalším pracovním portálem, který se měl zautomatizoval byl Hotjobs.cz. Pracovní portál, který obsahuje nabídky, za poslední tři dny. Tedy musí obsahovat nejaktuálnější nabídky práce. Také jako Jobs, má prostor pro reklamní bannery nebo loga společností, které na pracovních portálech inzerují. Všechny tyto reklamní záležitosti, jsou samozřejmě placené, proto se klade velký důraz na to, aby fungovaly. Opět se dle tabulky pro kontrolu pracovních portálů, rozhodlo co vše se má programem TestComplete zautomatizovat. Testovací skript byl v průběhu jeho tvorby také zkrácen.
7.2.1 Popis kontroly pracovního portálu Hotjobs.cz (step by step) Krok
Popis činnosti Ve filtru vyber "všechny firmy" a kontrola času
Očekávaný výsledek Všední den, nesmí být starší než 30 minut
1
nejaktuálnější pozice
2
Klik na banner "Společnost týdne"
Otevře se v novém okně, odkaz je platný
3
Zavřít okno, otevřené předchozí akcí
Okno zavřeno
4
Klik na náhodnou pozici z "Nabídka týdne"
Otevře se pozice s jejím popisem
5
Klik na zpět v prohlížeči
Zobrazí se titulní strana Hotjobs.cz
6
Klik na náhodnou pozici z "Nabídka týdne"
Otevře se pozice s jejím popisem
7
Klik na zpět v prohlížeči
Zobrazí se titulní strana Hotjobs.cz
8
Klik na "Doporučujeme"
Zobrazí se loga společností
Klik na náhodně vybrané logo
Zobrazí se stránka v designu vybrané
9
společnosti
10
Znovu do prohlížeče zadat www.hotjobs.cz
Zobrazí se titulní strana Hotjobs.cz
11
Klik znovu na "Doporučujeme"
Zobrazí se loga společností
Klik na náhodně vybrané logo
Zobrazí se stránka v designu vybrané
12 13
společnosti Znovu do prohlížeče zadat www.hotjobs.cz
Zobrazí se titulní strana Hotjobs.cz
Klik na náhodně vybranou společnost pod
Zobrazí se stránka v designu vybrané
14
tlačítkem "vyberte si"
společnosti
15
Klik na zpět v prohlížeči
Zobrazí se titulní strana Hotjobs.cz
Klik opět na náhodně vybranou společnost pod
Zobrazí se stránka v designu vybrané
16
tlačítkem "vyberte si"
společnosti
17
Klik na zpět v prohlížeči
Zobrazí se titulní strana Hotjobs.cz
18
Klik na vystavenou pozici
Otevře se pozice s jejím popisem
19
Znovu do prohlížeče zadat www.hotjobs.cz
Zobrazí se titulní strana Hotjobs.cz
20
Klik opět na vystavenou pozici
Otevře se pozice s jejím popisem
21
Znovu do prohlížeče zadat www.hotjobs.cz
Zobrazí se titulní strana Hotjobs.cz
22
Klik na "dalších 40 pozic"
Zobrazí se dalších 40 pozic
Proveď náhodný výběr pozic s nastavením
Zobrazení výběru odpovídá nastaveným
všech čtyř comboboxů
filtrům
23
Str. 39
Automatizace pracovních portálů
7.2.2 Postup automatizace Hotjobs.cz Tabulka poskytla základ, co se má zapsat do programu TestComplete. Projekt opět obsahuje tři složky: Main, skript přejmenovaný na Hotjobs.cz a Knihovnu funkcí. Složka Main je vždy stejná, protože výsledek automatizovaného testu, všech pracovních portálů se vždy zapisuje stejně, pouze pod jiným názvem. Má to dvě poměrně podstatné výhody. Zápis do výsledného logu je přehledný a tester, který potom výsledný zápis kontroluje se v něm mnohem lépe zorientuje a vyzná. Na začátku je opět řečeno, že se má použít skript Hotjobs a využít knihovna funkcí Test. Dále jsou opět informace o tom, jak a kam se má výsledek testu zapsat. uses Test, HotJobs; procedure Main; begin try ToLog('----------------------------------'); ToLog('Zacatek testu'); ToLog('----------------------------------'); //////////////// spouštěné testy /////////////// HotJobsTest; //////////////////////////////////////////////// ToLog('----------------------------------'); ToLog('Konec testu'); ToLog('----------------------------------'); except Log.Error('Exception', ExceptionMessage) end; SaveResults('c:\TC\ResultLog\', 'HotJobs.mht'); end;
Složka Hotjobs – opět skript, v němž je popsaná celá automatizace pracovního portálu Hotjobs.cz, s využitím knihovny funkcí. Zde jsem potřebovala poradit hlavně s funkcí pro kontrolu banneru „Společnost týdne“, někdy se totiž, po kliknutí na tento banner, reklama „Společnost týdne“ otevírá v novém okně. uses Test; //Test HotJobs.cz - zápis kontroly pracovního portálu do logu procedure HotJobsTest; var sTestName : String; begin try sTestName := 'HotJobs.cz'; ToLog('=========================='); ToLog('Test ' + sTestName + ' zahajen'); ToLog('=========================='); ////////////////////////// test ////////////////////////////////// //spuštění IE, nastavení proměnných, otevření URL hotjobs.cz ToLog('2 - Hotjobs.cz'); IEToUrl('http://hotjobs.cz'); //nastavení comboboxu třetího filtru na “všechny firmy” – tzn. bude zohledňovat i pracovní pozice od personálních agentur ToLog('2.1 - Ve filtru vyber vsechny firmy a zkontroluj
Str. 40
Automatizace pracovních portálů
nejaktualnejsi pozice'); SetComboBox(WebPage.Item('agent'), 'vsechny firmy'); ClickTo(WebPage.Item(190)); // Vybrat //kontrola, že čas vystavené pozice není starší než 30 minut ScreenShot('Stari pozic'); CheckLimit30min(WebPage.Item('212')); //klik vlevo nahoře na banner společnost týdne (pozor někdy se otevírá v novém okně) ToLog('2.2 - Klikni na banner Spolecnost tydne'); ClickTo(IEPageObj.Page('*').document.frames.frame('bm2BBMEDIA_457_1_2_64'). document.all.Item(8)); //když se společnost týdne otevře v novém okně, pak se udělá printscreen a okno se zavře, jinak udělá jen printscreen if existIEwindow(2) then begin InitIEWindow(1); //nastaví glob. proměnné na otevřené okno ScreenShot('Spolecnost tydne'); //printscreen na novém okně ToLog('2.3 - Zavri okno otevrené po predchozí akci'); CloseIEWindow(1); //zavře nové okno InitIEWindow(1); // inicializace původního okna end else begin ScreenShot('Spolecnost tydne'); ToLog('3.3 - Spolecnost tydne se otevrela v puvodnim okne IE',nil,'W'); end; //Zpět IEToUrl('http://hotjobs.cz'); //Kontrola zda jsou pozice v sekci „nabídka týdne“, tato sekce má dvě části, jednu dole a druhou nahoře ToLog('2.4 - Kontrola pouze jestli jsou pozice v sekci nabidka tydne neklika'); TextInObject(WebPage.Item('nabidky_tydne')); //horní pozice // dolní pozice se střídají, stále se mění název - nejde kontrolovat!!! //Klikni na první pozici na hotjobs.cz a udělej printscreen, nemá smysl klikat na Odpovědět – pozice jsou většinou v designu např. kb.jobs.cz ToLog('2.5 - Klikni na první vystavenou pozici na Hotjobs.cz'); ClickFirstLinkOnNewPageCheckText(WebPage.Item(201)); ScreenShot('Otevrena pozice'); IEToUrl('http://hotjobs.cz'); //Zavře Internet Explorer CloseIEWindow(); //zapiš do logu konec testu hotjobs.cz except Log.Error('Exception', ExceptionMessage) end; ToLog('=========================='); ToLog('Test ' + sTestName + ' dokoncen'); ToLog('=========================='); end;
A opět složka Test, která vždy obsahuje tu samou knihovnu funkcí. Viz příloha. Str. 41
Automatizace pracovních portálů
7.3.
Automatizovaný test pro pracovní portál Topjobs.sk
Dalším zautomatizovaným pracovním portálem byl slovenský portál Topjobs.sk, který byl spuštěn v září letošního roku. Dalo by se říci, že tento pracovní portál je kopií českého portálu Jobs.cz. Design byl navržen stejně, mezi těmito portály je jen málo zanedbatelných nesrovnalostí. Samozřejmě Slovenština a dále například na Topjobs.sk chybí mzdové kalkulačky, které jsou na Jobs.cz. Proto je i tabulka pro kontrolu pracovního portálu Topjobs.sk shodná s Jobs.cz. V průběhu psaní automatického testu byla také zkrácena na nejnutnější minimum.
Str. 42
Automatizace pracovních portálů
7.3.1 Popis kontroly pracovního portálu Topjobs.sk (step by step)
Krok
Popis činnosti Klik na rychlé hledání, provést výběr -
Očekávaný výsledek Zobrazí se výběr pozic dle volby
1
lokalita, obor (náhodně)
2
Klik na jednu pozici z výběru
Otevře se pozice s jejím popisem
3
Klik na Odpovědět
Přijede odpovědní formulář
4
Klik na záložku "Nabídky práce"
Zobrazí se záložka "Nabídka práce"
5
Klik na "Rozšířené hledání"
Zobrazí se záložka "Rozšířené hledání"
6
Výběr: obor, profese, lokalita
Zobrazí se výběr dle volby
7
Klik na logo Topjobs vlevo nahoře
Zobrazí se titulní stránka Topjobs.sk
8
Klik uprostřed na "Žhavé nabídky"
Zobrazí se www.live.topjobs.sk
9
Klik na zpět v prohlížeči
Zobrazí se titulní stránka Topjobs
10
Klik na záložku "Brigády"
Zobrazí se formulář pro hledání brigád
11
Výběr: lokalita, okres, obor
Zobrazí se výběr dle volby
12
Klik na brigádu ze seznamu
Zobrazí se popis brigády
13
Klik na Odpovědět
Přijede odpovědní formulář
14
Klik na logo Topjobs vlevo nahoře
Zobrazí se titulní stránka Topjobs
15
Klik na záložku "Nabídky práce"
Zobrazí se záložka "Nabídka práce"
16
Klik na nabídky práce "Dle firem"
Zobrazí se hledání pozic dle firem
Výběr jednoho písmene, výběr jedné
Zobrazí se výpis pozic zadané firmy
17
společnosti pod písmenem
18
Klik na logo Topjobs vlevo nahoře
Zobrazí se titulní stránka Topjobs
Klik na záložku "Absolventi/Studenti"
Zobrazí se platný odkaz, zobrazují se pozice,
19 20
platy, šipky a aktivní mapa Klik na logo Topjobs vlevo nahoře
Zobrazí se titulní stránka Topjobs
Klik na záložku "Vstup pro firmy"
Zobrazí se stránka "vstup společnosti do
21
systému" (přihlášení do aplikace LMC G2) Klik na "Přihlášení společnosti do systému
Zobrazí se přihlašovací okno
22
LMC"
23
Přihlásit se, přihlašovací jméno a heslo *)
Úspěšné přihlášení do aplikace
Na titulní straně aplikace zvolit "Prohledávejte
Zobrazí se stránka pro zadávání vyhledávacích
CV"
parametrů
Zvol: Počet let praxe = 0, Minimální
Dojde k výpisu CV, které mají dnešní datum
požadované vzdělání = základní; Klik na
(kontrola jestli jsou v databázi životopisů
25
"Vyhledat"
aktuální data)
26
Klik na "Odhlásit"
Zavře se prohlížeč
27
Klik na logo Topjobs vlevo nahoře
Zobrazí se titulní stránka Topjobs
28
Klik na záložku "Můj Topjobs"
Zobrazí se záložka "Můj Topjobs"
Přihlásit se, přihlašovací jméno a heslo *)
Zobrazí se titulní stránka aplikace pro správu
24
29
životopisu, k němuž je uživatel přihlášen
Str. 43
Automatizace pracovních portálů
Krok 30
Popis činnosti
Očekávaný výsledek
Klik na zpět v prohlížeči
Zobrazí se titulní stránka Topjobs
Klik na rychlé hledání, provést výběr- lokalita,
Zobrazí se výběr pozic dle volby
31
obor (náhodně)
32
Klik na jednu pozici z výběru
Otevře se pozice s jejím popisem
Klik na Odpovědět
Přijede odpovědní formulář s předvyplněnými
33
údaji uživatele, který je přihlášen
34
Klik na logo Topjobs vlevo nahoře
Zobrazí se titulní stránka Topjobs
35
Klik na "O-zóna"
Zobrazí se seznam diskuzí
36
Klik na logo Topjobs vlevo nahoře
Zobrazí se titulní stránka Topjobs
37
Klik na "Poradna"
Zobrazí se titulní stránka Profesní poradny
38
Klik na logo Topjobs vlevo nahoře
Zobrazí se titulní stránka Topjobs
39
Klik na libovolnou odpověď v "Anketa"
Anketa přestane být aktivní
*) Údaje takto označené nebudu s ohledem na společnost LMC zveřejňovat.
7.3.2 Postup automatizace Topjobs.sk Složka Main – je jako vždy stejná, výsledek se pouze zapíše pod jiné jméno. uses Test, TopJobs; procedure Main; begin try ToLog('----------------------------------'); ToLog('Zacatek testu'); ToLog('----------------------------------'); //////////////// spouštěné testy /////////////// TopJobsTest; //////////////////////////////////////////////// ToLog('----------------------------------'); ToLog('Konec testu'); ToLog('----------------------------------'); except Log.Error('Exception', ExceptionMessage) end; SaveResults('c:\TC\ResultLog\', 'TopJobs.mht'); end;
Složka Topjobs.sk – opět využívá knihovnu funkcí. Dá se říct, že i toto je kopie zautomatizovaného skriptu pro pracovní portál Jobs.cz, názvy musí být samozřejmě ve Slovenštině. uses Test; //Test TopJobs.sk - zápis kontroly pracovního portálu do logu procedure TopJobsTest; var sTestName : String; begin try sTestName := 'TopJobs.sk'; toLog('==========================');
Str. 44
Automatizace pracovních portálů toLog('Test ' + sTestName + ' zahajen'); toLog('=========================='); ////////////////////////// test ////////////////////////////////// //spuštění IE, nastavení proměnných, otevření URL topjobs.sk ToLog('5 - TopJobs.sk'); IEToURL('http://topjobs.sk'); //Klikni na Rychlé hledání na záložce “Nabídky práce” proveď výběr (lokalita, obor) ToLog('5.1 - Klikni na Nabidky prace'); ClickLinkByText(WebPage.item('BODY'), 'Ponuky práce'); //Proveď na kartě Rychlé hledání výber (lokalita, obor) //dodělat náhodné nastavení položky z daného seznamu ToLog('5.2 - Rychle hledani a proved vyber lokalita, obor'); SetListBox(WebPage.Item('branchList'), 'Nákup'); //obor SetComboBox(WebPage.Item('local'), 'Bratislava'); //lokalita ClickTo(WebPage.Item('submit2')); //Hledej //Klikni na první pozici z výběru, který přijede ToLog('5.3 - Klikni na pozici z vyberu'); ClickFirstLinkOnNewPageCheckText(WebPage.Item('71')); ScreenShot('Detail pozice'); //ClickRandomLink(WebPage.Item('71')); //dodělat přeskakování po X odkazech odkazech //klik na Odpovědět, na detailu rozkliknuté pracovní pozice ToLog('5.4 - Klikni na Odpovedet'); ClickToReply(); ScreenShot('Odpovedni formular'); //Klikni opět na záložku Nabidky prace ToLog('5.5 - Prechod na titulku a klikni na Nabidky prace'); IEToURL('http://topjobs.sk'); ClickLinkByText(WebPage.item('BODY'), 'Ponuky práce'); //Klikni na záložku Brigády ToLog('5.6 - Klikni na Brigady'); ClickLinkByText(WebPage.item('BODY'), 'Brigády'); ScreenShot('Brigady'); //Na záložce Brigády proveď výběr ve filtru(lokalita, okres, obor) ToLog('5.7 - Proved vyber lokalita, okres, obor'); //dodělat náhodné nastavení položky z daného seznamu SetComboBox(WebPage.Item('locality'), 'Bratislavský kraj'); //kraj //SetComboBox(WebPage.Item('district'), 'Liberec'); //okres SetListBox(WebPage.Item('branch'), 'Administratíva'); //obor ClickTo(WebPage.Item(178)); //Hledej //Klikni na první pozici z výběru brigád, který přijede ToLog('5.8 - Vyber brigádu ze seznamu - klik na prvni'); ClickFirstLinkOnNewPageCheckText(WebPage.Item('63')); ScreenShot('Detail pozice'); //ClickRandomLink(WebPage.Item('71')); //dodělat přeskakování po X odkazech //klik na Odpovědět na detailu brigády ToLog('5.9 - Klikni na Odpovedet pouze u brigad zdarma (modre) - nevime jestli je modra'); ClickToReply();
Str. 45
Automatizace pracovních portálů
ScreenShot('Odpovedni formular'); //Klikni na logo Topjobs.sk vlevo nahoře – pro návrat na titulní stranu ToLog('5.10 - Klikni na TopJobs.sk na strance vlevo nahore'); //ClickTo(WebPage.item('26')); IEToURL('http://topjobs.sk'); //Klikni na záložku Nabidky prace ToLog('5.11 - Klikni na Nabidky prace'); ClickLinkByText(WebPage.item('BODY'), 'Ponuky práce'); //na záložce Nabídky prace klikni na kartu Dle firem ToLog('5.12 - Klikni na Nabidky prace Dle firem_'); ClickLinkByText(WebPage.item('BODY'), 'Podla firiem'); //klik na náhodné písmeno na kartě Dle firem ToLog('5.13 - Proved vyber dle pismena'); ClickRandomLink(WebPage.Item('858')); ScreenShot('Vypis dle firem'); //klik na náhodnou firmu, podle písmena z předchozího výběru ClickRandomLink(WebPage.Item('56')); ScreenShot('Pozice nahodne vybrane firmy'); //Přechod na titulni stranu - nelze klikat na logo vlevo nahoře, protože logo tam být nemusí, pozice může být v designu např. kb.jobs.cz ToLog('5.14 - Klikni na TopJobs.sk na strance vlevo nahore - prechod na titulku'); IEToURL('http://topjobs.sk'); //Klikni na záložku Absolventi / Studenti ToLog('5.15 - Klikni na Absolventi / Študenti'); ClickLinkByText(WebPage.item('BODY'), 'Absolventi / Študenti'); ScreenShot('Absolventi / Studenti'); //Klikni na logo Topjobs.sk pro návrat na titulní stranu ToLog('5.15 - Klikni na TopJobs.sk na strance vlevo nahore'); ClickTo(WebPage.Item('23')); //Zavře IE CloseIEWindow(); ///////////////////////////////////////////////////////////////// except Log.Error('Exception', ExceptionMessage) end; toLog('=========================='); toLog('Test ' + sTestName + ' dokoncen'); toLog('=========================='); end;
Str. 46
Automatizace pracovních portálů
7.4.
Automatizovaný test pro pracovní portál Live.topjobs.sk
Čtvrtým pracovním portálem na zautomatizování byl portál Live.topjobs.sk, který byl stejně jako Topjobs.sk spuštěn v září letošního roku. A najdeme na něm nejaktuálnější pracovní nabídky, které byly vystaveny na Topjobs.sk, staré maximálně tři dni. Tabulka kontroly pracovního portálu Live.topjobs.sk byla vytvořena z tabulky Hotjobs.cz. Opět při automatizaci byla zkrácena na nejnutnější.
7.4.1 Popis kontroly pracovního portálu Live.topjobs.sk (step by step)
Krok
Popis činnosti Ve filtru vyber "všechny firmy" a kontrola času
Očekávaný výsledek Všední den, nesmí být starší než 30 minut
1
nejaktuálnější pozice
2
Klik na banner "Společnost týdne"
Otevře se v novém okně, odkaz je platný
3
Zavřít okno, otevřené předchozí akcí
Okno zavřeno
4
Klik na náhodnou pozici z "Nabídka týdne"
Otevře se pozice s jejím popisem
5
Klik na zpět v prohlížeči
Zobrazí se titulní strana live.topjobs.sk
6
Klik na náhodnou pozici z "Nabídka týdne"
Otevře se pozice s jejím popisem
7
Klik na zpět v prohlížeči
Zobrazí se titulní strana live.topjobs.sk
8
Klik na "Doporučujeme"
Zobrazí se loga společností
Klik na náhodně vybrané logo
Zobrazí se stránka v designu vybrané
9
společnosti
10
Znovu do prohlížeče zadat www.live.topjobs.sk
Zobrazí se titulní strana live.topjobs.sk
11
Klik znovu na "Doporučujeme"
Zobrazí se loga společností
Klik na náhodně vybrané logo
Zobrazí se stránka v designu vybrané
12 13
společnosti Znovu do prohlížeče zadat www.live.topjobs.sk
Zobrazí se titulní strana live.topjobs.sk
Klik na náhodně vybranou společnost pod
Zobrazí se stránka v designu vybrané
14
tlačítkem "vyberte si"
společnosti
15
Klik na zpět v prohlížeči
Zobrazí se titulní strana live.topjobs.sk
Klik opět na náhodně vybranou společnost pod
Zobrazí se stránka v designu vybrané
16
tlačítkem "vyberte si"
společnosti
17
Klik na zpět v prohlížeči
Zobrazí se titulní strana live.topjobs.sk
18
Klik na vystavenou pozici
Otevře se pozice s jejím popisem
19
Znovu do prohlížeče zadat www.live.topjobs.sk
Zobrazí se titulní strana live.topjobs.sk
20
Klik opět na vystavenou pozici
Otevře se pozice s jejím popisem
21
Znovu do prohlížeče zadat www.live.topjobs.sk
Zobrazí se titulní strana live.topjobs.sk
22
Klik na "dalších 40 pozic"
Zobrazí se dalších 40 pozic
Proveď náhodný výběr pozic s nastavením
Zobrazení výběru odpovídá nastaveným
všech čtyř comboboxů
filtrům
23
Str. 47
Automatizace pracovních portálů
7.4.2 Postup automatizace Live.topjobs.sk
Složka Main – určuje zápis do výsledného souboru, z něhož pak tester vyhodnotí výsledky. uses Test, Livetopjobs;
procedure Main; begin try ToLog('----------------------------------'); ToLog('Zacatek testu'); ToLog('----------------------------------'); //////////////// spouštěné testy /////////////// LiveTopJobsTest; //////////////////////////////////////////////// ToLog('----------------------------------'); ToLog('Konec testu'); ToLog('----------------------------------'); except Log.Error('Exception', ExceptionMessage) end; SaveResults('c:\TC\ResultLog\', 'LiveTopJobs.mht'); end;
Složka LiveTopJobs – testovací skript. Na začátku byl automatický test pro pracovní portál Live.topjobs.sk nejvíce chybový. Hlavní důvod byl, že tento portál byl spuštěn teprve v září, proto všechny reklamní plochy, které se na pracovním portálu nacházejí nebyly obsazeny. Tyto sekce byly prázdné a proto automatický test vždy zhavaroval. Nyní již kontrola ve většině případů, probíhá bez problémů. uses Test; //Test Live.TopJobs.sk - zápis kontroly pracovního portálu do logu procedure LiveTopJobsTest; var sTestName : String; begin try sTestName := 'Live.TopJobs.sk'; ToLog('=========================='); ToLog('Test ' + sTestName + ' zahajen'); ToLog('=========================='); ////////////////////////// test ////////////////////////////////// //spuštění IE, nastavení proměnných, otevření URL live.topjobs.sk ToLog('3 - Live.Topjobs.sk'); IEToUrl('http://Live.TopJobs.sk'); //nastavení comboboxu třetího filtru na “všechny firmy” – tzn. bude zohledňovat i pracovní pozice od personálních agentur ToLog('3.1 - Ve filtru vyber vsechny firmy a zkontroluj nejaktualnejsi pozice'); SetComboBox(WebPage.Item('agent'), 'všetky firmy'); ClickTo(WebPage.Item(165)); // Vybrat //kontrola, že čas vystavení první pozice není starší než 30 min.
Str. 48
Automatizace pracovních portálů
ScreenShot('Stari pozic'); CheckLimit30min(WebPage.Item('188'));
//klik na banner vlevo nahoře ”Společnost týdne” ToLog('3.2 - Klikni na banner Spolecnost tydne'); ClickTo(WebPage.Item('spolecnost_tydne')); //když se otevře v novém okně, pak se udělá printscreen a okno se zavře, jinak udělá jen printscreen if existIEwindow(2) then begin InitIEWindow(1); //nastaví glob. proměnné na otevřené okno ScreenShot('Spolecnost tydne'); //printscreen na novém okně ToLog('3.3 - Zavri okno otevrené po predchozi akci'); CloseIEWindow(1); //zavře nové okno InitIEWindow(1); // inicializace původního okna end else begin ScreenShot('Spolecnost tydne'); ToLog('3.3 - Spolecnost tydne se otevrela v puvodnim okne IE',nil,'W'); end; //Zpět IEToUrl('http://Live.TopJobs.sk'); //Kontrola zda jsou pozice v sekci „nabídka týdne“ ToLog('3.4 - Kontrola pouze jestli jsou pozice v sekci nabídka tydne_ _ neklika'); TextInObject(WebPage.Item('nabidky_tydne')); //horní pozice // dolní pozice stále mění pořadí, název - nejde kontrolovat!!! //Klikni na první pozici ze seznamu a udělej printscreen ToLog('3.5 - Klikni na prvni vystavenou pozici na live.topjobs.cz'); ClickFirstLinkOnNewPageCheckText(WebPage.Item(176)); ScreenShot('Otevrena pozice'); IEToUrl('http://Live.TopJobs.sk');
//Zavře IE CloseIEWindow(); /////////////////////////////////////////////////////////// except Log.Error('Exception', ExceptionMessage) end; ToLog('=========================='); log.message('Test ' + sTestName + ' dokoncen'); log.message('=========================='); end;
Str. 49
Automatizace pracovních portálů
7.5.
Automatizovaný test pro pracovní portál Prace.cz
Poslední pracovní portál na automatizaci, byla Prace.cz. Proto, že ze statistiky využívanosti portálu Prace.cz vyplývá, že je ze všech pěti, které společnost LMC provozuje nejméně navštěvovaný. Opět se postupovalo dle tabulky pro kontrolu pracovních portálů, která byla při automatizaci zkrácena.
7.5.1 Popis kontroly pracovního portálu Prace.cz (step by step)
Krok
Popis činnosti Zadat výběrová kritéria do filtru min. Obor,
Očekávaný výsledek Výsledek odpovídá zadání
1
lokalita, Okres na záložce "Hledám práci"
2
Klik na libovolnou pozici z výběru
Detail pozice musí být v designu "Prace.cz"
3
Klik na "Odpovědět"
Zobrazí se odpovědní formulář
4
Klik vlevo nahoře na logo "Prace.cz"
Zobrazí se titulní stránka Prace.cz
5
Klik na záložku "Brigády"
Zobrazí se záložka "Brigády"
Zadat výběrová kritéria do filtru: Obor a
Výsledek odpovídá zadání
6
lokalita
7
Klik na libovolnou brigádu z výběru
Detail brigády
8
Klik na "Odpovědět"
Zobrazí se odpovědní formulář
9
Klik vlevo nahoře na logo "Prace.cz"
Zobrazí se titulní stránka Prace.cz
Klik na záložku "Můj životopis"
Zobrazí se přihlašovací stránka do správy
10
životopisu
11
Klik na záložku "Poradna"
Zobrazí se titulní stránka poradna.prace.cz
12
Na záložce klik na libovolný odkaz
Vrací platný odkaz
13
Klik na záložku "ZPS"
Zobrazí se záložka "ZPS"
14
Zadat výběrová kritéria do filtru: ZPS a lokalita
Výsledek odpovídá zadání
15
Klik na libovolnou pozici z výběru
Detail pozice
16
Klik na "Odpovědět"
Zobrazí se odpovědní formulář
Klik na záložku "Hledám zaměstnance"
Vrací platný odkaz (vstupní strana do aplikace
17 18
LMC G2) Klik vlevo nahoře na logo "Prace.cz"
Zobrazí se titulní stránka prace.cz
Klik na libovolnou společnost ze sekce
Zobrazí se stránka v designu vybrané
19
"Nepřehlédněte"
společnosti
20
Klik na zpět v prohlížeči
Zobrazí se titulní stránka prace.cz
Na titulní stránce klik na libovolnou volbu z
Vrací odpovídající odkaz z poradna.prace.cz
21
"Profesní poradna"
22
Klik vlevo nahoře na logo "Prace.cz"
Zobrazí se titulní stránka prace.cz
Na titulní stránce klik na libovolnou volbu v
Hlasování je umožněno (bylo - li již jednou
"Anketa"
hlasováno, hlasovat již nelze)
Klik na link "agentury.prace.cz" v patičce
Vrací platný odkaz
23 24
prace.cz
25
Klik vlevo nahoře na logo "Prace.cz"
Zobrazí se titulní stránka prace.cz
Klk na "Práce pro veřejnou zprávu" v patičce
Vrací platný odkaz
26
Str. 50
Automatizace pracovních portálů
Tento automatický test napsal můj kolega, který již jednou měl zautomatizovaný celý tento pracovní portál. Bohužel došlo k tomu, že pracovní portál Prace.cz dostal nový design a z tohoto důvodu bylo nutné napsat tento test znovu. Z důvodů ušetření času, psal tento test můj kolega, respektive předělával skript, který již měl napsaný pro starý portál Prace.cz. Není to má práce, proto jeho zdrojový kód uvádím v příloze.
Str. 51
Závěr
8. Závěr Dle mého názoru se za skoro čtyři měsíce podařil velký kus práce, co se týče automatizovaných testů. Podařilo se zautomatizovat všech pět pracovních portálů, bohužel ne v takovém rozsahu jak byly původní plány. Čistý čas pro automatizaci byl něco málo přes dva měsíce. Protože společnost LMC, uvedla na trh svoje nové projekty a novou funkčnost aplikace LMC G2, proto bylo potřeba ručně testovat právě tuto aplikaci a na automatizované testování zbyl z těchto čtyř měsíců pouze poloviční čas. Z hlediska ušetření času a pracovní kapacity se podařilo snížit kontrolu jednoho pracovního portálů z původních 45 minut na 20 minut. Toto číslo je, ale pouze průměrné. Testeři podstoupili školení, jak kontrolovat výsledky automatizovaného testování. Velmi často se bohužel stává, že tester, který kontroluje výsledky automatizovaného testu (vždy všech pěti pracovních portálů v časových intervalech 7:00, 8:00, 9:00, 12:00, 18:00 a 21:00) narazí na chyby, které se mu vzápětí ručně nepodaří navodit a tím se prodlužuje čas kontroly pracovního portálu. Dalším zdržením je beze sporu kontrola všech obrazovek (printscreeny), které TestComplete provede, během celého testu všech pracovních portálů. Tester musí zkontrolovat všechny tyto obrazovky, jestli je vždy stránka dobře zobrazena, což bohužel TestComplete sám vyhodnotit neumí, kontroluje pouze jestli je pracovní portál po obsahové stránce v pořádku. Další problém na který jsem narazila během automatizace a který souvisí se zkracováním testovacích skriptů, je právě to, že testy musí být spuštěny velmi brzy po sobě. Myslím tím, že pokud první výsledek testu má být k dispozici v 7:00, aby ho tester mohl zkontrolovat, tak tento test musí být spuštěn v 6:05, další test se pak spouští v 7:05 aby byl k dispozici v 8:00. Z toho vyplývá, že již nyní byla tato kapacita zaplněna. Jeden test běží 55 minut a více testů současně běžet nemůže, právě proto byla kontrola pracovních portálů zkrácena na kontrolu nejnutnějšího minima, tabulky pro kontrolu pracovních portálů nebyly dodrženy. Nejlepším řešením by bylo posunout časy kontrol, ale bohužel to nebylo vedením společnosti dovoleno, protože dle statistik, které si společnost LMC vede vyplývá, že právě v tyto hodiny jsou pracovní portály nejvytíženější. Přistupuje na ně nejvíce uživatelů a proto je nutné, je právě v tyto hodiny kontrolovat. Cílem do budoucna je zautomatizovat vystavování pozic v aplikaci LMC G2, to by mělo pomoci testerům, kteří testují kariérní sekce společností. Pro tuto činnost musí vystavit 1-5 pozic pro jednu kariérní sekci. Dále pak automatizace vystavování pozic pomůže školitelkám aplikace LMC G2, které chodí do společností a předvádí funkčnost této aplikace, je tedy nutné aby v aplikaci kterou předvádějí a chtějí prodat měly data. Předpokládá se také zautomatizovat samotnou registraci firmy do systému LMC G2 a vytváření uživatelů v aplikaci LMC G2. Testování všech kariérních sekcí, které společnost LMC provozuje nemá smysl automatizovaně testovat. Tyto kariérní sekce kontroluje jeden tester každé ráno v 8:00, pouze vizuálně jestli se správně zobrazují v prohlížeči Internet Explorer 6. Z toho vyplývá: Nemá smysl automatizovaně dělat printscreeny, které by stejně tester musel shlédnout.
Str. 52
Použité zdroje
9. Použité zdroje 1. Stránky společnosti LMC s.r.o. LMC s.r.o. [online]. 2007 [cit. 2007-11-10]. Dostupný z WWW:
. 2. Informace o produktu Quick Test pro. Quick Test pro [online]. 2007 [cit. 2007-11-10]. Dostupný z WWW: . 3. Informace o produktu Badboy Badboy [online]. 2001 [cit. 2007-11-10]. Dostupný z WWW: . 4. Informace o produktu QA Wizard QA Wizard [online]. 2007 [cit. 2007-11-10]. Dostupný z WWW: . 5. Informace o produktu TestComplete TestComplete [online]. 1999 [cit. 2007-11-10]. Dostupný z WWW: . 6. Informace o produktu WinRunner WinRunner [online]. 2007 [cit. 2007-11-10]. Dostupný z WWW: . 7. Informace o produktu SilkTest SilkTest [online]. 1994 [cit. 2007-11-10]. Dostupný z WWW: . 8. Informace o produktu TestPartner TestPartner [online]. 2007 [cit. 2007-11-10]. Dostupný z WWW: . 9. Informace o produktu eTest eTest [online]. 2007 [cit. 2007-11-10]. Dostupný z WWW: . 10. Případová studie, Jesse Miller, jak si společnost Falafel Software vybrala TestComplete Případová studie [online]. 1999 [cit. 2007-11-10]. Dostupný z WWW: .
Str. 53
Použité zdroje 11. Nejčastější otázky týkající se softwarového testování Softwarové testování [online]. 1996 [cit. 2007-11-10]. Dostupný z WWW: . 12. Informační fórum zabývající se otázkami softwarového testování Informační fórum [online]. 2006 [cit. 2007-11-10]. Dostupný z WWW: < http://www.qaforums.com/>. 13. Internetový adresář, sekce počítače, programování, testování softwaru Internetový adresář [online]. 1998 [cit. 2007-11-10]. Dostupný z WWW: . 14. Knihovna dostupná z: http://www.1000files.com/, vyhledávání výrazu "Testing" Internetová knihovna [online]. 2002 [cit. 2007-11-10]. Dostupný z WWW: . 15. Otevřená encyklopedie Wikipedia - anglický jazyk, pojem "Software_testing" Wikipedia [online]. leden 2001 [cit. 2007-11-10]. Dostupný z WWW: . 16. Otevřená encyklopedie Wikipedia český jazyk, pojem "Softwarové testování" Wikipedia [online]. leden 2001 [cit. 2007-11-10]. Dostupný z WWW: . 17. Otevřená encyklopedie Navajo, pojmy "Softwarové testování", "Black box a White box v testování" Navajo [online]. 2006 [cit. 2007-11-10]. Dostupný z WWW: . 18. Vysvětlení pojmu softwarového testování, vývoj a historie softwarového testování Softwarové testování [online]. 2006 [cit. 2007-11-10]. Dostupný z WWW: . 19. Článek o programu TestComplete TestComplete [online]. 1997 [cit. 2007-11-10]. Dostupný z WWW: .
Str. 54
Použité zdroje
20. Studie, "Kdy by měly být testy automatizovány", Brian Marick Automatizované testy [online]. 1998 [cit. 2007-11-10]. Dostupný z WWW: . 21. Informace o automatizovaném testování od Herberta M. Isenberga Ph.D. Automatizované testování [online]. 2007 [cit. 2007-11-10]. Dostupný z WWW: . 22. PATTON, Ron. Testování softwaru. Praha: Computer Press, 2002. 313 s. 23. Zápis ze školení: Automatizované Testování, společnost Logos, Martin Ventluka, VENTLUKA, Martin. Automatizované testování. [s.l.], 2007. 15 s. školení. 24. Nápověda programu TestComplete Enterprise
25. KONFERENCE LATES, Společnost Komix s.r.o. Ladění, testování a management softwarových aplikací. [s.l.], 2007. 52 s. školení.
26. Porovnání programu TestComplete Enterprise a TestComplete Standard TestComplete Enterprise a TestComplete Standard [online]. 1997 [cit. 2007-11-10]. Dostupný z WWW: .
Str. 55
Přílohy
10. Přílohy 10.1. Automatizace pracovního portálu Prace.cz (zdrojový kód) Složka Main procedure Main; begin try ToLog('----------------------------------'); ToLog('Zacatek testu'); ToLog('----------------------------------'); //////////////// spoustene testy /////////////// PraceTest; //////////////////////////////////////////////// ToLog('----------------------------------'); ToLog('Konec testu'); ToLog('----------------------------------'); except Log.Error('Exception', ExceptionMessage) end; SaveResults('c:\TC\ResultLog\', 'Prace.mht'); end;
Složka Test uses test; //var IEWindow : olevariant;
procedure ini; //prozatim neni vyuzivana, nebot neni zcela nutne toto pouzivat begin IEWindow := Sys.Process('iexplore').Window('IEFrame', '*', 1); IEToolBar := IEWindow.Window('WorkerW', '', 1).Window('ReBarWindow32').Window('ToolbarWindow32', '', 2); IEPageObj := IEWindow.Window('Shell DocObject View').Window('Internet Explorer_Server'); IEPageObj.ToURL('http://www.hotjobs.cz/'); WebPage := IEPageObj.Page('*').document.all; end; Procedure TestTitulky; var w1, w2, w3: olevariant; run : boolean; begin w1:=Sys.Process('iexplore').Window('IEFrame', '*', 1).Window('Shell DocObject View', '', 1).Window('Internet Explorer_Server', '', 1).Page('*'); w1.wait; w2:= w1.document.all; w1.wait; w3:=w2.BODY; w1.wait; run:=LinksTest(w3);
Str. 56
Přílohy
if run=true then ToLog('I','TEST TITULKY PROBEHL OK','TEST TITULKY PROBEHL OK') else ToLog('E','TEST TITULKY NEPROBEHL OK','TEST TITULKY NEPROBEHL OK'); end; procedure NaTitulku; var w1,w2,w3 : olevariant; run : boolean; begin w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.toUrl('http://www.prace.cz'); w2.refresh; w2.wait; w3:= w2.document.all.topBar; // run:=ClickLinkByOuterHtml(w3,'Prace.cz - titulní stránka'); end;
procedure TestMenuProc(polozka: string); var w1,w2,w3 : OleVariant; run : boolean; begin w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=ClickLinkBytext(w3,polozka); w2.refresh; w1.wait; w3:= w2.document.all.HTML; run:=LinksTest(w3); end;
procedure TestMenu; var w1, w2:olevariant; run : boolean; begin w1:=Sys.Process('iexplore').Window('IEFrame', '*', 1).Window('Shell DocObject View', '', 1).Window('Internet Explorer_Server', '', 1).Page('*'); w1.refresh; TestMenuProc('Hledám práci'); TestMenuProc('Brigády'); //('Moj ~ivotopis') menu se zde netestuje, nebot jde o specifickou stranku s prihlasenim do MUJ TestMenuProc('Poradna'); TestMenuProc('ZPS'); TestMenuProc('Hledám zam_stnance'); //TestMenuProc('Hledám práci'); //zpet na uvodni stranku (respektive titulku)
Str. 57
Přílohy
end; // z titulky provede klik na zalozku Moje prace, prihlasi se do aplikace na spravu zivotopisu a provede odhlaseni procedure PraceLoginLogoutMUJ; var w1,w2,w3,w4, p1 : OleVariant; run : boolean; begin p1 := Sys.Process('iexplore'); w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w1.Page('http://www.prace.cz/').document.all.w5.Click; w1.Wait; w2 := w1.Page('*').document.all; w3 := w2.login_2; w3.Click; w3.Keys('[email protected]'); w3 := w2.password; w3.Click; w3.Keys('123456'); w2.Item(78).Click; w1.Page('*').document.frames.Refresh; w1.Wait; w2 := w1.Page('https://g2.lmc.cz/muj/base/index.jsp').document; w3 := w2.all; w3.Refresh; w4 := w2.frames; w4.Refresh; w3.Refresh; w4.Refresh; //Please wait until download completes: 'https://g2.lmc.cz/muj/base/index.jsp' w1.Wait; run:=ClickLinkByText(w3.HTML,'Odhlásit se'); w3.refresh; w3.userConfirmButtonOK.Click; p1.Window('#32770', 'Výstraha zabezpeení').Window('Button', '&Ano').ClickButton; //p1.Window('#32770', '*').Window('Button', '&yes').ClickButton;//anglicka verze IE6 w1.Page('*').document.frames.Refresh; w1.Wait; w3.Refresh; end;
procedure DetailPozicePrace(pozice:string); //pozice - text podle ktereho se provadi filtrace pozic napr. asistentka var w1,w2,w3 : olevariant; run : boolean; neco,vysledek: string; begin w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=ClickLinkByText(w3,'Hledám práci');
Str. 58
Přílohy w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; //vyber oboru w3:=w2.document.all; w2.document.all.searchInTitulka.ClickItem('Administrativa'); w2.wait; //vyber lokality w3.select2.ClickItem(0); //vyber dle indexu v danem komboboxu, z nejakeho duvodu vyber neprobiha tak jak by mel //vyber pracovne pravniho vztahu w3.searchInTitulka_3.ClickItem('Práce na plný úvazek'); //checkbutton na vyber i uradu prace w3.ch2.Click; //rozsirene hledani w3.unfoldSearch.click; //vypsani hledaneho retezce w3.search_key_.click; w3.search_key_.Keys(pozice); //klik na konecne tlacitko kdy potvrzuji vyber a zaroven se spousti vyhledavaci proces w3.send.Click; //vyber pozice w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.mainContent2; vysledek:=FindLinkByText(w3,pozice); if vysledek='' then begin ToLog('E','Nenalezena pozice s vyhledavanym nazvem : '+pozice,'Nenalezena pozice s vyhledavanym nazvem : '+pozice); exit; end else begin pozice:=vysledek; end; //run:=ClickByNamePositions(w3,pozice,'A'); run:=ClickTagByText(w3,'A',pozice); w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; //procedura konci na detailu dane pozice, pro dalsi test je nutne znova pristoupit k odkazu na www.prace.cz end;
procedure SpoluPrace; var w1,w2,w3 : olevariant; run : boolean; vysledek: string; begin w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server');
Str. 59
Přílohy
w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=ClickLinkByText(w3,'spolu.prace.cz'); w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=LinksTest(w3); w2.refresh; w2.wait; end;
procedure Agentury; var w1,w2,w3 : olevariant; run : boolean; vysledek: string; begin w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=ClickLinkByText(w3,'agentury.prace.cz'); w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=LinksTest(w3); w2.refresh; w2.wait; w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=ClickLinkByText(w3,'Seznam personálních agentur'); w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=LinksTest(w3); w2.refresh; w2.wait; end;
Str. 60
Přílohy procedure ZPS; var w1,w2,w3 : olevariant; run : boolean; vysledek: string; begin w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=ClickLinkByText(w3,'zps.prace.cz'); w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=Linkstest(w3); w2.refresh; w2.wait; w3:=w2.document.all; //klik na tlacitko hledej w3.submit.click; w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.mainContent2; run:=ClickRandomLink(w3); //vyber nahodne pozice , dle parametru by mela byt 5 v seznamu w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; end; procedure VerejnaSprava; var w1,w2,w3 : olevariant; run : boolean; vysledek: string; begin w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.HTML; run:=ClickLinkByText(w3,'Práce pro veYejnou správu'); w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; w3:= w2.document.all.mainContent2; w2.refresh; w2.wait; run:=ClickRandomLink(w3); //vyber nahodne pozice , dle parametru by mela byt 5 v seznamu
Str. 61
Přílohy
w1 := Sys.Process('iexplore').Window('IEFrame', '*').Window('Shell DocObject View').Window('Internet Explorer_Server'); w2 := w1.Page('*'); w2.refresh; w2.wait; end; procedure TestVPVPrace; begin //samostatny test titulky a odkazu z nej vedoucich pryc, test jen zda-li dany odkaz existuje TestTitulky; //provede test MANU ktere je pro vsechny stejny TestMenu; //vrati se zpet na titulku NaTitulku; //jednoduchy vyber pracovnich pozic a nasleduje klik na detail pozice DetailPozicePrace('Asistentka'); //vrati se zpat na titulku NaTitulku; //test odkazu spolu.prace.cz SpoluPrace; //vrati se zpat na titulku NaTitulku; //test personalnich agentur na www.prace.cz Agentury; //vrati se zpat na titulku NaTitulku; //test Zps Zps; //vrati se zpat na titulku NaTitulku; //test Verejne spravy VerejnaSprava; //vrati se zpat na titulku NaTitulku; end; procedure TestMUJPrace; begin //jednoduche prejiti do menu Moje prace, prihlase a odhlaseni pres MUJ PraceLoginLogoutMUJ; end;
Str. 62
Přílohy
10.2. Knihovna funkcí var IEWindow, IEPageObj, IEToolBar, WebPage : OleVariant; //Refresh - volat po přechodu na novou stránku //Znovu se načte strom procedure PageRefresh(); begin log.message('Obnoveni dat v TC'); IEPageObj.refresh; IEPageObj.wait; if IEPageObj.Page('*').Exists then WebPage := IEPageObj.Page('*').document.all; end; //Do logu vloží screenshot a zadaný text // aText - text, který se zapíše do logu (default je 'Sejmutí obrazovky') procedure ScreenShot(aText: String = 'Sejmuta obrazovka'); begin try Options.Log.ImageFormat := 'PNG'; Log.Picture(IEPageObj.Picture(), aText); except Log.Error('Obrazovku nelze sejmout!'); end; end; //Odešle email // mFrom - email od koho // mTo - email komu // mSubject - předmět // mBody - tělo emailu // mAttach - příloha function SendEmail(mFrom, mTo, mSubject, mBody, mAttach) : boolean; var i, schema, mConfig, mMessage : OleVariant; begin try schema := 'http://schemas.microsoft.com/cdo/configuration/'; mConfig := Sys.OleObject('CDO.Configuration'); mConfig.Fields.Item(schema + 'sendusing') := 2; // cdoSendUsingPort mConfig.Fields.Item(schema + 'smtpserver') := 'smtp.gmail.com'; // SMTP server mConfig.Fields.Item(schema + 'smtpserverport') := 465; // Port number mConfig.Fields.Item(schema + 'sendusername') := '[email protected]'; // User name (if needed) mConfig.Fields.Item(schema + 'sendpassword') := 'lmclmclmc'; // User password (if needed) mConfig.Fields.Item(schema + 'smtpusessl') := True; mConfig.Fields.Item(schema + 'smtpauthenticate') := 1; mConfig.Fields.Update(); mMessage := Sys.OleObject('CDO.Message'); mMessage.Configuration := mConfig; mMessage.From := mFrom; mMessage.To := mTo; mMessage.Subject := mSubject; mMessage.HTMLBody := mBody;
Str. 63
Přílohy
for i := 0 to GetCSVCount(mAttach) - 1 do mMessage.AddAttachment(GetCSVItem(mAttach, i)); mMessage.Send(); Log.Message('E-mail v poradku odeslan na <' + mTo + '>'); Result := True; except Log.Error('E-mail neodeslan!', ExceptionMessage); Result := False; end; end; //Vyexportuje log do htm, zabalí a pak odešle emailem //musí byt naistalován winrar a nastaven v options TestCompletu !! // aTo - komu // aTestName - název testu procedure SendResults(aTo : String, aTestName : String = ''); var FileName, WorkDir, FileList, Name, ArchiveName: OleVariant; sNow : String; begin log.message('Odesilani zabaleneho vysledku emailem'); Utilities.DateTimeToString(sNow, 'yyyy-mm-dd_hh-nn-ss', Utilities.Now()); //aktuální datum a čas v sNow WorkDir := Project.ConfigPath + 'Log\ExportedResults\'; Name := sNow + 'Result.mht'; FileName := Project.ConfigPath + 'Log\ExportedResults\' + Name; Log.SaveResultsAs(FileName, 2); // export logu do htm //FileList := slPacker.GetFileListFromFolder(WorkDir); ArchiveName := WorkDir + sNow + '-Result'; if slPacker.Pack(Name{FileList}, WorkDir, ArchiveName) then //zabalí htm soubor Log.Message('Soubor "' + Name + '" zkomprimovan') else Log.Error('Soubor se nezdarilo zkomprimovat!'); SendEmail('[email protected]', aTO, 'TestComplete - test "' + aTestName + '" dokoncen - ' + sNow, 'V priloze se nachazi vysledny log z testu provedeneho TestCompletem.' + #13#10, ArchiveName + '.rar'); //pošle emailem Utilities.DeleteFile(FileName); end; //Vyexportuje log do htm // asPath - cesta souboru, kam se má soubor uložit (bez názvu souboru) // asName - název souboru s připonou - default Result.htm // abTimeStamp - přidávat časovou značku do názvu souboru (true / false) default false procedure SaveResults(asPath : String, asName : String = 'Result', abTimeStamp : Boolean = false); var FileName : OleVariant; sNow : String; begin log.message('Export logu do formatu htm'); Utilities.DateTimeToString(sNow, 'yyyy-mm-dd_hh-nn-ss', Utilities.Now()); //aktuální datum a čas v sNow if abTimeStamp then FileName := asPath + '\' + sNow + '-' + asName else FileName := asPath + '\' + asName; if Log.SaveResultsAs(FileName, 2) then // export logu do htm Log.Message('Log vyexportovan do souboru', FileName)
Str. 64
Přílohy
else Log.Error('Log se nezdarilo vyexportovat!'); end; //Inicializace globálních proměnných pro dané okno IE //window - index okna IE procedure InitIEWindow(window : integer = 1); begin log.message('Inicializace globalnich promennych pro IE okno: ' + Utilities.IntToStr(window)); IEWindow := Sys.Process('iexplore').Window('IEFrame', '*', window); IEWindow.Maximize(); IEPageObj := IEWindow.Window('Shell DocObject View').Window('Internet Explorer_Server'); //IEToolBar := IEWindow.Window('WorkerW', '', 1).Window('ReBarWindow32').Window('ToolbarWindow32', '', 2); PageRefresh(); end; //spustí IE v daném okně a přejde na zadané url //url - URL //window - index okna exploreru procedure IEToURL(url: string = '', window: integer = 1); var IEObj : OleVariant; begin log.message('Spusteni IE - okno s indexem ' + Utilities.IntToStr(window) + ', nastaveni promennych, otevreni URL'); if not Sys.WaitProcess('iexplore').Window('IEFrame', '*', window).Exists then begin log.message('Spusteni IE'); // Creating IE instance IEObj := Sys.OleObject('InternetExplorer.Application'); // Making IE visible IEObj.Visible := true; // Navigating to the page IEObj.Navigate(url); end else log.message('IE okno s indexem ' + Utilities.IntToStr(window) + ' bylo jiz spustene'); InitIEWindow(window); IEPageObj.ToURL(url); log.message('V IE okne ' + Utilities.IntToStr(window) + ' nastavena URL: ' + url); PageRefresh(); end;
//zjistí zda dané okno IE je otevřené //window - index okna IE // vrací true / false function ExistIEWindow(window: integer): Boolean; begin result := false; //WindowObj.WaitWindow(WndClass, WndCaption, GroupIndex, Timeout) if Sys.Process('iexplore').WaitWindow('IEFrame', '*', window).Exists then begin log.message('IE okno s indexem ' + Utilities.IntToStr(window) + ' je otevrene');
Str. 65
Přílohy
result := true; end else begin log.warning('IE okno s indexem ' + Utilities.IntToStr(window) + ' neni otevrene!'); end; end; //Zavře zadané okno IE //window - index okna IE procedure CloseIEWindow(window : integer = 1); begin log.message('Zavreni okna IE: ' + Utilities.IntToStr(window)); if Sys.Process('iexplore').Window('IEFrame', '*', window).Exists then begin Sys.Process('iexplore').Window('IEFrame', '*', window).close; log.message('Okno s indexem ' + Utilities.IntToStr(window)+ ' zavreno'); end else log.error('Okno s indexem ' + Utilities.IntToStr(window) + ' nebylo otevrene!'); end; //nelze požít !! - na testovacím stroji to padá, nezná Back //Klik na Zpět v IE procedure IEBack(); begin log.message('Zpet v IE'); log.message('URL, z ktere davam Zpet: ' + IEPageObj.LocationUrl); // vypíše url otevřenou v IE ScreenShot; IEToolbar.ClickItemXY('Back', 9, 10, false); //zpět PageRefresh(); log.message('Nova URL: ' + IEPageObj.LocationUrl); // vypíše url otevřenou v IE ScreenShot; end; //Klik na střed daného objektu // Control - objekt, na který se kliká procedure ClickTo(control : Olevariant); var w, h : integer; outText : String; begin log.message('Kliknuti na objekt'); if control.exists then begin w := control.width; h := control.height; control.Click(w/2, h/2); log.message('Kliknuto na objekt: ' + control.name); PageRefresh(); end else log.error('Objekt ' + control + ' nenalezen!'); end;
Str. 66
Přílohy // Vyhleda podrizeny objekt podle jmena //aObject - podrizeny objekt //aName - nazev hledaneho objektu //Vraci nalezeny objekt function FindObjectByName(aObject: olevariant, aName: string): olevariant; var vObject: olevariant; begin vObject := aObject.FindChild('Name', aName, 10); //vyhleda dany objekt podle jmena if vObject.exists then begin log.message('Objekt ' + aName + ' nalezen'); result := vObject; end else begin log.Error('Objekt ' + aName + ' nenalezen!'); exit; end; end; // Overi zda zadaný čas není starší než zadaný limit // - paramnetrem funkce bude čas zjištěný ze stránek hotjobsu // incas - čas ve formatu 'hh:mm:ss' // limit - max. stáři ve formátu 'hh:mm:ss' function TimeInLimit (incas: string, limit: string = '00:30:00') : boolean; var i : integer; iDate: TDateTime; iTed; cas: string; dif : olevariant; pulhodka : olevariant; begin //iDate:=Utilities.Date(); iTed:=Utilities.Now(); iTed:=Utilities.FormatDateTime('hh:nn:ss', iTed); cas:=incas; pulhodka:=Utilities.StrToTime(limit); dif := (Utilities.StrToTime(iTed)) - (Utilities.StrToTime(cas)); if dif < 0 then dif := dif + 1; if dif < pulhodka then begin //log.message('Zadany cas ' + iTed + ' neni starsi nez ' + limit); result:=true; end else begin //Log.Error('Zadany cas ' + iTed + ' je starsi nez ' + limit); result:=false; end; dif:=Utilities.TimeToStr(dif); //log.message(iTed); // to je aktuální datum a čas //log.message(cas); //log.message(dif); end;
Str. 67
Přílohy // Najde čas ve formátu 'hh:mm:ss' v textu a vrátí jeho hodnotu jako řetězec // Text - text, ve kterém se bude hledat časovy údaj function TimeFromText(Text: String): String; var regEx: OleVariant; InStr, ResStr: String; begin //Log.Message('Hledam cas ve formatu "hh:mm:ss" v textu', 'Text:' + #13#10 + Text); ResStr:=''; InStr := Text; // Create a regular expression regEx:=HISUtils.RegExpr; // Set regular expression pattern that specifies an e-mail address regEx.Expression:='\d*\:\d\d\:\d\d'; //regulární výraz // Execute search if regEx.Exec(InStr) then Repeat ResStr := ResStr + regEx.Match[0] + ' '; Until not regEx.ExecNext; if Utilities.CompareText(ResStr, '') = 0 then Log.Warning('Text neobsahuje asovy udaj!', 'Text:' + #13#10 + InStr); result := ResStr; end;
// V innerTextu zadaného Objektu najde první časový údaj a zjistí zda není starší než 30 min // aObject - nadřazený objekt function CheckLimit30min(aObject: olevariant {, aName: string}): boolean; var Text, Time: String; isInLimit : Boolean; vObject: OleVariant; begin log.message('Kontrola zda je casovy udaj do 30 min.'); //vObject := FindObjectByName(aObject, aName); //vyhledá daný objekt podle jména vObject := aObject; Text := vObject.innerText; //log.message(Text); Time := TimeFromText(Text); //najde časový údaj v řetězci //log.message(Time); isInLimit := TimeInLimit(Time, '00:30:00'); //zjistí zda časový údaj je v limitu //log.message(isInLimit); if isInLimit then Log.Message('Prvni nalezeny casovy udaj v objektu "' + vObject.name + '" neni starsi nez tricet minut', 'Objekt: ' + vObject.name + #13#10 + 'Cas: ' + Time + #13#10 + 'Text: ' + #13#10 + Text) else Log.Warning('Prvni nalezeny casovy udaj v objektu "' + vObject.name + '" je starsi nez tricet minut!', 'Objekt: ' + vObject.name + #13#10 + 'Cas: ' + Time + #13#10 + 'Text: ' + #13#10 + Text); end;
Str. 68
Přílohy //Nastaví zadanou hodnotu v ComboBoxu //aObject - ComboBoxu //aText - text dané hodnoty procedure SetComboBox(aObject: olevariant, aText: string); begin try Log.message('Nastaveni ComboBoxu ' + aObject.name + ' na hodnotu: ' + aText); aObject.ClickItem(aText); except Log.Error('Nepovedlo se nastavit hodnotu: ' + aText + ' v ComboBoxu: ' + aObject.name, ExceptionMessage) end; end; //Nastaví zadané hodnoty v ListBoxu //aObject - ListBox //aValues - hodnota procedure SetListBox(aObject: olevariant, aValue: string); begin try Log.message('Nastaveni ListBoxu ' + aObject.name + ' na hodnoty: ' + aValue); //dodělat označení více položek najednou aObject.ClickItem(aValue); except Log.Error('Nepovedlo se nastavit hodnoty: ' + aValue + ' v ListBoxu: ' + aObject.name, ExceptionMessage) end; end;
//Ověření zda objekt obsahuje daný text (inner text) //aObject - objekt v němž se hledá text //aText - hledaný text // vraci true / false function IsTextInObject(aObject: olevariant, aText: string): Boolean; var iText: String; begin // Text objektu iText := aObject.innerText; // Zjistí zda hledaný text je v textu objektu if Pos(aText, iText) > 0 then begin Log.Message('Hledany text v objektu ' + aObject.name + ' nalezen', 'Text:' + #13#10 + aText); Result := true; end else begin Log.Error('Hledany text v objektu ' + aObject.name + ' nenalezen!', 'Text:' + #13#10 + aText); Result := false; end; end;
Str. 69
Přílohy //Vypíše text Objektu - innerText (-> je v objektu nějaký text? pak ho vypíše) //aObject - objekt, kde se hledá text //Vrací innerText objektu function TextInObject(aObject: olevariant): String; var iText : String; begin log.message('Hledani textu v '+ aObject.name, 'Text:' + #13#10 + iText); iText := aObject.innerText; if CompareStr(iText,'') > 0 then Log.message('Objekt ' + aObject.name + ' obsahuje text', 'Text:' + #13#10 + iText) else begin Log.Error('Objekt ' + aObject.name + ' neobsahuje zadny text!'); Result := iText; end; end; // Klikne na první odkaz v zadaném objektu a vratí jeho innerText function ClickFirstLink(control: olevariant):String; // var elControl: olevariant; i: integer; odkaz, iText : string; begin elControl := control.getElementsByTagName('A'); //for i:=0 to (elcontrol.length-1) do // log.message(intToStr(i) + ' - ' + elControl.item(i).innerText); if elcontrol.length > 0 then begin elControl.item(0).focus; odkaz := elControl.item(0).href; iText := elControl.item(0).innerText; elControl.item(0).click; log.message('Kliknuto na prvni odkaz objektu: "' + control.name + '"', 'Odkaz:' + #13#10 + odkaz + #13#10 + 'Text:' + #13#10 + iText); PageRefresh(); result := iText; exit; end else log.error('V objektu "' + control.name + '" nebyl nalezen zadny odkaz!"'); end; //Najde první link klikne na něj a zkontroluje jestli jeho innerText se nachází na otevřené stránce //control - objekt, na kterém se hledá odkaz // linkWindow - do kterého okna se otevře odkaz procedure ClickFirstLinkOnNewPageCheckText(control: Olevariant, linkWindow : Integer = 1); var iText : String; WebBody : OleVariant; i : integer; begin log.message('Klik na prvni odkaz v objektu ' + control.name + ' a hledani textu odkazu na otevrene strance'); iText := ClickFirstLink(control); //místo WebPage.item('BODY') se hledá Tag body - na některých stránkách má jiné id
Str. 70
Přílohy
//WebBody := WebPage.getElementsByTagName('BODY'); // tohle taky nejde InitIEWindow(linkWindow); WebBody := WebPage.FindAllChildren('nodeName', 'BODY', 1); //najde všechny body na stránce for i:=0 to VarArrayHighBound(WebBody, 1) do begin if IsTextInObject(WebBody[i], iText) then begin log.message('Stranka "' + IEPageObj.locationURL + '" obsahuje text odkazu', 'Text:' + #13#10 + iText); Break; end else log.error('Stranka "' + IEPageObj.locationURL + '" neobsahuje text odkazu!', 'Text:' + #13#10 + iText) end; end; //klikne na odpovědět na daném objektu - (odpovědět bere i v různých jazycích a tvarech) - tvary a jazykové mutace se musí doplňovat do funkce //control - objekt, na kterém je tlačítko odeslat procedure ClickToReply(); var i, j, k : integer; elcontrol, WebBody: olevariant; odkaz, iText: string; odpovedet : array [0..2]; begin try log.message('Klik na Odpovedet'); //sem přidávat slova, která jsou na tlačítku Odpovědět + zvýšit index array odpovedet[0] := 'Odpov_d_t'; odpovedet[1] := 'Reply'; odpovedet[2] := 'Odpovedae'; //najde BODY WebBody := WebPage.FindAllChildren('nodeName', 'BODY', 1); //najde všechny body na stránce //hledá nejdříve v odkazech for k:=0 to VarArrayHighBound(WebBody, 1) do begin elcontrol := WebBody[k].getElementsByTagName('A'); for i:=0 to (elcontrol.length-1) do begin for j:=0 to VarArrayHighBound(odpovedet,1) do begin iText := elcontrol.item(i).innertext; // Zjistí zda hledaný text je v textu objektu if Pos(odpovedet[j], iText) > 0 then begin elcontrol.item(i).focus; odkaz:=elcontrol.item(i).href; elcontrol.item(i).click; log.message('Proveden klik na odkaz Odpov_d_t: ' + iText); PageRefresh(); exit; end; end; end; end;
Str. 71
Přílohy
//pak hledá v inputech (tlačítka) for k:=0 to VarArrayHighBound(WebBody, 1) do begin elcontrol := WebBody[k].getElementsByTagName('INPUT'); for i:=0 to (elcontrol.length-1) do begin for j:=0 to VarArrayHighBound(odpovedet,1) do begin iText := elcontrol.item(i).value; // Zjistí zda hledaný text je v textu objektu if Pos(odpovedet[j], iText) > 0 then begin elcontrol.item(i).focus; elcontrol.item(i).click; PageRefresh(); log.message('Proveden klik na odkaz Odpovedet: ' + iText); exit; end; end; end; end; log.error('Tlacitko ani odkaz Odpovedet nenalezeno!'); except Log.Error('Exception', ExceptionMessage) end; end; ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// //Ošetření přetečení barevné složky - min. 0, max. 255 //component - složka barevného prostoru RGB procedure CorrectRGBComponent(var component); begin component := BuiltIn.VarToInteger(component); if (component < 0) then component := 0 else if (component > 255) then component := 255; end; //převod barevného prostoru //r - červená //g - zelená //b - modrá // vrací integer function RGB(r, g, b) : integer; begin CorrectRGBComponent(r); CorrectRGBComponent(g); CorrectRGBComponent(b); Result := r or (g shl 8) or (b shl 16); end;
Str. 72
Přílohy //procedura zapíše do logu požadovaný text který je předán parametry // text - text chyby // popis - detailnější popis dané chyby - odřádkování v rámci popisu: #13#10 // typ - typ zápisu do logu - I, W, E - defaultně je 'I' procedure ToLog(text: string, popis: string = '', typ: string = 'I'); var Attr : OleVariant; priorita: string; begin Attr := Log.CreateNewAttributes; Attr.FontColor := RGB(192, 0, 0); Attr.BackColor := RGB(255, 255, 0); if length(popis)=0 then popis:=''; case typ of 'I': begin priorita := 400; log.Message(text, popis, priorita, Attr); end; 'W': begin priorita := 400; log.Warning(text, popis, priorita, Attr); end; 'E': begin priorita := 400; Log.Error(text, popis, priorita, Attr); end; end; end; //provede kontrolu odkazů, které jsou na zadaném objektu // control - objekt, na kterém se budou testovat odkazy function LinksTest(control: olevariant):boolean; var i: integer; elcontrol : olevariant; odkaz, iText : string; chyba : integer; begin log.message('---------------------'); log.message('Test odkazu na strance "' + IEPageObj.LocationURL + '" zahajen', 'Objekt: ' + #13#10 + control.name ); log.message('---------------------'); elcontrol := control.getElementsByTagName('A'); chyba:=0; i:=0; for i:=0 to (elcontrol.length-1) do begin elcontrol.item(i).focus; elcontrol.item(i).onmouseover; iText := elcontrol.item(i).innertext; odkaz := elcontrol.item(i).href; log.message('Test odkazu: "' + iText, 'Odkaz: ' + #13#10 + odkaz); end; log.message('---------------------'); log.message('Test odkazu dokoncen'); log.message('---------------------'); result:=true; end
Str. 73
Přílohy
//klikne na položku která obsahuje daný text v innertextu , hledaný text je stejný jako klikací tzn. že musí být zadán přesně // control - objekt, kde se hledá text // text - hledaný text function ClickLinkByText (control: olevariant, text: string) : boolean; var i : integer; elcontrol: olevariant; odkaz, iText : string; begin elcontrol := control.getElementsByTagName('A'); i:=0; for i:=0 to (elcontrol.length-1) do begin if elcontrol.item(i).innertext = text then begin elcontrol.item(i).focus; odkaz:=elcontrol.item(i).href; elcontrol.item(i).click; result:=true; log.message('Klik na polozku : ' + text,'Proveden klik na polozku: ' + text + #13#10 + 'polozka obsahuje tento odkaz : ' + odkaz); PageRefresh(); exit; end else begin result:=false; end; end; if result=false then log.warning('Polozka nebyla nalezena : ' + text,'Polozka nebyla nalezena : ' + text); end; //Klikne na daný text v daném tagu objektu // control - objekt // tag - tag objektu // text - innertext tagu, na který se klikne function ClickTagByText (control: olevariant, tag: string, text: string):boolean; var i : integer; elcontrol: olevariant; odkaz, iText: string; begin //nejdříve vybere všechny dané tagy elcontrol := control.getElementsByTagName(tag); i:=0; for i:=0 to (elcontrol.length-1) do begin if elcontrol.item(i).innertext = text then begin elcontrol.item(i).focus; odkaz:=elcontrol.item(i).href; elcontrol.item(i).click; PageRefresh(); result:=true; log.message('Proveden klik na polozku: ' + text, 'Proveden klik na polozku : ' + text + #13#10 + 'polozka obsahuje tento odkaz : '+ odkaz); exit;
Str. 74
Přílohy end else begin result:=false; end; end; if result=false then log.warning('Polozka nebyla nalezena : ' + text,'Polozka nebyla nalezena : ' + text); end; // Klikne na odkaz s daným OuterText textem //control: objekt který obsahuje info o ostatních ve kterém se provede výběr přes getelementsbytagname //tag: daný tag který hledáme nejčastěji 'A' //text: řetězec který se hledá v outerhtml function ClickLinkByOuterHTML (control: olevariant, text: string):boolean; var i : integer; elcontrol: olevariant; odkaz, iText, oName: string; begin //nejdříve vybere všechny dané tagy elcontrol := control.getElementsByTagName('A'); i:=0; for i:=0 to (elcontrol.length-1) do begin if pos(text,elcontrol.item(i).outerhtml)>0 then //if elcontrol.item(i).innertext = name then begin elcontrol.item(i).focus; odkaz:=elcontrol.item(i).href; oname:=elcontrol.item(i).innertext; elcontrol.item(i).click; PageRefresh(); log.message('Klik na polozku ktera obsahuje nasledujici text: '+text,oname+' : jmeno objektu na ktery bylo potom kliknuto. Odkaz: '+odkaz + #13#10 +'Odkaz na ktery bylo kliknuto obsahuje tento text: '+text); result:=true; exit; end else begin result:=false; end; end; if result=false then log.warning('Polozka nebyla nalezena : ' + text,'Polozka nebyla nalezena : ' + text); end; //Klikne na náhodně vybraný odkaz v zadaném objektu //control - objekt //!! dodělat: přidat nepovinný parametr jaké linky se mají brát - např. každý pátý,... function ClickRandomLink (control: olevariant):boolean; var i : integer; elcontrol: olevariant; odkaz, iText, oName: string; cislo : integer; begin if control.exists then begin
Str. 75
Přílohy log.message('Klik na nahodny odkaz na objektu "' + control.name + '"'); elcontrol := control.getElementsByTagName('A'); cislo := Random(elcontrol.length); //náhodné číslo v rozsahu <0; range-1) if elcontrol.length > 0 then begin elcontrol.item(cislo).focus; odkaz:=elcontrol.item(cislo).href; oname:=elcontrol.item(cislo).innertext; elcontrol.item(cislo).click; log.message('Kliknuto na nahodny odkaz: ' + oName , 'Odkaz: ' + #13#10 + oname + #13#10 + odkaz); PageRefresh(); result:=true; end else begin result:=false; log.warning('V objektu "' + control.name + '" nenalezen zadny odkaz!'); end; end else begin result:=false; log.warning('Objekt "' + control.name + '" nenalezen!'); end; end; //vypíše status page - stav načtené stránky //page - objekt nutno zadávat cestu k page('*') kde se tato hodnota vyplňuje function StatusPage (page: olevariant) : string; begin result:=page.StatusText; end; //hledá odkaz, který obsahuje zadaný text a vrací celý text odkazu //control: objekt který obsahuje informace o ostatních ve kterém se provede výběr přes getelementsbytagname //text: řetězec který se hledá v outerhtml, vrací innerText odkazu function FindLinkByText(control: olevariant, text: string) : string; var i : integer; elcontrol: olevariant; begin elcontrol := control.getElementsByTagName('A'); i:=0; for i:=0 to (elcontrol.length-1) do begin if pos(text,elcontrol.item(i).outerhtml)>0 then begin result:=elcontrol.item(i).innertext; log.message('Nalezeno jmeno pozice: '+elcontrol.item(i).innertext,'Nalezeno jmeno pozice: '+elcontrol.item(i).innertext); exit; end else result:=''; end; end
Str. 76
Přílohy
10.3. Přehled vzhledu pracovních portálů Ukázka vzhledu pracovního portálu Jobs.cz -
První pracovní portál společnosti LMC, s.r.o. vznikl v roce 1996.
Str. 77
Přílohy Ukázka vzhledu pracovního portálu Prace.cz -
Druhý pracovní portál společnosti LMC, s.r.o vznikl v roce 2000.
Str. 78
Přílohy Ukázka vzhledu pracovního portálu Hotjobs.cz -
Třetí pracovní portál společnosti LMC, s.r.o vznikl v roce 2000.
Str. 79
Přílohy Ukázka vzhledu pracovního portálu Topjobs.sk -
Čtvrtý pracovní portál společnosti LMC, s.r.o vznikl v roce 2007.
Str. 80
Přílohy Ukázka vzhledu pracovního portálu Live.topjobs.sk -
Pátý pracovní portál společnosti LMC s.r.o vznikl v roce 2007.
Str. 81