• Nebyly nalezeny žádné výsledky

Absolvování individuální odborné praxe

N/A
N/A
Protected

Academic year: 2022

Podíl "Absolvování individuální odborné praxe"

Copied!
42
0
0

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

Fulltext

(1)

Absolvování individuální odborné praxe

Individual Professional Practice in the Company

Petr West

Bakalářská práce

Vedoucí práce: RNDr. Eliška Ochodková, Ph.D.

Ostrava, 2021

(2)

Abstrakt

Cílem této bakalářské práce je popsat mé působení, přínos a získané znalosti ve společnosti

Y Soft Corporation, a.s. Během praxe jsem se věnoval testování robotickou rukou v rámci týmu pro vývoj, výzkum a testovaní. Za pomocí programovacího jazyku Python a Robot Framework jsem testoval software YSoft SAFEQ, který je mimo jiné nasazený i na VŠB-TU. Dále jsem se věnoval komunikaci testu se systémem, přidáváním dat do databáze pro rozpoznávání obrazovek, definici tlačítek a sekvenci příkazů použivaných k práci s robotem.

Klíčová slova

automatizace, testování, praxe, Python, LeSS framework, Robot Framework, Y Soft Corporation, a.s., YSoft SAFEQ, bakalářská práce

Abstract

The goal of this bachelor thesis is to delineate my performance, benefit and acquired knowledge in Y Soft Corporation, a.s. During my practice, I focused on robotic arm testing within the research, development and testing team. Using the programming language Python and Robot Framework, I tested software for printers called YSoft SAFEQ, which is also deployed at VŠB-TU. Furthermore, I worked on communication between test and system, optimizing database data for screen recognition, button definitions and instruction sequences utilized by the robot.

Keywords

automation, testing, practice, Python, LeSS framework, Robot Framework, Y Soft Corporation, a.s., YSoft SAFEQ, bachelor thesis

(3)

Poděkování

Rád bych na tomto místě poděkoval RNDr. Elišce Ochodkové, Ph.D. pro rychlé a cenné poznámky a za čas strávený konzultacemi. Dále bych poděkoval firmě Y Soft Corporation, a.s za možnost této bakalářské praxe. Dále bych chtěl poděkovat Mgr. Jiřímu Pellešovi, který mě vedl ve firmě, všem kolegům a rodičům.

(4)

Obsah

Seznam použitých symbolů a zkratek 6

Seznam obrázků 7

1 Úvod 8

2 Y Soft Corporation, a.s. 9

2.1 O firmě . . . 9

2.2 O týmu . . . 9

2.3 V době pandemie . . . 10

3 Přiřazené úkoly během praxe 11 3.1 Seznámení se s YSoft SAFEQ . . . 11

3.2 Manuální testování tiskárny Ricoh . . . 12

3.3 Popis instalace a nastavení single server deployment . . . 13

3.4 Příprava robota a kamery pro testy . . . 14

3.5 Obecný postup testu . . . 14

3.6 Seznam všech testů . . . 15

3.7 Dynamické načítání knihoven . . . 30

4 Použitý SW a HW 32 4.1 YSoft SAFEQ . . . 32

4.2 Robot Framework . . . 33

4.3 Python . . . 33

4.4 RMS Web Interface . . . 34

4.5 RQA GUI a IMPROC . . . 36

4.6 Atlassian tools . . . 36

4.7 LeSS Framework . . . 37

4.8 Miro . . . 39

4.9 mRemoteNG . . . 39

(5)

4.10 PyCharm CE . . . 40

5 Závěr 41

Literatura 42

(6)

Seznam použitých zkratek a symbolů

HW – Hardware

SW – Software

RQA – Robotic Quality Assuance

RMS – RQA Management System

IMPROC – Image Processing

LeSS – Large-Scale Scrum

MFD – Multifuction Device

PC – Personal Computer

IP – Internet Protocol

API – Application Programming Interface

XML – Extensible Markup Language

HP – Hewlett-Packard Development Company, L.P.

SMTP – Simple Mail Transfer Protocol

JSON – JavaScript Object Notation

HTTP – Hypertext Transfer Protocol

URL – Uniform Resource Locator

AD – Active Directory

IDE – Integrated Development Environment

(7)

Seznam obrázků

4.1 Přihlášení pomocí Karty nebo PIN . . . 35 4.2 LeSS Framework [9] . . . 39

(8)

Kapitola 1

Úvod

Cílem mé bakalářské práce bylo vykonat praktickou stáž ve firmě Y Soft Corporation, a.s. speciali- zující se na tiskové řešení ve velkých a středních podnicích, které používají aplikaci YSoft SAFEQ.

Důvod, proč jsem si vybral bakalářskou praxi byl ten, že jsem chtěl poznat, jak probíhá vývoj softwaru ve velké softwarové společnosti a ve velkém týmu lidí, a zkusit si, jaké to je být součástí celého procesu vývoje a testování softwaru. Jedním z dalších důvodů bylo ověřit si, že to co studuji na Vysoké škole Báňské - Technické univerzitě, budu schopen využívat dále v reálném pracovním životě a snad přispěji i nějakými novými poznatky, nápady a pohledy do firmy.

Svoji bakalářskou praxi jsem si vybral na webu www.katis.vsb.cz, kde mě zaujala především praxe ve společnosti Y Soft Corporation, a.s. Pro nástup na požadovanou praxi bylo potřeba absol- vovat pohovor, na kterém si zaměstnanci firmy ověřili znalosti, které budu potřebovat pro vykonání praxe. Ověření znalostí bylo jak po teoretické stránce, tak i po stránce praktické, kdy bylo potřeba pseudo kódem napsat krátký program. Byl jsem mile překvapen v jakém příjemném duchu byl celý pohovor vedený. Následně jsem byl začleněn do týmu pro vývoj, výzkum a testování YSoft SAFEQ aplikace na různých typech tiskáren a pro různé verze YSoft SAFEQ aplikace.

Moje bakalářská práce je rozdělena do čtyř kapitol. V první kapitole budu popisovat společnost Y Soft Corporation, a.s., tým ve kterém jsem pracoval a čím bylo fungovaní firmy specifické ve spojitosti s pandemií viru Covid-19. V další kapitole popisuji jaké úkoly jsem během odborné praxe vykonal, které problémy se vyskytly a co bylo potřeba udělat pro jejich překonání a odstranění.

V třetí kapitole se podíváme na použité technologie, software, programovací jazyky, frameworky, firmou vyvinuté nástroje a aplikace třetích stran. V poslední čtvrté kapitole uzavírám mou odbornou praxi a shrnuji získané znalosti a nové dovednosti, které jsem během odborné praxe získal.

(9)

Kapitola 2

Y Soft Corporation, a.s.

2.1 O firmě

Y Soft Corporation, a.s. [1] je softwarová a hardwarová společnost, která se zabývá správou tisku.

Společnost byla založena v roce 2000 studenty v Brně. Aktuálně ve společnosti Y Soft Corporation a.s.

pracuje kolem 400 zaměstnanců v 17 zemích světa. Více než 20 000 zákazníků a partnerů po celém světě důvěřuje řešením společnosti Y Soft Corporation, a.s. Hlavní myšlenkou je snížit náklady na tiskové úkony, zvýšit efektivitu tisku a jeho bezpečnost. YSoft SAFEQ je specializovaný software, který je pomocníkem pro dosažení stanovených cílů ve středních a velkých firmách. Y Soft Cor- poration, a.s. vyvíjí také hardware, který pomáhá s připojením multifunkčních a jednoúčelových zařízení do YSoft ekosystému. Především se jedná o čtečku karet a YSoft SAFEQ Terminal. Další HW, který Y Soft Corporation a.s. přidala do své nabídky produktů, je YSoft BE3D eDee, který koupila společně se společností be3D. YSoft BE3D eDee je 3D tiskárna, která slouží pro tisk 3D tiskových úloh. Pro tvorbu 3D modelu slouží aplikace DeeControl 2. Pro správu tisku 3D tiskárny slouží YSoft SAFEQ. YSoft BE3D eDee nelze používat bez YSoft SAFEQ. Dálší produkt je YSoft OMNI Bridge, které slouží pro připojení síťové tiskárny do cloudu, stejně jako YSoft SAFEQ Cloud.

2.2 O týmu

Při nástupu do firmy jsem byl zařazen do ostravského týmu, který se zaměřuje na vývoj, výzkum a testování YSoft SAFEQ aplikace na konkrétních typech tiskáren. Tým, ve kterém jsem působil, měl 7 členů. Většina členů studovala na VŠB-TU. Celkově je tým složen z lidí do 35 let, takže v tomhle ohledu není žádný problém s komunikací nebo s pohledem na svět, což přispívá k lepší náladě v týmu.

Pracovní postup týmu je orientovaný do dvoutýdenních sprintů. S tímto časovým plánem jsou členové týmu nuceni dokončit dohodnutou práci. Každý den probíhá stand-up setkání, kde jsou všichni členové informováni o aktuálním stavu inkrementu produktu. Každý člen týmu představí,

(10)

co udělal včera a co má v plánu udělat dnes. Na konci každého sprintu má tým společné setkání, kde zhodnotí práci za posledních 14 dní. Ze začátku jsem se do těchto setkaní nezapojoval, protože jsem se potřeboval seznámit s produktem YSoft SAFEQ a s vnitřním fungováním společnosti. Posléze jsem se občas účastnil stand-up setkání jako pasivní posluchač.

