• Nebyly nalezeny žádné výsledky

2018MartinHýl AbsolvováníindividuálníodbornépraxeIndividualProfessionalPracticeintheCompany VŠB–TechnickáuniverzitaOstravaFakultaelektrotechnikyainformatikyKatedrainformatiky

N/A
N/A
Protected

Academic year: 2022

Podíl "2018MartinHýl AbsolvováníindividuálníodbornépraxeIndividualProfessionalPracticeintheCompany VŠB–TechnickáuniverzitaOstravaFakultaelektrotechnikyainformatikyKatedrainformatiky"

Copied!
31
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

VŠB – Technická univerzita Ostrava Fakulta elektrotechniky a informatiky

Katedra informatiky

Absolvování individuální odborné praxe Individual Professional Practice in the

Company

(2)
(3)
(4)
(5)
(6)

Abstrakt

Cílem této bakalářské práce je popsat průběh mé odborné praxe ve společnosti Y Soft Corpo- ration, a.s., konkrétně v její ostravské pobočce. Úvodní části se zabývají základními informacemi o firmě, jejím odborným zaměřením, a také pracovní pozicí, na kterou jsem do této firmy na- stoupil. V dalších částech této práce jsou popsány úkoly, na kterých jsem pracoval, jejich řešení a použité technologie. Dále také obsahuje uplatněné dovednosti získané v průběhu studia a chy- bějící znalosti, které jsem v rámci odborné praxe musel nastudovat.

Klíčová slova: odborná praxe, Y Soft Corporation a.s., .NET, C#, SpecFlow, Gherkin, testo- vání

Abstract

The goal of this bachelor thesis is to describe the practical experiences gained throughout my work in the Y Soft Corporation, a.s. First part of this thesis is aimed at the basic in- formation of this company, its dedicated field of work and especially the exact practical aspect of my position. Next parts of this thesis will be dedicated towards specific tasks and solutions I elaborated on including technological tools used in solving these problems. Another parts are aimed at all of the skills gained throughout my studies applied on my work with a focus being put on accessory skills gained in the process of my work required for successful completion.

Key Words: professional practice, Y Soft Corporation a.s., .NET, C#, SpecFlow, Gherkin, testing

(7)

Obsah

Seznam použitých zkratek a symbolů 8

Seznam obrázků 9

Seznam tabulek 10

Seznam výpisů zdrojového kódu 11

1 Úvod 12

2 Y Soft Corporation, a.s. 13

2.1 Zaměření firmy . . . 13 2.2 Pracovní zařazení . . . 13

3 Seznámení s platformou a technologiemi 14

3.1 Platforma YSoft SafeQ . . . 14 3.2 Použité technologie . . . 15

4 Zadané úkoly a jejich řešení 19

4.1 Manuální testy . . . 19 4.2 Automatizované testy . . . 19

5 Uplatněné znalosti a dovednosti 28

6 Scházející znalosti a dovednosti 29

7 Závěr 30

Literatura 31

(8)

Seznam použitých zkratek a symbolů

API – Application Programming Interface ETUI – Embedded terminal user interface

HTML – HyperText Markup Language

IDE – Integrated Development Environment R&D – Research and development

QA – Quality assurance

UI – User interface

8

(9)

Seznam obrázků

1 Platforma YSoft SafeQ . . . 14 2 Autentizační obrazovka po neúspěšné autentizaci PIN kódem . . . 20

(10)

Seznam tabulek

1 Tabulka jednotlivých sad testů a jejich počet . . . 21

10

(11)

Seznam výpisů zdrojového kódu

1 Ukázka definice testu v jazyce Gherkin . . . 17 2 Implementace jednotlivých kroků testu v jazyce C# . . . 17 3 Hlavička sady testů CardAndLoginAuthentication a její výchozí nastavení . . . . 22 4 Ukázka definice testovacích scénářů CardAndLoginAuthentication v jazyce Gherkin 22 5 Třída PinAuthenticationSteps implemntující jednotlivé kroky v jazyce C# . . . . 23 6 Třída PageBase v jazyce C# . . . 24 7 Třída AuthenticationPage využívající návrhový vzor Page Object . . . 25 8 Funkce pro tvorbu screenshotu po každém kroku scénáře . . . 27

(12)

1 Úvod

Cílem této bakalářské práce je popis průběhu absolvování bakalářské praxe v ostravské pobočce společnosti Y Soft Corporation a.s. Pro bakalářskou praxi jsem se rozhodl hned z několika důvodů. Hlavním důvodem bylo uplatnění teoretických znalostí a dovedností, které jsem nabyl v dosavadním průběhu studia na Fakultě elektrotechniky a informatiky VŠB-TUO, v praxi.

