Open search

    Testiautomaatio ja kokonaisvaltainen laadunvarmistus

    Testiautomaation suurimpia hyötyjä ovat se, että testien suoritus on toistettavaa, nopeaa ja suoritusaika ei vaadi työaikaa testaajalta. Näin ollen myös ihmisvirheiden mahdollisuudet minimoituvat. Tässä blogitekstissä Senior Test Automation Engineer Valtteri Heiskanen pohtii testiautomaation paikkaa kokonaisvaltaisessa laadunvarmistuksessa sekä DevOpsissa.

    Testiautomaatio ohjelmistotestauksessa tarkoittaa manuaalisesti suoritettavien testaustoimien automatisointia tarkoitukseen sopivalla ohjelmistokehyksellä tai skriptikielellä. Testiskriptiä ajettaessa testaustoimet suoritetaan automaattisesti, manuaalisen testauksen toimia mallintaen. Tällöin skripti operoi esimerkiksi testattavan kohteen käyttöliittymän tai rajapinnan kautta tai komentokehotetta hyödyntäen.

    Testiautomaatio soveltuu parhaiten regressiotyyppiseen testaukseen, jossa samoja testaustoimia suoritetaan usein, esimerkiksi samoja testitapauksia usean ohjelmistojulkaisun yhteydessä. Testiautomaatio säästää parhaimmillaan testaajien aikaa ja minimoi ihmisvirheen mahdollisuutta, kun sillä suoritetaan toistettavia testitapauksia.

    Testiautomaatio ei kuitenkaan poista manuaalisen ja eritoten tutkivan testauksen tarvetta. Regressiotestauksella varmistetaan, että aiemmin toiminut toimii edelleen, kun taas tutkivalla testauksella on tarkoitus saada esiin uusia ohjelmistovirheitä. Riippuen testattavasta kohteesta, manuaalisen testauksen ja testiautomaation painotukset tulee aina arvioida tapauskohtaisesti.

    Tämän kirjoituksen tarkoituksena on pohtia testiautomaatiota oman kokemukseni pohjalta ja hahmottaa sen paikkaa kokonaisvaltaisessa laadunvarmistuksessa ja myös DevOpsissa. DevOps on käsite, jossa ohjelmistoprojektin elinkaareen liittyvät toiminnot kehityksen kautta testaamiseen ja ylläpitoon pyritään automatisoimaan. Testiautomaatiolla on siis keskeinen rooli myös DevOpsissa.

    Testiautomaation työkalut

    Testiautomaatioon on nykyisin useita työkaluja, joista voi valikoida omiin tarkoituksiin sopivimman. Robot Framework on näistä kenties tunnetuin ja käytänkin sitä eniten esimerkeissä tämän tekstin puitteissa. Robot Framework on avainsanapohjainen ohjelmistokehys, joka pohjautuu Pythoniin.

    Testiautomaatiossa ja ohjelmistorobotiikassa Robot Frameworkia käytetään yleisimmin selain- ja websivupohjaisten sovellusten testaukseen (Selenium- ja Browser-kirjastot), mutta sitä voi myös hyödyntää esimerkiksi Java-sovelluksiin, erilaisiin rajapintoihin sekä mobiilisovellusten testaukseen (Appium-kirjasto, joka tukee sekä Android- että iOS-käyttöjärjestelmiä).

    Ohjelmistorobotiikan avulla voidaan automatisoida rutiininomaisia prosesseja ohjelmistojen suorituksessa. Testiautomaatiosta poiketen, siihen ei siis välttämättä liity testausnäkökulmaa. Robot Framework on avoimen lähdekoodin projekti ja sitä kehitetään jatkuvasti ison yhteisön voimalla. Omien kirjastojen kehitys on myös varsin vaivatonta Pythonia tai Javaa hyödyntämällä.

    Muista vastaavanlaisista työkaluista mainittakoon Pythonin oma testauskehys Pytest, E2E (end-to-end) testaukseen soveltuva Cypress tai käyttäytymislähtöisessä kehityksessä testaukseen soveltuva Cucumber. Suorituskyky- ja kuormitustestaus on usein myös tärkeä osa-alue etenkin suurissa ohjelmistoprojekteissa ja tähän tarkoitukseen voidaan soveltaa JMeteria.

    Testiautomaatio ja DevOps

    Kun kehitystyö testiautomaatiolla on edennyt siihen vaiheeseen, että testitapauksia ja testijoukkoja alkaa olla useampia kymmeniä, on hyvä miettiä testausympäristön mahdollisimman vaivatonta ja toistettavaa pystytystä. Esimerkiksi Robot Frameworkin tapauksessa testiympäristö vaatii yleisesti Pythonin, Robot Frameworkin sekä tarvittavien kirjastojen ja mahdollisten selainten ja niiden ajureiden asennukset.

    Testiympäristön pystytys nollasta on näin ollen varsin työlästä ja siksi hyviä vaihtoehtoja ympäristön luontiin ovat konttiteknologia (Docker ja Kubernetes) tai pakettien automatisoitu asennus esimerkiksi Ansiblella. Konttiteknologian avulla luodaan vakioitu ympäristö, jossa ohjelmiston kehitystä, ajoa sekä ylläpitoa tehdään. Toisin sanoen, ohjelmisto ja sen vaatimat riippuvuudet “sullotaan konttiin”. Myös testattavan kohteen ja sen (usein virtuaali-) ympäristön asennuksessa kannattaa hyödyntää automaatiota; esimerkiksi käyttäen Ansiblea ja Terraformia.

    Edellä mainittujen esimerkkien myötä testattavan kohteen ja testausympäristön luonnit saadaan näppärästi automatisoitua ja seuraavaksi automatisoidut vaiheet kannattaa integroida sopivan versionhallinta-alustan kanssa, jossa voidaan toteuttaa myös koko asennuksen ja testauksen kattava CI/CD (jatkuva integraatio/jatkuva toimitus) -putki. Hyviä vaihtoehtoja tähän ovat esimerkiksi GitLab, GitHub, Jenkins tai BitBucket. Edellä mainituin esimerkein testiautomaatio saadaan osaksi kokonaisvaltaista DevOps-ratkaisua.

    Testiautomaation hyödyt, haasteet ja tavoitteet

    Testiautomaation suurimmista hyödyistä pari selkeää tulikin jo mainittua ensimmäisessä kappaleessa: testien suoritus on toistettavaa, nopeaa ja suoritusaika ei vaadi työaikaa testaajalta. Näin ollen myös ihmisvirheiden mahdollisuudet minimoituvat. Työajan käytön pieneneminen skaalautuu myös koko yllä kuvattuun DevOps-ratkaisuun: sen sijaan että ohjelmoijat ja testaajat käyttävät aikaa ympäristöjen asennuksiin tai testaukseen, automatisoitu CI/CD-putki tekee sen heidän sijastaan.

    Haasteina voidaan pitää sitä, että testiautomaatio ei sovellu läheskään kaikkeen testaukseen. Sillä ei välttämättä löydetä ohjelmointivirheitä vastaavasti kuin esimerkiksi tutkivalla, manuaalisella testauksella.

    On myös tärkeää ymmärtää, että testiautomaation toteutus ei ole valmis siinä vaiheessa, kun testitapauksia ja -joukkoja on tehty kattavasti. Sekä testit että niiden ympärillä mahdollisesti oleva CI/CD-putki vaativat jatkuvaa ylläpitoa. Muutokset testattavassa kohteessa tai sen riippuvuuksissa aiheuttavat hyvin yleisesti myös muutostarpeen testeihin.

    Kaikkein tärkeintä on pitää mielessä kirkkaana se, millainen testattava kohde on, mitkä ovat sille asetetut vaatimukset ja kuinka se kehittyy muutosten myötä. Siten testiautomaatio ja sen tuotokset ovat myös osa jatkuvasti kehittyvää prosessia.

    Testiautomaatiolla on keskeinen rooli kokonaisvaltaisessa laadunvarmistuksessa. Sen päällimmäisenä tarkoituksena on nopeuttaa, helpottaa sekä lisätä toistettavuutta ja luotettavuutta testitapausten suorittamisessa. On kuitenkin hyvä ymmärtää, että testiautomaatiolla yksinään ei pystytä ratkaisemaan testattavaan kohteeseen liittyviä laatupuutteita. Osana hyvin toteutettua ja hallittua ohjelmistoprojektia, jatkuvasti ylläpidettynä ja kehittyvänä, sillä on tärkeä rooli laadukkaan lopputuotteen saavuttamisessa.

     

    Kirjoittaja

    Valtteri Heiskanen

    LinkedIn

    Valtterin uratarinan pääset lukemaan täältä!

    We are looking for a Robot Framework Engineer. Read more!