Celý tým je složený tak, aby byl schopný vyřešit jakýkoliv inkrement produktu. Jsou zde za- městnanci, kteří pracují v C#, Python, Java i další, kteří ovládají Robot Framework.

Ve firmě používáme LeSS framework pro plánování objemu práce pro každý tým. LeSS framework je nástroj od společnosti LeSS, který bude popsán následně. Hlavní důvod proč používáme pro plá- nování LeSS framework je efektivita, protože od určitého počtu lidí efektvita s narůstajícím počtem lidí klésá, místo aby stoupala. Další z důvodu je přehlednost o tom, co který tým plánuje a na čem aktuálně pracuje. Jsou zde zaměstnanci, kteří seřazují úkoly podle priority a týmy si pak vyberou, kterým inkrementem produktu se budou v následujícím sprintu zabývat.

2.3 V době pandemie

V roce 2020 vypukla po celém světě pandemie Covid–19. Tato pandemie se nepromítla jen do života každého z nás, ale i do fungování podniků a živnostníků. V létě a na podzim v roce 2020 situace při pohovoru a nástupu do firmy Y Soft Corporation, a.s. nebyla ještě tak dramatická. Dá se říct, že všechno běželo v omezeném režimu, ale většina zaměstnanců společnosti Y Soft Corporation, a.s.

docházela v běžném režimu na pracoviště. Už v této době nám byla nabídnuta možnost pracovat z domu, ale této možnosti využila jen část zaměstnanců. Pro jednodušší začlenění do kolektivu spolupracovníků jsem pravidělně docházel do kanceláře v centru Ostravy. Další důvod proč jsem docházel fyzicky na firmu byla možnost změny prostředí, protože není jednoduché být pořád na jednom místě společně se stejnými lidmi. Dále komunikace probíhala hlavně přes Microsoft Teams nebo pomocí Cisco Webex.

Zpětně mohu říct, že tyto dvě roční období se daly považovat za přípravu na práci z domu. Tento režim bylo nutno aplikovat na začátku roku 2021. Díky tomuto rozhodnutí se všichni zaměstnanci přesunuli na práci z domu. Z tohoto důvodu bylo nutno mnohem víc využívát komunikaci přes internet a hodně věcí se zpomalilo z důvodu pomalejší odezvy na různé dotazy. Největší problém nastal při fyzickém restartu MFD, doplnění papíru v tiskárně nebo při kalibraci robotů. Vedení firmy všem zaměstnancům dovolilo přístup na firmu pouze z neodkladných důvodů. Jeden kolega byl vybrán a docházel pravidělně na Ostravskou pobočku, aby pomáhal s řešením problémů, které nešly vyřešit vzdáleně.

Celkově mě hodně mrzí, že situace byla tak špatná. Hodně jsem se těšil při nástupu na nový kolektiv a do nového prostředí. Velmi mě zajímalo, jak funguje tak velká společnost a celkově vývoj SW, HW a samotného testování. V prvních dnech jsem poznal, jak příjemný kolektiv je na ostravské pobočce. Bohužel jsem si tento způsob fungování ve společnosti mohl zažít jen pár týdnů.

(11)

Kapitola 3

Přiřazené úkoly během praxe

3.1 Seznámení se s YSoft SAFEQ

odhadovaná doba úkolu: 16h

reálná doba úkolu:20h

První dny ve společnosti Y Soft Corporation, a.s. jsem strávil seznámením se se samotným pro- duktem YSoft SAFEQ. Společnost Y Soft Corporation, a.s. má pro tyto případy připravenou sadu videí, které popisují pozadí, na jakém principu celý YSoft SAFEQ funguje. Videa popisují, které komponenty jsou součástí, a jak mezi sebou jednotlivé komponenty komunikují. Ve verzi YSoft SA- FEQ 6 je vždy jeden systém, na který jsou dále napojeny spooler servery, kterých může být v celé síti víc. Takzvané spooler servery slouží pro práci s tiskovými úlohami a pro komunikaci s MFD.

Tento model pro mě nebyl podstatný, protože moje bakalářská práce byla cílená na starší verzi YSoft SAFEQ. YSoft SAFEQ 6 vychází z verze YSoft SAFEQ 5. Verze YSoft SAFEQ 5 neobsahuje žádné spooler servery. Všechny potřebné úkony se odehrávají na hlavním serveru.

Poté bylo potřeba absolvovat školení z bezpečnosti práce a požární bezpečnosti, kdy každá část byla ukončena testem.

V dalších dnech jsem měl za úkol si sám projít strukturu projektu a kódu, abych se v něm uměl zorientovat a věděl, kde co hledat. Při této činnosti jsem přišel na spoustu pomocníků, které nabízí IDE PyCharm CE, ať hledání v celém projektu, prokliknutí na jednotlivé použití nebo definice funkcí a metod.

Dále jsem s dalším studentem absolvoval školení od kolegů, kteří nám více vysvětlili strukturu jednotlivých testů. Jak samotné testy spouštět, kde hledat chybové hlášení a výstupy z testů, jak v nich najít užitečné informace a mnoho dalších užitečných rad, které mi dále pomohly v řešení problémů.

Dále nám ukázali obecnou strukturu testu, a co které klíčové slovo znamená. V testu se vyskytují metody a funkce, které volají odpovídající funkce v Python. Název funkce nebo metody v Robot

(12)

Framework obsahuje mezery mezi jednotlivými slovy. V Python musí tyto metody nebo funkce přesně názvem odpovídat názvu v Robot Framework, ale místo mezer se použijí podtržítka. Tento model je potřeba dodržovat, aby všechno správně spolupracovalo.

3.2 Manuální testování tiskárny Ricoh

odhadovaná doba úkolu: 8h

reálná doba úkolu:16h

První úkol, jehož cílem bylo více pochopit, jak testy fungují a co přesně musí vykonat. Dostal jsem za úkol projít celou sadu 15 testů ručně, kdy jsem já simuloval robotickou ruku a dělal přesně to, co mi řekne test. Všechny testy jsem testoval proti YSoft SAFEQ 6, protože pro tuto verzi je kompletní komunikace s produktem hotová. Šlo pouze o pochopení, jak testy probíhají. Pro tento způsob testování bylo potřeba správně nastavit několik parametrů v souboruconfig.robot. Jednalo se třeba o IP adresu tiskárny, IP adresu systému, verzi YSoft SAFEQ, výrobce tiskárny, aby se tiskárna správně naistalovala. Další důležitý parametr oznamuje v jakém režimu bude test probíhat. Test může probíhat v plně automatickém režimu nebo v poloautomatickém režimu.

Dále bylo potřeba zažádat si o server, kde je potřeba nainstalovat YSoft SAFEQ 6 aplikaci, která dále sloužila jako systém. Tento proces probíhá jako instalace většiny aplikací na Microsoft Windows, kdy je potřeba proklikat se programem pro instalaci a vyplnit několik parametrů. Jak správně nastavit systém, a jaké problémy jsem řešil, budou popsány v další části.

Po nastavení serveru a potřebných parametrů byla možnost spustit testy a začít testovat YSoft SAFEQ 6 na tiskárně. Testy se dají rozdělit na testy pro přihlášení, testy na tisk, kopírování a skenování. Jako první přichází testy pro přihlášení. Do systému je možnost přihlásit se pomocí pinu, uživatelského jména a hesla, pomocí karty nebo po kombinaci pinu a karty, a dalších kombinací, které YSoft SAFEQ nabízí.

Dále bylo potřeba otestovat tisk. U tisku bylo důležité, zda YSoft SAFEQ 6 správně určilo cenu za tisk, kterou aplikace může strhávat z částky, kterou má uživatel u svého účtu v rámci YSoft SAFEQ aplikace. Cena pro barevný a černobílý tisk je totiž rozdílná.

V další části se jednalo o testy na skenování přes scan workflows do mailu nebo na sdílený disk na síti. I u skenování bylo potřeba ověřit správné zaúčtování provedené operace. Před každým testem bylo potřeba tiskárnu přeinstalovat. Celý tento proces řešil test sám. Po projetí všech testů bylo potřeba výsledek zadat do systému s komentářem, proč některé testy skončily s chybou.

Jediný test, který skočil s chybou, byl barevný tisk. Tento problém vznik, protože tiskárna nepodporovala barevný tisk. Tím pádem stačilo tento důvod uvést do reportu testů a brát tento test za blokovaný.

(13)

3.3 Popis instalace a nastavení single server deployment

odhadovaná doba úkolu: 1h

reálná doba úkolu:2h

Jako první je nutné si zarezervovat server, na kterém budeme instalovat samotný systém. Pro tyto účely máme ve společnosti Y Soft server, kde je možnost si přesně nastavit parametry serveru a zare- zervovat si ho. Následně je potřeba se připojit na server, kde si stáhneme verzi YSoft SAFEQ, kterou potřebujeme. V mém případě se jednalo o poslední verzi YSoft SAFEQ 5 nebo YSoft SAFEQ 6.

Celá instalace je velice jednoduchá a intuitivní. Je potřeba postupovat krok po kroku a vyplnit jen pár údajů. Jeden z údajů, které je potřeba nastavit, je heslo pro databázi. Pro jednoduchost testování používáme jednoduchá hesla. Dále je potřeba nastavit SMTP server, který bude systém používat. Při instalaci stačí zadat cokoliv, neboť při každém spuštění testu se nastaví SMTP server, který je nadefinovaný v konfiguračním souboru. Tohle je celý proces instalace.