Dalším důvodem bylo také získání nových zkušeností z komerční sféry, která se podstatně liší od akademického prostředí.

Po úspěšném absolvování pohovoru jsem nastoupil na pozici R&D Intern se zaměřením na testování. Mým hlavním úkolem byla tvorba testovacích scénářů, testů a jejich automatizace pomocí testovacího frameworku. Všechny tyto testy se týkaly hlavního produktu společnosti.

Tímto produktem je YSoft SafeQ. V následujících kapitolách jsou uvedeny základní informace o firmě, řešené úkoly v rámci firmy, technologie, se kterými jsem pracoval, a také zhodnocení celé praxe.

12

(13)

2 Y Soft Corporation, a.s.

Y Soft Corporation, a.s.[1] je česká společnost založená v roce 2000 v Brně jako studentský projekt. Ze studentského projektu se stala firmou s globální působností, která v současné době působí v 17 zemích a má více než 15 tisíc zákazníků po celém světě. Firma zaměstnává okolo 300 odborníků, z nichž většina pracuje ve výzkumných a vývojových centrech, které se nacházejí v Brně, Praze a Ostravě.

2.1 Zaměření firmy

Společnost se zabývá vývojem specializovaného softwaru a hardwaru pro tisková prostředí a na- bízí inteligentní a produktivní podniková kancelářská řešení pro střední a velké podniky. Tato řešení jim umožňují optimalizovat a zefektivnit svůj provoz zejména v oblasti tisku.

2.2 Pracovní zařazení

Vývojové oddělení společnosti se člení na několik skupin podle toho, kterou oblastí se zabývá.

Mým pracovní zařazením bylo oddělení tiskového managmentu, konkrétně tým, který má na sta- rosti terminály na specifických vendorech. Tento tým je veden metodikou Scrum. Jeho práce je plánována na bázi dvoutýdenního sprintu a jsou v něm tři vývojáři a dva QA inženýři, kteří se každý den scházejí na pravidelném stand-up meetingu, kde jednotliví členové týmu prezentují jaké úkoly zvládli dokončit a s jakými problémy se při své práci potýkali. Tým se scházel také na plánovacím meetingu, na kterém si společně s produktovým manažerem určoval jaké úkoly zařadí do následujícího sprintu. Já jsem se těchto meetingů účastnil společně s týmem. Nejpří- nosnějšími meetingy pro mě byly denní stand-up meetingy, na kterých jsem v případě potřeby mohl s vývojáři probrat detaily týkající se automatizovaných testů, které jsem vyvíjel.

(14)

3 Seznámení s platformou a technologiemi

Než se však dostanu ke konkrétnímu zadání a řešení úkolů v rámci bakalářské praxe, je nutné popsat platformu YSoft SafeQ a také technologie, které jsem v rámci tvorby a automatizace testovacích scénářů použil.

3.1 Platforma YSoft SafeQ

YSoft SafeQ je hlavním produktem firmy YSoft Corporation a.s. Jedná se o serverové řešení správy tisku, které snižuje celkové náklady na tisk, zvyšuje zabezpečení dokumentů a umož- ňuje aplikaci předem nastaveného workflow na skenované dokumenty. Systém YSoft SafeQ byl navržen jako platforma, která se skládá ze tří pilířů, kterými jsou správa tisku, digitalizace dokumentů a správa 3D tisku.

Obrázek 1: Platforma YSoft SafeQ Hlavními funkcemi jsou:

Ověření tisku umožňuje zabezpečený přístup k zařízením pro tisk, kopírování a skeno- vání. Ověření uživatele lze provést několika různými způsoby, včetně identifikačních karet, PIN kódu nebo přihlašovacích údajů. Uživatelské rozhraní je integrováno do zabudovaného displeje multifunkčního zařízení většiny výrobců. Pokud zařízení nemá zabudovaný displej, poskytuje Y Soft externí terminál nebo mobilní aplikaci.

Tisk na základě pravidel umožňuje nastavit pravidla pro tisk, kopírování a skenování směřující ke snížení nákladů, jako například povinný oboustranný tisk, zákaz barevného tisku nebo vynucení tisku na efektivnější tiskárně.

Print Roaming poskytuje bezpečný přístup k tištěným dokumentům z libovolné auto- rizované tiskárny v organizaci. Dokumenty tak následují uživatele a jsou k dispozici vždy tam, kde je uživatel potřebuje a kdy je potřebuje, ať už se jedná o pohyb v rámci jedné budovy nebo mezi pobočkami na celém světě.

Mobilní tisk umožňuje s použitím mobilních zařízení tisknout kdekoliv to zaměstnanci potřebují. Dovoluje také tisk na vyhrazené tiskárně pro hosty, kteří nemají přístupová práva.

14

(15)

