Blogi

Automatisoidut testit vs. kliksuttelu

Joonas Pajunen Teknologia

Kliksuttelet verkkopalvelusi toiminnot ennen julkaisua ja varmuuden vuoksi sen jälkeen. Julkaisuprosessi on stressaava ja kallis operaatio. Kliksuttelemalla tehty testaus on rasittavaa, muttei kuitenkaan riittävän kattavaa tai hyödyllistä.

Manuaalista testausta, kliksuttelua, toki tarvitaan aina jonkin verran. Mikään automaattinen ratkaisu ei voi täysin korvata ihmistä tai varsinkaan ihmissilmää. Pitkään kestävä manuaalinen testaus käy kuitenkin äkkiä itseään toistavaksi ja tylsäksi. Tämä voi aiheuttaa lopulta sen, että klaksuttelija ei edes kiinnitä huomiota kaikkiin yksityiskohtiin, eikä onnistu testaamisessaan odotetulla tavalla. Manuaalista, ihmisen tekemää testaamista olisi siis parasta minimoida mahdollisimman paljon.

Sananen testeistä

Ohjelmiston testaamistoimenpiteet voi karkeasti jakaa 3 lohkoon; yksikkötestit, integraatiotestit ja funktionaaliset testit. Yksikkötestaus testaa pienimmän mahdollisen komponentin toiminnallisuutta. Integraatiotestit sen sijaan testaavat useamman komponentin tai asian toimintaa yhdessä. Funktionaaliset testitpyrkivät simuloimaan oikean käyttäjän toimia. Ne ovat yleensä määritetty ns. käyttötapauksina, ja kuvaavat toiminnallisuuden alusta loppuun. Ne testaavat mitä ohjelma tekee, sen sisäisen toimintatavan ollessa testille merkityksetöntä.

Funktionaaliset testit ovat myös käypiä regressiotestejä. Regressiotestien tarkoitus on varmistaa, etteivät uudet ominaisuudet, bugifiksit ja muut muutokset riko olemassaolevia toiminnallisuuksia. Funktionaaliset testit saattavat huomata odottamattomien sivuvaikutuksien kumpuamisen esimerkiksi käyttöliittymään.

Automatisoitu kliksuttelu

Hyvien funktionaalisten testien automatisointi vähentää tietenkin manuaalisen testaamisen määrää. Riippuen toki käytännöistä, testien automatisointi lisää testikertoja ja lyhentää palauteaikaa. Nopeasti saatuun palautteeseen on helpompi reagoida, sillä rikkoutunut ominaisuus on tuoreena kehittäjän muistissa. Automatisoitua, “mekaanista kliksuttelijaa”, voi komentaa klaksuttelemaan kunkin kehittäjän kehitysympäristössä, sekä yleisesti myös organisaation omalla, ns. jatkuvan integraation palvelimella.

Automatisoituja testejä luodessa kannattaa myös tiedostaa niihin liittyviä, usein virheellisiä, oletuksia. On hyvä muistaa, että automatisoitu kliksuttelija ei tietenkään voi löytää kaikkia ongelmia, eikä kaikkia mahdollisia käyttötapauksia ole mahdollista, tai ainakaan järkevää testiksi kirjoittaakaan. On hyvä pitää mielessä, että kaikenlaisia testejä täytyy ylläpitää, ja funktionaalisten testien luonteen vuoksi niiden ajoaika on yksikkö- tai integraatiotestejä pidempi. Pöhöttynyt ja hidas funktionaalinen testikokoelma voi käydä kehittäjälle jopa rasittavammaksi kuin manuaalinen kliksuttelu.

Kliksuttelutyökalut

Jotta funktionaaliset testit vastaisivat mahdollisimman paljon oikeata käyttötapausta, on testit parempi ajaa ympäristössä, joka on mahdollisimman oikeanlainen. Tätä varten on kehitetty työkaluja, kuten Selenium tai PhantomJS. Kukin edustaa erilaista tapaa kontrolloida selainta ohjelmallisesti.

Selenium on sovellus, joka automatisoi selaimen käytön. Sen avulla voidaan käskyttää simuloitua käyttäjää tekemään toimintoja selaimella, kuten avaamaan osoite, klikkaamaan linkkiä, täyttämään lomakkeen kenttiä, jne. Seleniumia käyttävä testi avaa valitun, yhden tai useamman, selaimen ja toteuttaa sille määrätyt toimenpiteet. Toimenpiteiden tulos, kuten ruudulla näkyvä testi, voidaan sen jälkeen kysyä selaimelta. Seleniumilla on myös “headless mode”, mutta tähän tarkoitukseen käytetään myös sovellusta PhantomJS. Merkittävimpänä erona on se, että PhantomJS on pelkästään ns. “päätön selain”.

Päättömyys tässä tapauksessa tarkoittaa sitä, että testejä ajaessa ei avata oikeaa, ruudulla näkyvää selainta, vaan muistissa pyörivä representaatio selaimesta. PhantomJS käyttää Webkit-selainmoottoria, jota Safari käyttää ja Chrome käytti vielä hiljattain. Merkittävin ero tavallisen ja päättömän selaimen välillä on nopeus. Koska päätöntä selainta käyttäessä ei tarvitse avata oikeaa selainta, on se huomattavasti nopeampi. Suuren testikokoelman kanssa painiessa voi kehittäjä esimerkiksi ajaa testit päättömällä selaimella, testeihin omistetun palvelimen ajaessa niitä oikealla selaimella.

Näitä selaimia ohjataan “nauhoittamalla” käyttäjän toimenpiteet siihen tarkoitetulla työkalulla, tai ylläpidettävyyden kannalta mieluummin määrittelemällä ne ohjelmallisesti. Ohjelmallisesti määritetyt testiskenaariot ovat helpommin luettavissa ja muutettavissa, mutta vaativat tietyn verran ohjelmointitaitoa.

Tasapainottelua

Automaattiset ja manuaaliset testit ovat lopulta erilaisia ja niiden tulisi täydentää toisiaan. Toistuvan, manuaalisen kliksuttelun määrä on hyvä pitää minimaalisena. Automatisoitu testaus on parasta pitää varsinkin edellämainittujen seikkojen suhteen järkevänä. Käyttötapausten testaamisen automatisointi säästää aikaa, rahaa ja hermoja. Se saattaa helpottaa ohjelmiston kehitystä nopeammalla virheiden raportoinnilla.