Pro přihlášení jako administrátor je potřeba použít uživatelské jménoadmina hesloadmin. Jako administrátor máte právo na vytváření uživatelů, přidávání tiskáren, vytváření ceníku za jednotlivé tiskové úlohy, vytvářet Scan workflow a další nastavení, které YSoft SAFEQ poskytuje.

Jako administrátor je potřeba aktivovat licenci pro správnou funkci celé YSoft SAFEQ 5 apli- kace. Přidání licence je pouze kopírovaní řady čísel, které dostaneme po zaplacení licence. Pro účely testování máme na síťovém disku vygenerované licence pro každou verzi YSoft SAFEQ.

Pro testování je dobré si v nastavení povolit pár věcí, které ulehčí řešení některých chyb, které mohou vzniknout. Je dobré povolit si zobrazení tiskových úloh, které jsou ve formátu, který není podporovaný. Konkrétně se v YSoft SAFEQ 5 jedná o parametr stda-enqueueBadJobs, který je defaultně nastaven na disabled a pro zobrazení je potřeba ho nastavit ho na enabled.

Dále doporučuji nastavit si pro testováníallows card self-assignment via card actiovation code. Tento parametr je defaultně nastaven na disabled a musí se nastavit na enabled pokud chceme přiřadit kartu uživateli pomocí aktivačního kódu, který přijde uživateli do mailu.

Další možností, jak přiřadit uživateli kartu aniž by administrátor musel být zapojen do procesu, je pomocí uživatelského jména a hesla. Aby to bylo možné, je potřeba povolit v nastavení také parametr allow card self-assignment with username and password, který je defaultně nastaven na disabled. V případě těchto dvou parametrů se na základně testu nastaví jen jeden, který je potřeba pro konkrétní test.

(14)

3.4 Příprava robota a kamery pro testy

odhadovaná doba úkolu: 0,5h

reálná doba úkolu:1h

Přípravu robota a kalibrace kamery není potřeba provádět před každým testem. Tento postup je potřeba aplikovat, pokud robot nedokáže přesně kliknout na specifické místo na obrazovce. Příprava kamery je důležitá pro rozpoznávání obrazovek, protože rozpoznávání probíha podle detekce hran.

Nejdříve se podíváme na správné nastavení kamery. Kalibrace kamery probíha na RMS webu, který slouží pro správu všech kamer a robotů. Kalibrace kamery je velice jednoduchá. Jsou dvě možnosti jak kameru nakalibrovat - automaticky nebo manuálně. Při automatické kalibraci umělá inteligence hledá specifický papír, který definuje rohy obrazovky. Pokud se to nepodaří, automatická kalibrace zahlásí chybu a zobrazí se uživateli ruční kalibrace kamery. Při této kalibraci je potřeba pouze přesně nadefinovat čtyři rohy obrazovky. Tyto rohy jsou spojeny úsečkami, které definují ohraničení celé obrazovky. Nastavení probíha pouze roztažením vrcholů obdélníku do čtyř rohů.

Po nastavení všech rohů a potvrzení, se dostaneme k dalšímu kroku. Je potřeba zkontrolovat, zda u některé z hran není vidět černý okraj, který je nežádoucí. Pokud je někde vidět černý okraj, je potřeba vrátit se k předchozímu kroku a přesněji nastavit jednotlivé rohy. Pokud už nikde nemáme žádný černý okraj stačí jen kalibraci potvrdit a uložit. Celou kalibraci je možné provést vzdáleně.

Při kalibraci robota se celý proces odehrává opět na RMS webu, na kterém dochází k ovládání robotické ruky. Při této kalibraci je potřeba být fyzicky přítomen u robotické ruky. V první řadě je potřeba postavit robotickou ruku na střed ovládání tiskárny, tak aby robotická ruka dokázala dosáhnout do všech rohů obrazovky a na všechny ovládací prvky, které jsou potřeba. V dalším kroku je nutné správně nastavit pozici všech rohů obrazovky. Pro každý roh je nezbytné určit x, y, z souřadnici. Při kalibraci se nastavují pouze tři rohy a poslední se dopočítává. Pro ovládání robotické ruky je možné použít mobilní telefon nebo použít klávesy W, S pro osu x, A, D pro osu y, R, F pro osu z a Q, E pro nastavení úhlu doteku. Úhel doteku je potřeba mít co nejvíce kolmý k obrazovce, aby nedocházelo k nežádoucímu posunu po obrazovce.

3.5 Obecný postup testu

Se svým nadřízeným jsem se domluvil na obecném postupu u každého testu, na kterém budu pra- covat. Prvním úkolem bylo potřeba vytvořit v Jira úkol, kde bylo uvedeno jak daný test spustit. V další části byla tabulka, která obsahovala seznam všech úkolů, které bylo nutné provést u každého testu. Prvním úkolem bylo vytvořit, popsat a zařadit všechny obrazovky, které jsou nezbytné pro konkrétní test. Další krok spočíval ve vytvoření, umístění a nastavení elementů, které robot potře- buje ke správnému dokončení testu. V pořadí třetím úkolem bylo vytvořit flow, které bude robot používat. Poté následovalo ověření, upravení nebo vytvoření všech potřebných HTTP dotazů pro

(15)

komunikaci testu se systémem, ať už pro nastavení všech potřebných parametrů pro test, nebo ově- ření výstupů v systému. Při těchto http dotazech jsem se inspiroval u funkcí, které jsou potřeba pro komunikaci s YSoft SAFEQ 6. Konkrétním problémům a http dotazům se budu věnovat u každého testu zvlášť. Posledním úkolem bylo ověřit, zda robot sám správně projde a vyhodnotí celý test.

3.6 Seznam všech testů

V následující části budou popsány všechny testy, na kterých jsem pracoval a jaké konkrétní problémy jsem u nich musel řešil. U každého testu je potřeba mít nadefinované referenční obrazovky, které jsou pro konkrétní tiskárnu s konkrétní verzí YSoft SAFEQ.

Před každým testem je nezbytné přidat tiskárnu do systému a potom samotnou tiskárnu naista- lovat. Následně je nutné vytvořit uživatele s odpovídajícím Username,Password,PIN a cardActi- vationCode. K tiskárně je důležité přiřadit správný Price list, kde je definována částka za jednotlivé operace. Poté se spustí samotný test, při kterém se v prvním kroku nastaví proměnné jako PIN, Username,Password aCardCode, s kterými bude robot pracovat. V případě přidání karty pomocí aktivačního kódu se nastaví ještě cardActivationCode. Pokud se při testu bude tisknout nebo kopí- rovat, test nastaví čidlo do výchozího nastavení, které zkontroluje, zda byl papír vytištěn a vyjel z tiskárny.

Následně proběhne samotný test a všechna potřebná komunikace mezi testem a systémem, aby se ověřila správnost testu. Nejčastěji se ověřuje, zda práce správně proběhla a vyúčtovaná cena za práci odpovída předpokládané ceně.

Po ukončení každého testu je potřeba odstranit uživatele, price list, odebrat a odinstalovat tiskárnu, aby byla připravena na další testování.

3.6.1 Authentication with correct PIN

odhadovaná doba úkolu: 16h

reálná doba úkolu:32h

Jedná se o první test, který jsem dostal za úkol vyřešit a zároveň si vyzkoušet, jak celé testování funguje na YSoft SAFEQ 5. Tento test spočívá v přihlášení pomoci pinu, ověření zda je uživatel přihlášený a také následným odhlášením. Jedná se o jeden z nejjednodušších testů.

Prvním úkolem bylo zjistit jak přesně spustit test pro YSoft SAFEQ 5. První soubor, ve kterém mi bylo kolegou doporučeno hledat, byl config.robot. V tomto souboru se nastavují všechny para- mentry, které jsou potřeba pro instalaci tiskárny, nastavení připojení k systému, nastavení dalších detailů o serveru, na kterém běží systém. Po prostudování toho souboru jsem zjistil, že podle jednoho parametru test zjistí o jakou verzi YSoft SAFEQ se jedná. Jedná se o parametr SAFEQ_VERSION.

Pokud tato proměnná není součástí souboru config.robot, jedná se o verzi YSoft SAFEQ 6. V mém

(16)

případě bylo potřeba proměnnou SAFEQ_VERSION nastavit nasafeq5. Na základě této proměnné se stahují všechny potřebné soubory, které jsou pro obě verze rozdílné.

Po nastavení této proměnné test pořád nešel spustit. Tentokrát hlásil chybu s importováním knihoven. Díky verzování kódu na stash jsem byl schopen jednoduše dohledat, které knihovny byly odebrány. Po vrácení potřebných knihoven se test podařilo spustit.

Další chyba, která se objevila, nastala při přidání ORS skupiny na systém. Tiskárny se dají shlukovat do jednotlivých skupin. Pro tento účel ve YSoft SAFEQ existují ORS skupiny. Při přidání ORS skupiny docházelo k chybě při zjišťováníORS group id. Při volání funkce, která zjišťovala ID skupiny, přicházel špatný datový formát ve vstupním parametru. Funkce očekávala jméno ORS group, ale přicházelo id ORS group, konkrétně 1. V první chvíli jsem přepsal hledání podle čísla, což vyřešilo problém. S odstupem času jsem ale zjistil, že problém byl v defaultně nastaveném parametru v jiné funkci, který se předával do funkce pro hledání ORS group id. Po změně z 1 na Default nastala opět možnost hledat pomocí názvu ORS skupiny.