Managed Workflow jsou komponenty pro skenování dokumentů a automatizaci work- flow, která pomáhají organizacím zvyšovat produktivitu vyloučením úkonů založených na papírových dokumentech a automatizací workflow do předdefinovaných míst určení.

Pokročilejší zpracování a formátování dokumentů nabízí funkce pro zpracování dokumentů včetně OCR.

Kredit a účtování umožňuje přiřazovat a sledovat náklady a automaticky řídit účty plateb za tisk, skenování a kopírování podle rozpočtového střediska nebo klienta. Účto- vání sleduje a reportuje také účtovací kódy zadané uživatelem. Zařízení lze nastavit tak, aby uživateli nabízelo seznam účtovacích kódů nebo čísel projektů.

Reportování umožňuje sledovat předdefinované nebo uživatelem vytvořené reporty ob- sahující informace o tisku, 3D tisku, kopírování a skenování pro každou tiskárnu, skupinu uživatelů i jednotlivé uživatele.

3.2 Použité technologie

V rámci návrhu a implementace jednotlivých testů jsem se setkal s několika odlišnými techno- logiemi, z nichž některé pro mě byly známé, ale s některými jsem se setkal úplně poprvé a ty jsem si musel blíže nastudovat. Na následujících řádcích jsou zmíněny a detailněji popsány ty, se kterými jsem nejčastěji pracoval.

3.2.1 ReSharper

ReSharper[2] je rozšíření pro Visual Studio. Mezi hlavní výhody patří zejména to, že umožňuje vývojáři rychlou a přehlednou navigaci v kódu pomocí klávesových zkratek, lepší odhalování chyb a refactoring kódu. Dalším důvodem, proč zde ReSharper zmiňuji, je podpora testování tím, že umožňuje uživateli nejen zobrazit a spouštět vybrané testy, ale také těmito testy krokovat i na úrovni definice testu v jazyce Gherkin.

(16)

není závislé na konkrétním programovacím jazyce. To znamená, že definice kroků můžeme imple- mentovat v jazycích C#, Java, Python, PHP atd. Tento soubor je konkrétně v jazyce C# třída, které přidáme atribut Binding a název souboru s definicí testů, aby překladač při kompilaci byl schopen spojit Gherkin definice s metodami v této třídě. Tyto metody se vykonají, pokud jsou zahrnuty v testovacím scénáři ve Feature souboru. Námi definované testy v jednotlivých Feature souborech můžeme díky ReSharperu jednoduše spouštět ve vývojovém prostředí, kde se nám zobrazí seznam všech testovací scénářů strukturovaných dle souborů s definicí testů.

Gherkin[4] je programovací jazyk, jehož cílem je zápis testovacích scénářů v čitelné formě.

Gherkin definuje několik klíčových slov, které umožňují psát jednotlivé testy v určité struktuře srozumitelně a čitelně. Definici těchto testů by měl zvládnout i člověk neprogramátor, například QA inženýr nebo produktový manažer, který definuje požadavky na produkt.

Klíčová slova jazyka Gherkin a jejich popis:

Featureje úvodní slovo Feature souboru. Za tímto slovem je uveden název sady testů a je zvykem zde popsat očekávané chování nebo testovanou část aplikace. Nemá vliv na průběh testů.

Background je definice kroků, které se mají vykonat před během každého testu.

Scenario uvozuje název a popis scénáře.

Scenario Outlineje obdoba klíčového slova Scenario. Používá se v situacích, kdy chceme daný scénář zopakovat několikrát s různými vstupními parametry. Jednotlivé parametry se zapisují za definici scénáře do tabulky. Díky tomuto klíčovému slovu nemusíme psát stejný scénář vícekrát, a i přesto se vyhodnocuje samostatně a v přehledu testů se odlišuje názvem testu s daným parametrem.

Examplesoznačuje tabulku, ve které jsou uvedeny parametry pro Scenario Outline a jejich hodnoty.

Givenje krok, který slouží k nastavení prostředí.

When označuje interakci se systémem. Obecně je to nějaká činnost uživatele, jako napří- klad zadaní hesla do textboxu.

Then je kontrola, zda daná interakce splnila očekávané chování.

And je doplňkovým klíčovým slovem, které umožňuje spojit více kroků v rámci klíčových slov Given, When a Then.

But má stejný význam jako And, ale používá se u kroků s negativním významem.

16

(17)

Výpisy zdrojového kódu 1 a 2 zobrazují jednoduchý scénář s více vstupními parametry v sou- boru s definicí testů a také třídu v jazyce C#, ve které jsou na základě tohoto souboru imple- mentovány funkce pro jednotlivé kroky. Ukázka demonstruje použití jazyka Gherkin a následnou implementaci na jednoduché kalkulačce, která umožňuje sčítat dvě čísla.