Při instalaci tiskárny nastal nejen problém s instalací, ale také s přidáním do systému. Tento problém nastal, protože v payload, který obsahuje nastavení všech proměnných, které se posílají pomocí HTTP POST na systém, obsahoval špatně pojmenované názvy proměnných. Při nastavení těchto parametrů se použily názvy proměnných, které se používaly ve verzi YSoft SAFEQ 6. Problém jsem vyřešil vytvořením slovníku, který obsahoval správné klíče a správnou IP adresu tiskárny, uživatelské jméno pro instalaci a heslo. Po správném nastavení těchto parametrů se tiskárna začala instalovat správně.

Po správné instalaci tiskárny se podařilo spustit samotný test. Při spuštění testu se objevila řada chyb s obrazovkami. První chyba nastal ihned po instalaci zařízení. Na tiskárně se po instalaci objevila obrazovka, kterou robot neznal. Tuto chybu vyřešilo přidání této obrazovky do databáze.

Po vyřešení této chyby se objevil také problém s černou obrazovkou. Tento problém se podařilo vyřešit stejným způsobem jako předchozí.

Pokud se robotu nepodaří správně rozpoznat nebo se dostat na obrazovku, kterou očekává, robot se pokusí vícekrát po sobě tento úkon zopakovat. Robot využil této možnosti, když narazil na obrazovku, kterou neznal. Chybu se podařilo vyřešit přidáním potřebné obrazovky do databáze.

Další možnost jak může robot řešit neznalost obrazovky, na kterou narazí, je využití HW tlačítka.

Pomocí tohoto tlačítka se dokáže vrátit na úvodní obrazovku. Této možnosti robot využil, když narazil na další obrazovku, kterou neznal. Přidáním obrazovky do databáze se tuto chybu podařilo vyřešit.

V další kroku se objevila chybová hláškaAuthentication step is required but Authentication me- thod is not provided to test properties. Make sure to call SetAuthenticationMethod. Tato chybová hláška oznamuje, že je potřeba být přihlášen, aby se robot dostal na požadovanou obrazovku. U každé obrazovky se dá tato vlastnost nastavit a může způsobovat tuto chybovou hlášku. Nejedno- dušší řešení bylo změnit nastavení u konkrétní obrazovky a test mohl pokračovat dále.

(17)

Další chyba zněla taktoFlow: AuthenticationCardOrPin, SQTA does not exist with Device Mo- del: 45. Tato chybová hláška říká, že neexistuje flow pro konkrétní tiskárnu. Díky mému špatnému předpokladu, že se bude volat flow s názvemAuthenticationPIN, se vyskytla tato chybová hláška. V testu je definované flow s názvem AuthenticationCardOrPin. Stačilo pouze nastavit sekvenci úkonů ve správném flow a problém byl vyřešen.

Jedna z dalších chyb byla Could not reach “Home screen”: Could not found path that connects Main Menu and desired Home Screen. Tato chyba říká, že test neví přes který element se dostane na obrazovku s názvem Home screen. Tento problém byl vyřešen správným nastavením obrazovky na kterou se dostane přes kliknutí na konkrétní element.

Při ukončení testu se vyskytla chyba při mazání Device group. Payload, který je potřeba nastavit a poslat přes HTTP POST na sever byl nastaven správně. Špatně však byla nastavena URL, kam se HTTP POST posílá a po změně URL byla chyba vyřešena. URL, která byla nastavena, odpovídala jiné verzi YSoft SAFEQ.

Stejný problém nastal při odhlášení ze systému. Stránka, kterou test očekával neexistovala pro YSoft SAFEQ 5. Při HTTP GET dotazu přicházela odpověď s HTTP stavovým kódem 500, který značí, že daná stránka neexistuje. Opět stačilo pouze nastavit správnou URL a problém byl vyřešen.

3.6.2 Authentication with correct card(Card or PIN)

odhadovaná doba úkolu: 16h

reálná doba úkolu:20h

Tento test ověřuje přihlášení uživatele pomocí karty. Při tomto způsobu testu musí být k tiskárně připojena čtečka karet, pokud čtečku karet neobsahuje samotná tiskárna. Ke každému robotu je připojený emulátor, který generuje 16 bitový řetězec v hexadecimálním kódu. Tento emulátor leží přímo na čtečce karet kde se simuluje přiložení karty(swipe), který je jeden z obecných elementů.

U tohoto testu jsem nemusel řešit žádný problém s komunikací mezi testem a systémem. Tyto problémy jsem vyřešil již u prvního testu. Obecně se u tohoto testu vyskytovaly velmi podobné chyby jako u prvního testu a jednalo se především o chybějící flow. Po přesném nastavení sekvence elementů ve flow, pak test proběhl v pořádku a nebylo třeba řešit žádné přidání chybějící obrazovky nebo elementu. Obrazovka byla úplně stejná jako u testuAuthentication with correct PIN a nebylo potřeba na ni nic přidávat. Robot v prvním kroku provede swipe. Pokud je konkrétní 16 bitový retězec uložen u daného uživatele, je tento uživatel okamžitě přihlášen a nachází se na úvodní obrazovce YSoft SAFEQ. V opačném případě je přístup zamítnut.

Odhlášení probíhá pomocí elementu s názvem Log out, který uživatele odhlásí. Po odhlášení uživatele dojde opět ke smazání uživatele a samotné tiskárny ze systému, a k ověření, zda je v systému záznam o přihlášení.

(18)

3.6.3 Authentication with correct username password

odhadovaná doba úkolu: 16h

reálná doba úkolu:14h

V tomto testu půjde o přihlášení pomocí uživatelského jména a hesla. Po vyplnění je uživatel přihlášený, poté se uživatel odhlásí, a tímto celý test končí.

Pro tento test bylo potřeba přidat novou obrazovku, protože nová obrazovka byla odlišná oproti obrazovce, která se používá pro přihlášení pomocí pinu nebo karty. Obrazovka pro příhlášení pomocí pinu a obrazovka pro příhlášení pomocí uživatelského jména a hesla má stejnou funkci, proto patří do stejné skupiny. Je zbytečné mít více skupin obrazovek pro přihlášení a zároveň by bylo pro robota složité rozpoznat, o kterou obrazovku se jedná.

Dále bylo potřeba na obrazovku přidat elementy, které slouží pro vložení uživatelského jména a hesla. Při tomto testu jsem zjistil, že je možnost mít více elementů přes sebe. Následně ve flow určíme, které má robot použít.

V dalším kroku bylo potřeba vytvořit správné flow.

V době, kdy jsem připravoval tento test, docházelo ke změně komunikace mezi robotem a počíta- čem, ke kterému je robot připojen. Komunikace začala využívat nové API. Díky této změně přestala fungovat většina testů na různé verze YSoft SAFEQ. Pro odstranění problému jsem kontaktoval zkušenějšího programátora, který stál za změnou komunikace s robotem. Pro odstranění problému bylo potřeba pouze stáhnout projekt, ve které byla celá komunikace řešena. Po stažení projektu a modifikace komunikace s robotem bylo všechno vyřešeno.

Při tomto testu jsem se zabýval pouze problémem se špatně nastaveným portem pro PC, který ovládá robota a vznikl z důvodu přechodu na jinou komunikaci, kterou jsem popisoval dříve. Po spravném nastavení portu se test rozeběhl a proběhl celý správně.

3.6.4 Card assignment with login and password

odhadovaná doba úkolu: 16h

reálná doba úkolu:12h

Jak už název napovídá, test spočívá v přiřazení karty uživateli, která je přiřazena pomocí uživatel- ského jména a hesla a následně se robot odhlásí. Dále se robot pokusí přihlásit pomocí karty, kterou uživateli přiřadil, a ověřit, zda se úspěšně přihlásil. V posledním kroku se znovu odhlásí a test je ukončen.

Pro tento test byla potřeba přidat novou obrazovku, která slouží pro přiřazení karty pomocí uživatelského jména a hesla. Při hlédání teto obrazovky jsem zjistil, že je potřeba spravně si nastavit jeden parametr, který jsem popisoval v dřívější kapitole o instalaci a nastavení systému [3.3], a to ten aby se potřebná obrazovka zobrazila.

(19)

Po přidání obrazovky bylo však potřeba na nové stránce nadefinovat všechny potřebné elementy, které jsou potřeba pro tento test. Jednalo se především o elementy pro zadaní uživatelského jména a hesla.

Následně bylo potřeba ješte vytvořit flow, a test byl hotový. Při tomto testu jsem zjistil, že není potřeba do flow přidávat sekvenci kroků, která je obsažena v jiném flow. Stačí pouze v testu zavolat potřebné flow a této vlastnosti jsem dále využíval u dalších testů.

V tomto testu jsem řešil pouze chyby, které se vyskytovaly u předchozích testů. Jednalo se například o jinak pojmenovanou obrazovku, nebo špatné pořadí kroků ve flow.

3.6.5 Card assignment with card activation code

odhadovaná doba úkolu: 16h

reálná doba úkolu:20h

Tento test spočívá v přiřazení karty pomocí kódu, který uživateli přijde do e-mailu. Tento kód je potřeba zadat na tiskárně a karta se uživateli přiřadí. Následně je potřeba ještě ověřit, zda přihlášení pomocí karty funguje správně.