Feature: Calculator

In order to avoid silly mistakes As a user

I want to be told the sum of two numbers

Scenario Outline: Add two numbers Given The calculator is reset

When I enter ’<firstNumber>’

And I add ’<secondNumber>’

Then The result should be ’<result>’

Examples:

| firstNumber | secondNumber | result |

| 10 | 10 | 20 |

| 50 | 30 | 80 |

| 200 | 0 | 200 |

| 100 | 11 | 111 |

Výpis 1: Ukázka definice testu v jazyce Gherkin public class CalculatorSteps

{

private Calculator calculator;

[Given(@"The calculator is reset")]

(18)

[When(@"I Add (.*)")]

public void WhenIAdd(int number) {

calculator.Add(number);

}

[Then(@"The result should be (.*)")]

public void ThenTheValueShouldBe(int result) {

Assert.Equal(result,calculator.Value);

} }

Výpis 2: Implementace jednotlivých kroků testu v jazyce C#

3.2.3 Selenium

Selenium[5] je komplexní sada nástrojů pro tvorbu automatizovaných testů pro webové aplikace.

Tato sada nástrojů nám dovoluje psát testy na různých platformách v různých programovacích jazycích, jako například Java, Python a C#. Tyto testy pak mohou být spouštěny ve většině populárních webových prohlížečích.

Komponenty Selenium frameworku:

Selenium Gridje nástroj, který nám dovoluje spouštět více testů najednou, což umožňuje rychlejší testování webových aplikací.

Selenium IDEje integrované vývojové prostředí pro Selenium testy. Je implementováno jako plugin pro Firefox a umožňuje nám vytvářet, editovat a debugovat testy. Od verze Firefox 55 již tato komponenta není podporována.

Selenium WebDriver je kolekce open-source API, která jsou použita pro automatické testování webových aplikací.

3.2.4 JIRA

JIRA[6] je softwarový nástroj pro řízení projektů nebo evidenci chyb a problémů při vývoji softwaru. Je vyvíjen společností Atlassian. Usnadňuje koordinaci vývojového procesu s procesem testování. Dále také umožňuje sledování statistik a tvorbu reportů.

18

(19)

4 Zadané úkoly a jejich řešení

Mou hlavní náplní práce ve společnosti Y Soft Corporation, a.s. byla tvorba a implementace automatizovaných testů na terminálovou část produktu YSoft SafeQ. V rámci bakalářské praxe jsem se však velice často dostal i k manuálnímu testování.

4.1 Manuální testy

Po nástupu a úvodním seznámení se s fungováním firmy a její firemní kulturou jsem se začal věnovat manuálním testům. Díky tomuto testování jsem postupně pronikal do fungování celého systému. S manuálním testováním jsem přišel do styku především v těchto případech:

Regresní testování - Tyto testy probíhaly vždy před vydáním nové verze platformy.

V rámci regresního testování se mi podařilo objevit několik dříve neobjevených chyb, které měly vliv na chod systému.

Retest opravených chyb - Pokud se v rámci regresního testování objevila chyba, tak byla v závislosti na její závažnosti řešena vývojáři. V okamžiku, kdy vývojář chybu vyřešil, musela být znovu otestována.

Testování nových funkcionalit - V rámci vývoje nových požadavků na systém musely tyto nové funkcionality úspěšně projít testy.

4.2 Automatizované testy

V následujících kapitolách je popsána hlavní náplň mé bakalářské praxe, tvorba automatizova- ných UI testů pro terminálovou část produktu YSoft SafeQ. Dříve než jsem s návrhem a au- tomatizací těchto testů mohl začít, musel jsem si důkladně nastudovat frameworky a nástroje, které se k tomuto účelu ve firmě používají. Jedná se především o nástroje SpecFlow a Gherkin, které byly popsány v kapitole 3.2.2

Veškeré úkoly, které jsem řešil se zabývaly automatizováním integračních testů. Tyto testy

(20)

4.2.1 Návrh testů

Pro samotný návrh testů byla důležitá znalost chování aplikace, kterou jsem nabyl v rámci již dříve popsaných manuálních testů, studiem aplikace samotné a také diskuzí se zkušenými kolegy.

Dalším důležitým aspektem v rámci návrhu a implementace testů byla skutečnost, že některé funkčnosti a závislosti musely být v rámci těchto integračních testů mockovány. To znamená, že docházelo k nahrazení reálného objektu falešným objektem, který nevykonává žádnou funk- cionalitu, ale pouze se jako reálný objekt tváří. Logika testovaného objektu je tedy nahrazena námi požadovanou logikou.

Většina mnou automatizovaných testů se týkala autentizace uživatele na terminálu. Z tohoto důvodu bylo nutné nastudovat principy a způsob jednotlivých autentizačních metod. Mezi tyto metody patří autentizace identifikační kartou, autentizace PIN kódem, autentizace přihlašova- cími údaji a různé kombinace těchto metod.

Autentizace uživatele na terminálu byla pokryta několika sadami testů. Tyto jednotlivé sady byly strukturovány podle autentizačních metod případně jejich kombinací. V rámci těchto sad testů bylo nutné nejprve ověřit správnost zobrazení jednotlivých komponent a textů. Stěžejní části však byla samotná autentizace uživatele. Zde bylo nutné ověřit, zda je uživatel po zadání validních údajů úspěšně přihlášen do systému, nebo zda v případě vícestupňové autentizace je přesměrován na stránku se správnou autentizační metodou. Dále byl kladen důraz na neúspěšnou autentizaci, zejména zobrazení chybových a informačních hlášek o nevalidních přihlašovacích údajích, respektive chybějících právech uživatele.

Obrázek 2: Autentizační obrazovka po neúspěšné autentizaci PIN kódem

Výběr jazyka je další funkcí terminálové aplikace, která musela být pokryta automatizo- vanými testy. V rámci této sady jsem vytvořil testy, které ověřovaly schopnost uživatel otevřít dialog změny jazyka a zobrazení všech předem definovaných jazyků v tomto dialogu. Další scé- náře se týkaly samotné změny jazyka a jednotlivých jazykových sad.

20

(21)

Aktivace identifikační karty je funkce systému, která umožňuje existujícímu uživateli v systému přiřadit identifikační kartu na základě aktivačního kódu nebo přihlašovacích údajů.

Tato funkčnost byla opět pokryta nejdříve pozitivními scénáři, které testovaly, že je uživatel schopen po zadání validní kombinace údajů aktivovat kartu ke svému účtu, a až poté zobrazení chybových a informačních hlášek.

V neposlední řadě jsem navrhnul a implementoval testy, jejichž sada je nazvána Print All feature. V této sadě jsou testy na možnost uživatele zvolit si, zda se po úspěšném přihlášení na terminálu tiskárny uživateli vytisknou všechny tiskové úlohy nebo ne. Tato možnost je repre- zentována přepínacím tlačítkem na autentizační obrazovce, jehož zobrazení a výchozí hodnota je závislá na systémovém parametru.

Přehled všech sad testů, které jsem v rámci své bakalářské praxe vytvořil a následně imple- mentoval, je shrnut v tabulce 1.

Tabulka 1: Tabulka jednotlivých sad testů a jejich počet

Název sady Počet testů

Card and PIN 10

Card and Login 10

Card or PIN 18

Card or Login 18

Card Activation 22

Card Activation by Username and password 10

Card Activation by PUK 10

Print All feature 35

Language Selection 18

Celkem 151

Pro každou sadu testů jsem vytvořil soubor s definicí testů, ve kterém jsou v jazyce Gher- kin definovány jednotlivé scénáře. Na začátku souboru s definicí testů je za klíčovým slovem Featrue uveden název sady testů a také její obecný popis. Ve většině souborů s definicí testů

(22)

Feature: Card and Login Authentication In order to authenticate user

Card and Login authentication must work

Background:

Given terminal is installed with ’CardAndUsernamePassword’ authentication And user is navigated to authentication screen

Výpis 3: Hlavička sady testů CardAndLoginAuthentication a její výchozí nastavení Výpis zdrojového kódu 4 zobrazuje část struktury souboru s definicí testů, která nejdříve obsahuje testy s pozitivním průběhem. V tomto případě testujeme, zda se uživatel úspěšně autentizoval na terminálu, a až poté je systém testován na různé chybové hlášky, jako například, že terminál není správně nainstalován, že se nachází v nevalidním stavu, ale také informace o tom, zda má uživatel práva na požadovanou akci atd.

Scenario: User is authenticated with valid Card and Login When user authenticates with valid Card ’12345ABC’

And user enter Username ’JohnDoe’

And user authenticate with valid password ’ValidPass’

Then the application screen is shown

Scenario Outline: User is not authenticated with invalid card When user authenticates with invalid Card ’<card>’

Then the card authentication screen is shown And authentication error ’<error>’ is displayed Examples:

|card | error |

|sdacdas | You have placed an unknown or damaged card |

|ABC\DEE | You have placed an unknown or damaged card |

Výpis 4: Ukázka definice testovacích scénářů CardAndLoginAuthentication v jazyce Gherkin 4.2.2 Implementace

V okamžiku, kdy jsem měl v souboru s definicí testů pokryty všechny testovací případy a tento soubor byl schválen zkušenějším kolegou, jsem mohl přistoupit k samotné implementaci jednot- livých kroků testů a testů samotných. V rámci tohoto kroku jsem vytvářel třídy, které imple- mentovaly jednotlivé kroky definované v souborech s definicí testů v jazyce Gherkin.