Při vytváření uživatele v systému bylo nutno uživateli přidat e-mailovou adresu, na kterou bude odeslán aktivační kód. Test si následně tento mail otevře a vytáhne si konkrétní aktivační kód pro daný test. Při tomto testu se vyskytl problém se získáním aktivačního kódu z e-mailu. Tento problém je způsoben tím, že více uživatelů v systému má nastavený stejný e-mail, na který se má aktivační kód odesílat. Při ručním ukončení testu před doběhnutím celého testu se nesmaže uživatel, který má přiřazenou e-mailovou adresu, která je určena pro testování. Při dalším spuštění testu Card assignment with card activation code je vytvořen uživatel se stejným e-mailem, který zapříčiní tuto chybu.

Jako u každého testu bylo potřeba přidat novou obrazovku. Tato obrazovka patřila do stejné skupiny jako obrazovka u předchozího testu [3.6.4].

Dále bylo potřeba vytvořil elementy, přes které se zadá aktivační kód, a který přijde uživateli v e-mailu.

Flow obsahovalo posloupnout kroků, které jsou potřeba udělat pro spravné přiřazení karty uži- vateli.

Chyby, které se vyskytly u tohoto testu, byly způsobeny špatnou kalibrací robota. Robot ne- dokázal přesně kliknout na konkrétní element. Tento problém se podařilo vyřešil kalibrací robota [3.4].

Další chybou, která se objevila u tohoto testu, způsobovala, že se nedařilo najít aktivační kód v e-mailu. Chyba byla způsobena špatným řetězcem, který se hledal v textu e-mailu. Řetězec odpo- vídal verzi YSoft SAFEQ 6. Bylo potřeba doplnit podmínku, aby se zavolala funkce se správným vstupním řetězcem na základě verze YSoft SAFEQ, kterou získáme ze systému pomocí funkce parse_safeq_version.

(20)

3.6.6 Copy A4 BW and check accounting

odhadovaná doba úkolu: 16h

reálná doba úkolu:40h

Tento test spočívá v černobílem kopírování pomocí nativní aplikace tiskárny. V tomto případě YSoft SAFEQ slouží pouze pro přihlášení na MFD a zaúčtování kopírovaní v systému. V prvním kroku je potřeba se přihlásit a následně se otevře aplikace pro kopírování. Zde je potřeba z nabídky vybrat černobílé kopírování, formát papíru a spustit samotné kopírování. Dále je nutné ověřit, zda došlo k samotnému tisku a papír vyjel z tiskárny a musí se ověřit správné zaúčtování. V posledním kroku je nutné se odhlásit.

Pro tento test bylo potřeba přidat 3 obrazovky pro aplikaci na kopírování. Na první obrazovce se volila barva tisku. Druhá obrazovka obsahovala nastavení velikosti papíru a poslední obrazovka byla úvodní pro aplikaci kopírování. Každá obrazovka je jiným typem a bylo tedy nutné přesně definovat, jak jdou tyto obrazovky za sebou.

Dále bylo potřeba přidat všechny elementy, které jsou pro tento test nutné. Jednalo se hlavně o zvolení barvy kopírování a rozměru papíru a ve flow bylo potřeba seřadit elementy do správného pořadí.

Při tomto testu jsem řešil především problém se zaúčtováním a ověřením, zda kopírování pro- běhne správně. Při chybném zaúčtování docházelo k tomu, že cena za práci se brala z Default Price List, který neměl nastavené hodnoty. Při této příležitosti jsem zjistil, že pro každý test se do systému posíla zvláštní Price list. Tento Price list obsahuje seznam cen za různé úkony. Při posí- lání Price list do systému, docházelo k chybě. Tato chyba byla způsobena URL, která byla špatně nastavena. Po správném nastavení URL se Price list správně přidával do systému. Dále bylo po- třeba opravit přidání tiskárny do systému. Při přidání tiskárny bylo potřeba nastavit správnéname Price list, podle kterého se mělo zaúčtovávat. Jednalo se o spravné nastavení proměnné v payload a konkrétně se jednalo o proměnouprice-list-name. Tuto proměnnou jsem nastavoval pomocí funce _get_price_list_name [3.1].

def _get_price_list_name(price_list_id):

response = HttpGeneral.http_post("/servlet/web.pricelists.

PriceListsServlet", {’act’: ’data’, ’search’: ’’, ’skip’: 0, ’order’:

1, ’includedColumns’: ’name’}) price_list_name = "Default Price List"

if response.status_code != 200:

raise Exception(f"Error while get price list. Error status_code - { response.status_code}, Error message - {response.text}")

for item in json.loads(response.text)[’items’]:

if item[’id’] == price_list_id:

(21)

price_list_name = item[’name’]

return price_list_name

Ukázka kódu 3.1: funkce _get_price_list_name

Další chyba nastala při získávání názvu souboru z kopírování. Při vytváření funkce pro hledání jsem se inspiroval ve funkci pro YSoft SAFEQ 6. Hned první problém nastal v souboru, kde se má potřebný řetězec hledat. Po zjištění, ve kterém souboru a který řádek hledat, bylo nutné získat název tiskové úlohy, který jsem potřeboval.

3.6.7 Copy A4 color and check accounting

odhadovaná doba úkolu: 16h

reálná doba úkolu:4h

Test spočívá v kopírování pomocí nativní aplikace tiskárny. Aplikace YSoft SAFEQ zde slouží pouze pro přihlášení a zaúčtování barevného kopírování. Jako první je nutné se přihlásit a po příhlášení je potřeba otevřít aplikaci pro kopírování. Zde je nutné vybrat barevné kopírování, formát papíru a následně spustit samotné kopírování. Dále je potřeba ověřit, zda došlo k samotnému tisku a papír vyjel z tiskárny. V dalším kroku se ověří správné zaúčtování a uživatel se odhlásí.

Pro tento test nebylo nutné přidávat žádné nové obrazovky. Potřebné obrazovky byly přidány už v testu Copy A4 BW and check accounting [3.6.6].

Pro správné vykonání testu bylo nutné přidat element, kterým se zvolí barevný tisk při kopíro- vání. Tento element se nachazí pod elementem pro černobílý tisk.

Dále bylo nutné doplnit sekvenci kroků do flow. Flow je uplně stejné jako flow u testuCopy A4 BW and check accounting [3.6.6] a jediný rozdíl je u volby barvy tisku.

Tento test nepřinesl žádné chyby, neboť všechny byly vyřešeny u předchozího testu Copy A4 BW and check accounting [3.6.6]. Bylo nutné pohlídat správné zaúčtování.

3.6.8 Print all with accounting

odhadovaná doba úkolu: 16h

reálná doba úkolu:8h

Test spočívá ve vytištění všech čekajících tiskových úloh, které má uživatel na svém účtu. Při tomto testu je nutné ještě před přihlášením vybrat možnost tisku všech tiskových úloh, které uživatel má na svém seznamu. V dalším kroku se uživatel přihlásí a všechny jeho tiskové úlohy se začnou tisknout a následně je potřeba se jen odhlásit a systém provede zaúčtování. V tomto případě se jedná o další z jednoduchých testů.

(22)

Při tomto testu nebylo potřeba přidávat žádné nové obrazovky, neboť stačí pouzeLogin screen a Main menu, které už máme z předchozích testů.

V dalším kroku bylo potřeba přidat element, který slouží pro označení tisku všech tiskových úloh.

Flow obsahuje pouze 2 kroky, které je nutné vykonat. Je nutné zaškrtnout, že se mají vytisknout všechny tiskové úlohy a následně udělat swipe.

Při tomto testu nevznikly žádné chyby. U předchozích testů jsem vyřešil celou komunikaci se systémem a chyby, které by se mohly objevit u tohoto testu.

3.6.9 Secure print with accounting

odhadovaná doba úkolu: 16h

reálná doba úkolu:20h

Test simuluje tisk tiskové úlohy pomocí YSoft SAFEQ aplikace a následně se ověří zda papír vyjel z tiskárny a došlo ke správnému zaúčtování. V prvním kroku je potřeba se přihlásit a následně otevřít aplikaci, která slouží pro tisk tiskových úloh. Poté je potřeba zvolit tiskovou úlohu, kterou chceme vytisknout a v dalším kroku je potřeba spustit samotný tisk. Následně je nutné pouze správně započítat tiskovou úlohu a v posledním kroku se odhlásit.

Bylo nutné přidat novou obrazovku, která je potřeba pro tisk tiskových úloh pomocí YSoft SAFEQ aplikace. Na této obrazovce je možné vidět všechny tiskové úlohy, které uživatel má a může si jednotlivé tiskové úlohy označit a vytisknout. Pro snazší práci s tiskárnou je zde tlačítko pro odhlášení uživatele, a proto není nutné nejprve vypínat aplikaci a následně se odhlašovat.

Pro tento test bylo potřeba vytvořit více elementů, kdy každý element reprezentoval jednu tiskovou úlohu. Všechny tyto elementy mají stejné vlastnosti a proto nebylo nutné každý element nastavovat zvlášť. Stačí všechny elementy přidat do skupiny a všem elementům se nastaví stejné vlastnosti. Další element slouží pro spuštění samotného tisku.

Při vytváření flow bylo potřeba robota navést přes správný element do YSoft SAFEQ aplikace pro tisk. Zde robot označí tiskovou úlohu a posléze spustí samotný tisk. V posledním kroku se robot jen odhlásil, ale tento krok není součástí tohoto flow. Flow pro odhlášení uživatele je samostatné a zavolá se následně.