Tyto třídy jsem vytvářel tak, aby se daly opakovaně používat. Například jsem vytvořil třídu PinAuthenticationSteps, ve které jsou implementovány kroky související s autentizací PIN

22

(23)

kódem. Tuto implementaci jsem poté mohl využít i pro další sadu testů, ve které je autentizace PIN kódem kombinována s jinou autentizační metodou. Na následujícím výpisu zdrojového kódu 5 je za konstrukcí [Binding] specifikováno, ve kterých souborech s definicí testů můžeme kroky implementované ve tříděPinAuthenticationStepsvyužít. V tomto případě se jedná o soubory s definicí testů s názvy "PIN Authentication", "Card or PIN Authentication"a "Card and PIN Authentication".

namespace YSoft.Sqta.IntegrationTests.Specs.Steps {

[Binding]

[Scope(Feature = "PIN Authentication")]

[Scope(Feature = "Card or PIN Authentication")]

[Scope(Feature = "Card and PIN Authentication")]

internal class PinAuthenticationSteps : StepsBase {

[When(@"user authenticates with valid PIN ’(.*)’")]

public void WhenUserAuthenticatesWithValidPin(string pin) {

CommonAuthenticationSteps.FakeAuthenticationStatus(

AuthenticationStatus.Accepted);

var loginPage = GetCurrentPage<AuthenticationPage>();

loginPage.LoginWithPin(pin);

}

[When(@"user authenticates with invalid PIN ’(.*)’")]

public void WhenUserAuthenticatesWithInvalidPin(string pin) {

CommonAuthenticationSteps.FakeAuthenticationStatus(

AuthenticationStatus.InvalidCredentials);

var loginPage = GetCurrentPage<AuthenticationPage>();

(24)

a jejího vzhledu. Tato třída také obsahuje volání sloužící k inicializaci testovacího uživatele a testovaného terminálu.

Volání třídyFakeCallsbyly využity zejména ve tříděUiTest, ve které byly implementovány metody, které se volají jako první při spuštění a poslední při ukončení celého běhu testů. Tyto metody byly uvozeny atributy [BeforeTestRun]a [AfterTestRun]. Podobná situace nastává v případě jednotlivých testovacích scénářů. Nastavení prostředí před testem a jeho uvedení do původního stavu po testu náleží metodám, které byly uvozeny atributy [BeforeTest] a [AfterTest].

Další vrstvou implementace testů, která je využívána testovacími třídami, je vrstva jednotli- vých webových stránek. Pro kontrolu, navigaci a manipulaci s nimi je využit návrhový vzor Page Object[7]. Jedná se o návrhový vzor, který se využívá při testování webových aplikací. Smyslem tohoto návrhového vzoru je zapouzdření elementů HTML stránky a také akcí, které na stránce můžeme vykonat a kontrolovat. Další výhodou tohoto návrhového vzoru je oddělení webové stránky od kódu samotného testu. Pokud tedy specifikace chování systému zůstává stejné, ale na webové stránce dojde ke změnám, stačí, aby byla upravena třída, která popisuje webovou stránku.

namespace YSoft.Sqta.IntegrationTests.PageObjects {

public class PageBase {

public IWebDriver Driver => UiTests.BrowserAdapter.Browser;

public IWebElement GetElementById(string id) {

var elements = Driver.FindElements(By.Id(id));

if (elements.Count == 0) {

return null;

}

if (elements.Count == 1) {

return elements[0];

}

throw new MultipleElementsWithSameIdException();

} } }

Výpis 6: Třída PageBase v jazyce C#

24

(25)

Pro každou obrazovku terminálu byla implementována jedna třída. Všechny tyto třídy jsou rozšířením třídy PageBase (viz. výpis 6), která umožňuje vyhledávaní elementů na jednot- livých stránkách. V rámci implementace testů na autentizační obrazovce byla využita třída AuthenticationPage, která rozšiřuje třídu PageBase, a je implementována podle návrhového vzoru Page Object[7], jehož použití můžete vidět na výpisu zdrojového kódu 7. Jednotlivé ele- menty autentizační stránky, které v testech využíváme, jsou v dané třídě deklarovány jako pro- měnné typu IWebElement. Abychom mohli tyto proměnné využívat, musí před jejich použitím dojít k namapování na určitý element webové stránky. Tohoto mapování je docíleno pomocí volání funkce FindElement na proměnné Driver, která je typu FirefoxDriver a je zděděna ze třídy PageBase. FunkceFindElementmůže na webové stránce vyhledávat elementy pomocí jména, jména třídy, id, tagu nebo XPath výrazu. Akce, které na stránce chceme provádět, jsou metody implementované v daných třídách. Mezi tyto akce patří například vyplnění textového pole pro přihlašovací jméno a heslo nebo kliknutí na přihlašovací tlačítko.

public class AuthenticationPage : PageBase, IPage {

public string Url => "auth";

const string pinCodeText = "PIN Code";

const string loginText = "Login";

const string cardActivationText = "Card activation";

public IWebElement LoginButton =>

Driver.FindElement(By.Id("js-login-button"));

public IWebElement HomeButton =>

Driver.FindElement(By.Id("js-home"));

public IWebElement PinInputField =>

Driver.FindElement(By.Id("js-credentials-pin"));

public IWebElement AuthenticationError =>

Driver.FindElement(By.Id("js-instruction-error"));

(26)

public void ErrorMessageIsDisplayed(string errorMessage) {

AuthenticationErrorMessageElement.Displayed.Should().BeTrue();

AuthenticationErrorMessageElement.Text.Should().Be(errorMessage);

}

public void IsPinAuthenticationPageDisplayed() {

PinInputField.Displayed.Should().BeTrue();

LoginButton.Displayed.Should().BeTrue();

}

public void ClickOnLoginButton() {

LoginButton.Click();

}

public void InputActivationCode(string activationCode) {

ActivationCodeInputField.SendKeys(activationCode);

}

public void IsLanguageIconVisible() {

LanguageSelectionButton.Displayed.Should().BeTrue();

}

public void ClickOnLanguageButton() {

LanguageSelectionButton.Click();

} }

Výpis 7: Třída AuthenticationPage využívající návrhový vzor Page Object

26

(27)

4.2.3 Prezentace výsledků testů

V rámci běhu jednotlivých testů byla pro lepší přehlednost výsledků testů implementována tvorba snímků obrazovky terminálu po vykonání jednotlivých kroků testovacího scénáře(viz. vý- pis 8). Tyto snímky se ukládají ve struktuře složek takovým způsobem, že nejvýše je složka s datem běhu testů, následuje složka s názvem sady testů, dále pak složka s číslem a názvem konkrétního testu a v ní se nacházejí soubory pojmenované po jednotlivých krocích testu. V této složce se v případě neúspěchu testu vytvoří soubor, který nás informuje o selhání testu. Celá tato struktura se po dokončení všech testů transportuje pomocí skriptu napsaném v jazyce Python na web, který slouží pro přehledné zobrazení jednotlivých testů a jejich výsledků. Na tomto webu se archivují běhy testů po jednotlivých dnech.

public void TakeScreenshotAfterStep(string path, string screenshotName) {

Directory.CreateDirectory(path);

screenshotName = Path.Combine(path, $"{screenshotName}.{screenshotsExtension }");

var screenshot = browserAdapter.GetScreenshot();

var bmpScreen = new Bitmap(new MemoryStream(screenshot.AsByteArray));

var maxWidth = 0;

var maxHeight = 0;

for (var i = 0; i < bmpScreen.Width; i++) {

if (bmpScreen.GetPixel(i, 0) != Color.FromArgb(255, 255, 255, 255)) maxWidth = i;

}

for (var j = 0; j < bmpScreen.Height; j++) {

if (bmpScreen.GetPixel(0, j) != Color.FromArgb(255, 255, 255, 255))

(28)

5 Uplatněné znalosti a dovednosti

Za důležité znalosti a dovednosti získané v průběhu studia oboru Informatika a výpočetní tech- nika na Fakultě informatiky VŠB-TUO, které jsem uplatnil v rámci mé odborné praxe, považuji zejména znalosti získané v předmětech, které se věnují především programování a programova- cím jazykům.

Za hlavní považuji předměty Programování I, Programování II a Programovací jazyky I, které položily základ mým programátorským schopnostem od použití vývojového prostředí po prin- cipy objektově orientovaného programování. Vezmu-li v úvahu, že většinu času mé praxe jsem programoval automatizované testy v jazyce C#, pokládám za neméně důležité znalosti a doved- nosti nabyté v předmětech Programovací jazyky II, ve kterém jsem se naučil základní techniky programovacího jazyka C#, a Architektura technologie .NET, který se věnuje technologiím fra- meworku .NET více do detailu. Dále bych chtěl také zmínit předměty Algoritmy I a Algoritmy II, díky kterým jsem byl schopen využít datové struktury a také snadněji a efektivněji řešit úkoly se kterými jsem pracoval. Z předmětu Úvod do softwarového inženýrství jsem si v praxi vyzkoušel, jak funguje agilní metodika inkrementálního vývoje Scrum. V neposlední řadě musím zmínit znalosti anglického jazyka, bez kterého se v současné době v oblasti IT neobejdeme.

28

(29)

6 Scházející znalosti a dovednosti

Vzhledem k tomu, že se má odborná praxe týkala zejména testování, bylo nutné se většinu po- stupů, praktik a jednotlivých typů testů samostatně doučit a nastudovat, jelikož jsem se s touto oblastí v rámci studia detailněji nesetkal a nezabýval se jí. Právě díky neznalosti oblasti tes- tování jsem musel blíže nastudovat testovací frameworky používající se ve firmě. Tyto nástroje a frameworky byly detailněji popsány v části týkající se použitých technologií.

Další oblastí, ve které jsem neměl dostatečné znalosti a zkušenosti byla oblast týkající se Gitu, což je distribuovaný systém správy verzí. V této oblasti jsem se seznámil a využíval nástroj Sourcetree, který nabízí grafické rozhraní nad Gitem a zjednodušuje práci s jeho repozitáři.

(30)

7 Závěr

V průběhu mé odborné praxe ve společnosti Y Soft Corporation a.s. jsem se po úvodním se- známení s fungováním společnosti a vstupních školeních začal věnovat manuálním testům. Tyto manuální testy mi sloužily jako vstupní brána ke znalostem z oblasti testování, ale hlavně díky nim jsem se seznámil s hlavním produktem firmy, což je YSoft SafeQ, jeho principy a fungová- ním. Díky těmto znalostem jsem se mohl věnovat svému hlavnímu úkolu a tedy automatizovaným testům.

Z celkového hlediska hodnotím tuto odbornou praxi velice pozitivně, a to především jako přínos pro mou budoucí kariéru. Podařilo se mi uplatnit spoustu znalostí a dovedností, které jsem získal v průběhu studia na Fakultě elektrotechniky a informatiky VŠB-TUO, a mohl jsem tyto znalosti a dovednosti více zdokonalit. Dále jsem se naučil několik nových technologií, postupů a praktik, ale také to, jak funguje práce v týmu.

30

(31)

Literatura

[1] Y Soft Corporation [online]. 2017 [cit. 15.3.2018], Dostupné z http://www.ysoft.com/cs [2] ReSharper: Visual Studio Extension for .NET Developers by [online]. 2018 [cit. 23.3.2018],

Dostupné zhttps://www.jetbrains.com/resharper

[3] Binding Business Requirements to .NET Code [online]. 2018 [cit. 14.3.2018], Dostupné z http://specflow.org/

[4] Reference-Cucumber [online]. 2018 [cit. 14.3.2018], Dostupné z https://cucumber.io/

docs/reference

[5] Selenium - Web Browser Automation [online]. 2017 [cit. 23.3.2018], Dostupné z https:

//www.seleniumhq.org/

[6] Jira | Issue & Project Tracking Software | Atlassian [online]. 2017 [cit. 23.3.2018], Dostupné z https://www.atlassian.com/software/jira

[7] PageObject [online]. 2013 [cit. 23.3.2018], Dostupné zhttps://martinfowler.com/bliki/

PageObject.html

[8] GALIN, Daniel. Software Quality Assurance: From Theory to Implementation. Addison Wesley, 2003.

Odkazy

Související dokumenty

Měl jsem za úkol vytvořit plugin, který bude sloužit pro vytváření dárků k objednávce, které zákazník dostane zdarma při nákupu nad určitou cenu.. Tento plugin má za

4.4.2.2 Vstup pro výběr předdefinovaných dat s výběrem pouze jedné položky HTML elementy typu input nebo select, díky kterým si zákazník vybere nastavení z předdefi-

Byl to sice úkol jen na cca 3 hodiny a šlo čistě jen o připravení vzhledu, ale byl jsem rád, že jsem tento úkol dostal právě já, protože drobné úpravy na již

Student měl během práce na starosti vývoj automati- zovaných testů uživatelského rozhraní pro programy Sencha Architect, Sencha Themer a Liferay, dále se podílel na úpravě

Architekti TIXu v něm navíc z nějakého důvodu nechtějí implementovat stránkování a řazení záznamů na straně serveru, z toho důvodu to bylo nutné implementovat ve

Vývoj DivvyPay je poměrně dynamický, průběžně vznikají nové funkce a opravují se chyby, je proto nutné mít vždy k dispozici poslední sestavení aplikace.. 4.2.2

Jelikož byly všechny reporty vytvářeny v jednom souboru, mohl být pro zrychlení práce využit sdílený dataset – takovýto dataset se dá použít pro více reportů zároveň,

Tuto aplikaci jsem vytvářel v jazyce JAVA ve frameworku Vaadin, jako aplikační server byl zvolen WildFly a pro zabezpečení aplikace byl využit KeyCloak.... 3 Seznam úkolů