Při tomto testu jsem řešil problém právě se zmiňovanou skupinou elementů. Správně jsem při- pravil flow, ale element nebyl součásti skupiny, kterou test předpokládal. Tento problém jsem vyřešil s pomocí spolupracovníka, který mi ukázal, jak element přidat do skupiny a jaké možnosti nastavení u skupiny, potažmo elementu máme.

Po vyřešení problému se skupinou se vyskytla další chyba, která souvisela s nastavením vlastností elementu. Test předpokládal, že každý element má nastavenu vlastnost pro rozpoznání, zda je nebo není označen. Po nastavení obou vlastností u elementu se podařilo test úspěšně dokončit.

(23)

3.6.10 Secure print with accounting and RAW print backend

odhadovaná doba úkolu: 16h

reálná doba úkolu:14h

Jedná se o test, který testuje tisk tiskové úlohy pomocí YSoft SAFEQ aplikace. Tento test je téměř stejný jako předchozí, ale používá se zde jiný protokol pro posílání tiskové úlohy ze systému na tiskárnu. V prvním kroku je nezbytné se přihlásit pro používání samotné aplikace. V dalším kroku robot otevře aplikaci pro tisk tiskových úloh. Poté je potřeba zvolit, kterou tiskovou úlohu chceme vytisknout. Následně zbývá spustit samotný tisk, ověřit správné zaúčtování, a zda papír vyjel z tiskárny a poté se odhlásit.

Pro tento test nebylo potřeba přidávat nové obrazovky, protože jsou úplně stejné jako obrazovky pro předchozí test [3.6.9].

Nebyla zde nutnost vytvářet ani nové flow, protože se použije stejné jako u testu Secure print with accounting [3.6.9].

Při tomto testu bylo nutno řešit pouze jednu chybu spojenou s protokolem, který se použije při komunikaci s tiskárnou. Tento protokol bylo nutné nastavit při instalaci samotné tiskárny. Pro nastavení protokolu pro komunikaci s tiskárnou slouží v payloadu parametr dev_backend, který se nastaví na TCP/IP Raw v případě, že vstupní parametr kwargs.get(’backend type’) je nastavený na RAW, jinak se dev_backend nastaví na IPP. Tento parametr je jediný, který rozhoduje, jaký protokol pro komunikaci se použije.

Tím, že test nedokáže sám rozpoznat jaký protokol pro komunikaci s tiskárnou použil, bylo složité najít jaký je rozdíl mezi testemSecure print with accounting a Secure print with accounting and RAW print backend. Díky pomoci spolupracovníka, který mi objasnil rozdíl, jsem byl schopen správně aplikovat použitý protokol. Test totiž vždy proběhl celý v pořádku a nezahlásil žádnou chybu, protože všechno ostatní proběhlo v pořádku.

3.6.11 Direct print with accounting

odhadovaná doba úkolu: 16h

reálná doba úkolu:40h

Tento test simuluje tisk tiskové úlohy, která je vytištěna ihned po odeslání do systému. Pro tento test je potřeba na tiskárnu přidat direct queue, který slouží pro přímý tisk. Je potřeba poslat tiskovou úlohu do systému. Při tomto testu není nutné se přihlásit a tím pádem ani odhlásit.

Pro tento test není potřeba přidávat žadné nové obrazovky. Při tomto testu se všechno odehrává na obrazovce Login screen, případně na obrazovceMain Menu.

Nebylo nutné vytvářet žádný nový element ani žádné flow, protože zde není nutné klikat na žádný element.

(24)

Bylo nutné pouze zaručit, aby se na tiskárnu přidaldirect queue. Pro přidání direct queue bylo nejjednodušší přeinstalovat tiskárnu s přidanýmdirect queue. Pro správnou instalaci bylo nutné při- dat do paylod tři paramentry, které slouží pro nastavenídirect queue. Jedná se o paramentydirectid, directname a directsafe. Parametrydirectid a directsafe bylo nutné nastavit na 0. U parametrudi- rectid se může zdát zvláštní, že id nastavuji na defaultní hodnotu, ale vždy bude pouze jedendirect queue pro konkrétní tiskárnu. Po odeslání paylodu pomocí HTTP POST je nutné počkat až se tiskárna přeinstaluje. Původně jsem měl tento čas definovaný pevně na 40 sekund, ale po konzultaci mi bylo doporučeno, abych toto čekání přepracoval na dynamické.

Pro dynamické čekání bylo nutné v určitém časovém odstupu kontaktovat systém s dotazem v jakém kroku se reinstalace tiskárny nachází. Pomocí HTTP POST jsem dostal odpověď s potřebnými informacemi a následně stačilo pomocí JSON knihovny odpověd zpracovat a vyhodnotit.

def set_direct_queues(device_id, *queues, device_group_id=1):

devices = _get_devices(device_group_id) for device in devices:

if device[’id’] == device_id:

vendor = device[’vendor’]

device_object = device

if vendor == "LEXMARK":

from Lexmark import Lexmark

lex = Lexmark(get_device_ip(device_id)) lex.configure_before_safeq_installation() http_device_payload = HttpDevicesPayload()

http_device_payload.update_payload_direct_print(device_object, queues) payload = http_device_payload.get_payload()

# save device form and in case of reinstallation wait for reinstallation to finish

HttpGeneral.http_post(_DEVICES_SAVE_SERVLET, payload) check_device_reinstalation()

log.info("Device reinstalled after adding a direct queue.", also_console=

True)

Ukázka kódu 3.2: funkce set_direct_queue

Ve výpisu zdrojového kódu 3.2 můžeme vidět získání všech tiskáren, které patří do stejné skupiny.

V další části dochází k výběru zařízení, které má stejné id jako jedevice_id. Dále je nutné vytvořit a upravit payload, který potřebujeme pro správnou instalaci. Následně tento payload pošleme pomocí HTTP POST do systému a počkáme, až se tiskárna přeinstaluje. V následujícím výpisu zdrojového kódu 3.3 můžeme vidět kontrolu reinstalace tiskárny.

(25)

def check_device_reinstalation():

status = False

end = time.time() + 30

while (not status) and time.time() < end:

response = HttpGeneral.http_post(’/servlet/web.

EmbeddedTerminalReinstallProgressServlet’, {’groupIds’: 1}) if len(json.loads(response.content)[’devices’]) != 0:

status = True time.sleep(1)

assert status, f"(Re)Installation of device did not start successfully after 30s"

log.info("Device (re)installation started", also_console=True) finished = False

end = time.time() + 300

while (not finished) and time.time() < end:

response = HttpGeneral.http_post(’/servlet/web.

EmbeddedTerminalReinstallProgressServlet’, {’groupIds’: 1})

if json.loads(response.content)[’devices’][0][’progress’][-1][’severity

’] == ’ERROR’:

raise AssertionError(f"Installation of device did not finish successfully. ERROR - {json.loads(response.content)[’devices

’][0][’progress’][-1][’text’]}")

finished = json.loads(response.content)[’devices’][0][’progress’][-1][’

finished’]

log.info("Device (re)installation is in progress.", also_console=True) time.sleep(2)

assert finished, f"(Re)Installation of device did not finish successfully after 300s"

log.info("Device successfully installed.", also_console=True)

Ukázka kódu 3.3: funkce check_device_reinstalation

Další chyba, která se vyskytla, způsobovala, že se netiskla tisková úloha, která se poslala do systému. Po dlouhém hledání a porovnávání paylodu, který posílám v rámci testu a payloadu, který se použije při ručním přidání, jsem zjistil, že paramentrsendToDS byl nastavený špatně. Bylo tedy nutné ho nastavit na 0 pro správné dokončení testu. Tento problém se vyskytl u všech testů, které provádí tisk pomocí YSoft SAFEQ aplikace.

(26)

3.6.12 Scan to folder with accounting

odhadovaná doba úkolu: 16h

reálná doba úkolu:30h

Test spočívá ve skenování pomocí YSoft SAFEQ aplikace. V prvním kroku je nutné se přihlásit a následně otevřít YSoft SAFEQ aplikaci pro skenování. Zde je potřeba vybrat Scan workflow, které má nastavené všechny potřebné parametry a spustit samotné skenování. Poté se robot odhlásí.

V posledním kroku je nutné ověřit, že při skenování vznikl soubor, který se uložil na sdílené uložiště a správně se zaúčtoval.

Pro tento test bylo nutné přidat jednu obrazovku, která je potřeba pro skenování. Na této obrazovce je seznamScan workflow a tlačítko pro spuštění skenování.

Při vytváření elementů bylo potřeba vytvořit element pro každéScan workflowa jeden element pro spuštění samotného skenování. Další element slouží pro odhlášení uživatele. Elementy, které představují jednotlivé Scan workflow, bylo nutné přidat do skupiny a určit, jak test pozná rozdíl mezi zvoleným a nezvoleným Scan workflow.

Při vytváření flow bylo nutné pouze zvolit potřebnéScan workflow a spustit skenování.

První problém, který jsem musel rešit nastal při přidáváníScan workflow pomocí XML souboru.

Tento XML soubor nebyl vůbec vytvořený a bylo důležité zjistit jaký obsah je nutný pro spravné nastaveníScan workflow. Pro zjištění potřebných parametrů si stačilo jedenScan workflow vytvořit ručně a následně tyto hodnoty nastavit v XML souboru. Strukturu XML souboru jsem našel na firemní wikipedii, kde se nachází mnoho užitečných rad.

Další problém nastal s odesíláním tohoto XML souboru do systému. Bylo nutné určit, kde přesně je XML soubor uložen, následně tento soubor otevřít a pomocí HTTP POST poslat do systému. Při vytváření této funkce jsem se inspiroval u YSoft SAFEQ 6. Po následné domluvě s kolegou bylo nutné obě funkce pro různé verze YSoft SAFEQ upravit, tak aby jsme v testu neměli podmínku, protože přesné určení místa XML souboru můžeme určit následně ve funkci [3.4] při odesílání souboru.

def import_xml_workflow(xml_file_location, workflow_name):

location = Constants.get("qa share sq5 imports")

files = {’file’: open(f"{location}{xml_file_location}", ’rb’)}

response = HttpGeneral.http_post("/servlet/web.ScanSettingsServlet?act=

upload", dict(), files) if response.status_code != 200:

raise AssertionError("Error while importing scan workflow from file {}. Reason: {}".format(xml_file_location, response.content)) return get_workflow_id(workflow_name)

Ukázka kódu 3.4: funkce import_xml_workflow

(27)

Po odesláníScan workflowbylo nutné zajistit, aby testovací uživatel měl k tomutoScan workflow přístup. Na tento problém bylo potřeba vytvořit funkci, která tento problém odstraní. Jednalo se o funkci grant_access_to_scan_worflow.

def grant_access_to_scan_workflow(workflow_id, role_id):

response = HttpGeneral.http_post("/servlet/web.ScanAccessSettingsServlet", {’act’: ’save’, ’id’: 0, ’role’: role_id, ’template’: workflow_id, ’ flag’: 1})

if response.status_code != 200:

raise AssertionError(f"Error while adding to scan_access- error{

response.text}")

Ukázka kódu 3.5: funkce grant_access_to_scan_workflow

Ve výpisu zdrojového kódu 3.5 můžeme vidět garantování přístupu na Scan workflow pomocí HTTP POST, který obsahuje payload s potřebnými proměnnými.

Objevil se další problém, neboť obrazovka aplikace pro tisk a obrazovka aplikace pro skenování jsou velice podobné. Test nedokázal přesně určit, na které obrazovce se nachází, a proto test skončil neúspěchem. Tento problém se podařilo vyřešil pomocí Feature regions[4.4], které jsou pro tento problém určeny.

3.6.13 Check preview of waiting job

odhadovaná doba úkolu: 16h

reálná doba úkolu:24h

Jak už název testu sám napovídá, bude se jednat o kontrolu náhledu testu, která se nachází u tiskové úlohy. Při tomto testu je nezbytné se přihlásit a otevřít aplikaci pro tisk. Poté je nutné otevřít si detail tiskové úlohy, kde se nachazí náhled samotné tiskové úlohy. Po ověření, že náhled odpovídá předpokládanému náhledu, je nutné se pouze odhlásit a tímto test končí. Pro jednodušší rozhodování je náhled tiskové úlohy nahrazen modrým obdélníkem, který je vidět na celém náhledu.

Pro tento test bylo nutné přidat jednu obrazovku, která právě obsahovala náhled tiskové úlohy.

Na tuto stránku se robot dostane pomocí elementu jobinfo.

Bylo nutné vytvořit element, pomocí kterého se robot dostane na náhled tiskové úlohy. Tento element se nachází na konci řádku tiskové úlohy. Dále bylo potřeba přidat element, který určuje kde se nachází samotný náhled tiskové úlohy. Poslední element slouží pro ukončení náhledu.

Při vytváření flow stačilo ve správném pořadí poskládat potřebné elementy. Nejdůležitější ele- ment je ten, kde se nachází náhled tiskové úlohy. Na základě jeho pozice se určuje, jaká barva se na náhledu vyskytuje.

(28)

Problém, který se objevil, byl spojený s náhledem tiskové úlohy. Aby se robotu lépe rozlišoval náhled tisku, je potřeba změnit náhled práce. V prvním kroku je nutné najít na serveru, kde je tisková úloha uložena. Pro YSoft SAFEQ 5 se tiskové úlohy nachází ve složceSafeQ5/server/spool. Tato složka obsahuje podsložky podle konkrétního dne a každá tato podsložka obsahuje tiskové úlohy za konkrétní den. Následně bylo nutné vyměnit soubor, který reprezentuje konkrétní tiskovou úlohu. Pro změnu souboru je použita metodareplace_preview_of_waiting_job. Tuto metodu bylo potřeba upravit, aby podporovala zároveň komunikaci pro YSoft SAFEQ 6 tak i pro YSoft SAFEQ 5. Bylo nutné na zakladě verze YSoft SAFEQ nastavit místo, kde se má tisková úloha vyměnit a jakou příponu bude soubor mít. Oba parametry se podařilo nastavit pomocí 2 podmínek v kódu.

def replace_preview_of_waiting_job(fsp_ip, job_guid, filename="

rendered_preview.png", sq_tools_version=’6’):

file_path = get("qa share jobs") + filename if sq_tools_version == ’5’:

job_store_path = get("orssq5 spool directory", fsp_ip) + str(date.today ())

else:

job_store_path = get("job store directory", fsp_ip)

edited_job_store_path = ’\\’.join(job_store_path.replace("/", " ").replace ("\\", " ").replace(",", " ").split())

copy_command = "copy {} \\\\{}\\{}\\{}.{}".format(file_path, fsp_ip, edited_job_store_path, job_guid, "sqjob.pre" if sq_tools_version == ’5

’ else "png")

result = subprocess.check_output(copy_command, shell=True)

log.info("Result from command {} is: {} ".format(copy_command, result)) return

Ukázka kódu 3.6: metoda replace_preview_of_waiting_job

Ve výpisu zdrojového kódu 3.6 můžeme vidět, jak celá výměna náhledu tiskové úlohy probíhá.

Proměnná job_store_path se nastaví na základě proměnné sq_tools_version. Následně je potřeba na základě sq_tools_version nastavit příponu souboru, který bude nahrazen novým náhledem. Pro verzi YSoft SAFEQ 5 je potřeba příponu souboru nastavit na .sqjob.pre a pro YSoft SAFEQ 6 je nutná použít příponu .png.

Další problém, který se vyskytl, byl spojený s určením barvy náhledu tiskové úlohy. Na kameře je vidět, že náhled je modrý, ale robot určuje, že se jedná o šedou barvu. Tento problém se podařilo vyřešit posunutím elementu, který vymezuje místo, podle kterého se určuje barva náhledu.

(29)

3.6.14 Reinstall device

odhadovaná doba úkolu: 16h

reálná doba úkolu:4h

Test spočívá v reinstalaci tiskárny a následném přihlášení uživatele, které ověří, že reinstalace tis- kárny proběhla v pořádku. V prvním kroku se tiskárna nainstaluje jako při každém testu. Následně dojde k reinstalaci tiskárny. V posledním kroku se robot přihlásí a odhlásí.

Pro tento test není nutné přidávat žádné nové obrazovky, elementy ani vytvářet nové flow.

Jediná chyba, která nastala, byla způsobena chybějící funkcí. Konkrétně se jednalo o funkci rein- stall_embedded_terminal, která sloužila pro reinstalaci tiskárny. Po doplnění této funkce nic nebrá- nilo uspěšnému dokončení testu.

Ve funkci reinstall_embedded_terminal [3.7] je nutné nejprve kontaktovat systém, aby jsme získali všechny potřebné údaje pro reinstalaci. Poté bylo nutné připravit payload ve funkci up- date_payload_reinstall [3.8], který se následně posílá do systému pro reinstalaci. Na konec je po- třeba jen počkat, než proběhne celá reinstalace.

def reinstall_embedded_terminal(device_id):

devices = _get_devices() for device in devices:

if device[’id’] == device_id:

device_object = device

httpdevicepayload = HttpDevicesPayload()

httpdevicepayload.update_payload_reinstall(device_object) payload = httpdevicepayload.get_payload()

HttpGeneral.http_post(_DEVICES_SAVE_SERVLET, payload) check_device_reinstalation()

Ukázka kódu 3.7: metoda reinstall_embedded_terminal def update_payload_reinstall(self, device):

update_payload = {

’id’: device[’id’],

’sendToDS’: ’0’,

’dev_name’: device[’name’],

’dev_ip’: device[’ip’],

’dev_group’: device[’group’][’id’],

’driver’: device[’driverName’],

’driverCounters’: device[’driverNameCountersOnly’],

’dev_vendor’: device[’vendor’],

(30)

’dev_username’: device[’localAuthName’],

’dev_userpass’: device[’localAuthPassword’],

’dev_auth_status’: device[’authenticationSettings’][’status’],

’dev_auth_method’: device[’authenticationSettings’][’method’],

’dev_spi_status’: device[’SPISettings’][’status’],

’dev_spi_type’: device[’SPISettings’][’type’],

’dev_folders’: device[’SPISettings’][’printJobListStyle’],

’dev_scan_status’: device[’scanSettings’][’status’],

’dev_acc_status’: device[’scanSettings’][’status’],

’dev_backend’: device[’backend’]

}

self.payload.update(update_payload)

Ukázka kódu 3.8: metoda update_payload_reinstall

3.7 Dynamické načítání knihoven

odhadovaná doba úkolu: 16h

reálná doba úkolu:24h

Dynamické načítání knihoven bylo nutné aplikovat, když při spuštění testů pro verzi YSoft SAFEQ 5 se nedařilo načíst potřebné knihovny. Tento problém způsoboval chyby hlavně v komunikaci mezi testem a systémem. Při testech na přihlášení se tento problém neprojevil, protože nebylo nutné žadné kontroly výstupu ze systému. Problém nastal u testů pro kopírování a samotný tisk tiskových úloh.

Pro přípravu všech testů jsem si nastavil napevno, které knihovny se mají použít. Po zprovoznění všech testů bylo nutné načítaní knihoven vyřešit.

První návrh bylo načíst potřebné knihovny pro YSoft SAFEQ 6 i YSoft SAFEQ 5 zároveň.

Následně v samotném testu na základě paramteruSAFEQ_VERSION rozhodnout, která knihovna se použije pro danou funkci. Toto řešení mělo problém, který mi v první chvíli nebyl zřejmý. Při svém návrhu řešení jsem počítal, že parametr SAFEQ_VERSION je pokaždé součástí souboru config.robot, ale toto nebylo zaručeno, a proto se toto řešení nedalo použít.

Další návrh řešení bylo rozhodovat se na základě verze YSoft SAFEQ, která beží na serveru.

Pro toto řešení jsem navrhl funkci parse_safeq_version. Díky této funkci bylo možné určit, které knihovny se mají použít. Problém, který při tomto řešení vznikl, byl způsoben tím, že funkce parse_safeq_version byla součástí souboru SafeQ6Tools.py a tento soubor byl součástí knihovny pro YSoft SAFEQ 6. Protože se načetly knihovny pro obě verze YSoft SAFEQ, test nevědel kterou funkci má použít a skončil chybou. Po dalším špatném návrhu řešení problému jsem kontaktoval spolupracovníka, který mi pomohl navrhnout další řešení.

(31)

Řešení spočívalo v přejmenování souborů v obou knihovnách tak, aby názvy souborů v knihov- nách byly totožné. Pro vyřešení byl zvolen název SafeQTools.py, ale tento název už byl použit pro jiný soubor, který byl společný pro obě verze YSoft SAFEQ, bylo nutné tento soubor také přejmenovat. Nově se tento soubor jmenuje SafeQUtilities.py. Dále bylo nutné přemístit funkci parse_safeq_version do souboru SafeQUtilities.py. Po přejmenování všech souborů a úpravy im- portování knihoven v souborech s testy stále docházelo k chybám spojeným s načítáním knihoven.

Problém byl způsobený načítáním knihoven hned po spuštění testu. Při spuštění testu se otevřel soubor shared.libs.config, kde je seznam knihoven, které se mají použít. V tomto souboru byly nastaveny jak knihovny pro YSoft SAFEQ 6 tak i pro YSoft SAFEQ 5. Bylo nutné upravit obsah souboru, aby správně pracoval s dynamickým načítaním. Díky řetězci <SQ_VERSION>, který se vyskytoval v souboru shared.libs.config, bylo po načtení souboru možné tento řetězec nahradit konkrétní verzí YSoft SAFEQ, která je potřeba pro správné určení knihoven.

Díky těmto úpravám bylo možné dynamicky načítat pouze knihovny, které jsou pro daný test potřeba. Dále nebylo nutné v rámci testu mít žádnou podmínku pro rozhodování, která funkce se použije.

(32)

Kapitola 4

Použitý SW a HW

4.1 YSoft SAFEQ

YSoft SAFEQ je software pro správu tiskových prací, který pomáhá uživatelům spravovat tiskové úlohy, optimalizovat tisk, bezpečně tisknout, skenovat a získávat informace o nákladech spojených s tiskem a kopírováním.

Hlavní výhody YSoft SAFEQ:

Secure print– uživatel neposílá tiskovou úlohu přímo na konkrétní tiskárnu, ale tisková úloha je poslána na server, který spravuje tiskárny v celé síti. Hlavní výhoda je, že následně uživatel může svou tiskovou práci vytisknout na kterékoliv tiskárně, která je připojena k serveru, na kterém je uložena tisková úloha.

Secure access – Další výhoda, která je spojena se secure print, přidává další vrstvu zabez- pečení. Uživatel se dokáže přihlásit na kteroukoliv tiskárnu, kde má přístup ke všem svým tiskovým pracím, které jsou určeny jen pro něj a další funkce, které má přístupné. Zabezpe- čený přístup eliminuje, že se důvěrné dokumenty nedostanou do nesprávných rukou, protože lze tisknout až po přihlášení uživatele k tiskárně nebo terminálu.

Scan workflows – Pomocí manuálního nastavení nebo díky XML souboru, který má přede- psanou strukturu, lze přesně popsat krok po kroku co se má v daném Scan workflow odehrát a definovat základní nastavení kvality a formátu. Pomocí těchto Scan workflow je skenování ve- lice uživatelsky přívětivé, protože je zde možnost pomocí jednoho stisku například naskenovat a poslat scan pomocí e-mailu, scan uložit na síťové uložiště nebo scan uložit na lokální disk na přednastavené místo nebo v domovském adresáři získaného z AD. Tento způsob je dobré používat u často se opakujících operací, jako může být třeba nástup nového zaměstnance, kdy je potřeba naskenovat více dokumentů.

(33)

Accounting – Pomocí účetnictví a reportů je možnost přesně sledovat finální náklady na různé aspekty služeb, které umožnují kontrolovat jaké množství papíru nebo peněz jednotliví uživatelé vytisknou a nebo vytížení tiskáren jako takových. Toto vyúčtování probíhá na základě reportů.

4.2 Robot Framework

Robot Framework [2] je generický otevřený zdrojový kód automation framework. Tento framework se používá pro automatizaci testů a automatizaci robotických procesů. Robot Framework je aktivně podporován mnoha špičkovými společnostmi, které se zabývají vývojem softwaru.

Syntaxe je velice jednoduchá pro čtení a je rozšiřitelná pomocí knihoven v Python, Java nebo v .NET. Celý projekt je ke stažení z repozitáře na GitHubu, kde je k dispozici dokumentace a zdrojový kód. Klíčové slova jsou odvozena od anglických slov, což zlepšuje čitelnost kódu.

Testovací data lze určit pomocí následujících možností:

-test (-t) Slouží pro volání testu jménem. Testy je možné spojovat pomocí logických spojek

-suite (-s) Vykoná sady testů podle jména nebo tagu

-include (-i)a-exclude (-e)Volání testů podle tagů, testy se dají spojovat pomocí logických spojek konjunkce nebo disjunkce

Každý test může být označen jedním nebo více tagy, které je možno využívat pro vykonání testů z různých testových sad najednou. Tag může být použitý na celou sadu testů pomocí klíčového slova Force Tags, který vynutí vykonání všech testů v celé sadě testů. Sdružování pomocí tagů je velmi efektivní způsob provádění testů bez nutnosti lidského zásahu, kromě spuštění testu. Po ukončení sady testů je vytvořen report, ve kterém jsou vidět všechny testy, které selhaly.

4.3 Python

Python [3] je interpretovaný objektově orientovaný programovací jazyk. Python je vysoko úrovňový programovací jazyk, který v roce 1991 navrhnul Guido van Rossum. Nabízí dynamickou kontrolu datových typů a podporuje různá programovací paradigmata, objektově orientované programování, imperativní programování, procedurální nebo funkcionální programování. Python je vyvíjen jako open source projekt, který je zdarma nabízen na většinu běžně dostupných platformách. Je možné ho využívat pro vývoj webových aplikací, komunikaci s databází a reprezentaci dat, analýzu dat a psaní skriptů pro správu serverů a automatizaci procesu. Pro Python je napsáno mnoho open source knihoven a v našem případě byl Python využit pro práci s Robot Framework, která je doplňkovou knihovnou, a slouží pro tvorbu testů.

Odkazy

Související dokumenty

To zde není třeba rozebírat, je to v podstatě skoro to samé, co u předchozího projektu, přibyly akorát moduly pro logo a „favicony“ (ikony, které se zobrazují v

Při mé odborné praxi jsem pracoval s nejnovějšími technologiemi a osvojil jsem si znalosti PHP frameworku Nette a Symfony.. Budu zde také popisovat práci

Již v analýze jsem pochopil, že druhá podúloha bude poněkud složitější, jelikož bylo zapotřebí vytvořit modálové okno, jenž bude zaopatřovávat všechny funkce jako

Dále jsem implementoval servisní vrstvu hlavní aplikace, která zpracovávala data a následně je transformovala vzájemně mezi DTO a protobuf objekty1. Tuto vrstvu jsem poté napojil

Pří vytváření testů pro uživatelské rozhraní: Zobrazení tiskových úloh All-in-one a Zobrazení tiskových úloh Waiting – Printed – Favorite: Záložka ve stavu

Druhý modul byl modul Elektronických smluvních dokumentů (dále jen Elis), který má za úkol vygenerovat PDF soubory z dat od klienta k náhledu a následně podepsání a přidání

Pro vytvoření takové obsluhy bylo důležité pochopit hlavní principy celé aplikace a připravit spolehlivé řešení, které pomůže při testování manuálním testerům.. Byl

Hlavní částí této práce je návrh, vývoj a testovací nasazení mobilní aplikace pro systém Android (viz kapitoly 7, 8, 9), která je součástí nového docházkového