Cucumber-skenaariorunkojen toteuttaminen BDD-kehyksissä

By Andreea Draniceanu

Lopeta saman testin kirjoittaminen yhä uudelleen! Skenaariorunkojen avulla voit määrittää testimallit ja syöttää niihin erilaisia tietojoukkoja, mikä säästää aikaasi ja varmistaa, että testisi keskittyvät edelleen liiketoiminta-arvoon.

Käyttäytymislähtöinen kehitys (BDD) on ketterä ohjelmistokehityskäytäntö, joka parantaa sidosryhmien ja kehittäjien välistä yhteistyötä käyttämällä yksinkertaista, toimialakohtaista kieltä järjestelmän käyttäytymisen kuvaamiseen. 

Yksi BDD:n tehokkaimmista työkaluista on Cucumber, jota käytetään selkeiden määritysten kirjoittamiseen. Sitä voidaan käyttää myös testaukseen useimpien yleisesti käytettyjen ohjelmointikielten, kuten Javan, Pythonin tai C#:n, kanssa, ja se voidaan integroida käyttöliittymäkehyksiin, kuten Seleniumiin, tai sitä voidaan käyttää API-testaukseen.

Skenaariohahmotelmat ovat osa Cucumberin Gherkin-syntaksia, jota käytetään suoritettavien määritysten kirjoittamiseen. Toisin kuin tavalliset skenaariot, jotka määrittelevät yhden konkreettisen esimerkin, skenaariohahmotelmien avulla voidaan määritellä useita esimerkkejä taulukkomuodossa. 

Skenaarion ja skenaariohahmotelmien erot

Cucumberin skenaariot edustavat testitapausta, joka on kirjoitettu perusmuodossa oletus-kun-silloin. Gherkin-kielen ansiosta nämä testiskenaariot voidaan kirjoittaa selkeällä englannilla (ja muilla kielillä), joten myös henkilöt, joilla ei ole teknistä taustaa, voivat ymmärtää niitä ja jopa kirjoittaa niitä. Vaiheiden toteutuksen määrittelevät vaiheiden määrittelyt luodaan erillisiin tiedostoihin. 

Joidenkin toimintojen kohdalla on järkevää toistaa sama skenaario erilaisilla testitiedoilla – tunnet tämän todennäköisesti dataohjattuna testauksena. Cucumberissa tämä tehdään käyttämällä skenaariohahmotelmaa ja esimerkkitaulukkoa, joka sisältää käytettävät tietojoukot. Jokainen esimerkki lasketaan erilliseksi testiksi.  

Get Free Access
Get regular tech leadership wisdom for delivering better software and systems.
Get Free Access

Have an account? Log In

Cucumberin skenaariohahmotelman syntaksi

Tyypillinen Cucumber-projekti sisältää ominaisuustiedostoja, joissa Cucumber-testit määritellään, sekä vaiheiden määrittelytiedostoja, joissa vaiheiden toteutukset sijaitsevat. 

Ominaisuustiedoston tulisi kuvata vaatimusmäärittely ja sen testaamiseen käytettävät skenaariot. Yksinkertaisen Cucumber-skenaarion perussyntaksi on seuraava:

Skenaario: Virheellinen kirjautuminen

Oletus navigoin kirjautumissivulle

Kun syötän virheelliset tunnistetiedot

Silloin saan virheilmoituksen

Skenaario voi sisältää myös muuttujia, joita käsitellään sellaisina vaiheiden määrittelyssä.

Skenaario: Virheellinen kirjautuminen

Oletus navigoin kirjautumissivulle

Kun syötän käyttäjänimeksi testin ja salasanaksi virheellisen arvon

Silloin saan virheilmoituksen: "Virheellinen kirjautuminen".

Arvoja “test”, “virheellinen” ja “Virheellinen kirjautuminen” käsitellään muuttujina. Katsotaan nyt, mitä tapahtuu, kun haluamme kokeilla annettujen muuttujien erilaisia yhdistelmiä – voisimme päätyä useisiin skenaarioihin, jotka ovat muuttujien arvoja lukuun ottamatta identtisiä, tai käyttää skenaariohahmotelmaa, jonka avulla voimme käyttää taulukkoa erilaisten datayhdistelmien määrittämiseen:

    Silloin saan virheilmoituksen: "<virheilmoitus>".

Esimerkit:

 | käyttäjänimi | salasana | virheilmoitus             |

| test     | virheellinen  | Virheellinen kirjautuminen             |

| test     |          | Anna salasana |   

|          | virheellinen  | Anna käyttäjänimi |

Datayhdistelmä kirjoitetaan “Esimerkit”-avainsanan alle taulukon sisälle. Taulukoiden otsikot ovat muuttujien nimiä, ja kukin rivi edustaa datayhdistelmää. Kutakin Cucumber-ominaisuuteen kuuluvaa esimerkkiä käsitellään yksittäisenä testitapauksena. 

Esimerkkitaulukot ja datataulukot

Esimerkit ja datataulukot saattavat näyttää samanlaisilta, mutta niillä on eri tarkoitukset. Tärkein ero on, että esimerkkejä käytetään dataohjattujen skenaarioiden toteuttamiseen, kun taas datataulukoita käytetään silloin, kun skenaarion vaiheissa täytyy käyttää useita muuttujia.

Datataulukkoa voidaan käyttää seuraavasti:

Skenaario: Virheellinen kirjautuminen

    Oletus navigoin kirjautumissivulle

    Kun syötän tunnistetiedot

        | käyttäjänimi | salasana |

        | test     | virheellinen  |   

 Silloin saan virheilmoituksen: "Virheellinen kirjautuminen".

tai näin:

Skenaario: Virheellinen kirjautuminen

    Kun siirryn kirjautumissivulle

    Kun syötän tunnistetiedot

        | käyttäjänimi | testi     |

        | salasana | virheellinen |    

Silloin saan virheilmoituksen: "Virheellinen kirjautuminen".

Datataulukot ovat erityisen hyödyllisiä, kun vaiheet edellyttävät useita muuttujia, ja niitä on helpompi lukea kuin silloin, kun jokainen arvo kirjoitetaan vaiheen sisään.  

Datataulukoiden ja skenaariomallin käyttäminen 

Datataulukot ja skenaariomallit voivat toimia myös yhdessä. Muuttujan nimi annetaan datataulukossa, minkä jälkeen sitä käytetään uudelleen esimerkkitaulukossa.

Skenaariomalli: Virheellinen kirjautuminen

    Kun siirryn kirjautumissivulle

    Kun syötän tunnistetiedot

        | käyttäjänimi | <käyttäjänimi> |

        | salasana | <salasana> |

    Silloin saan virheilmoituksen: "<virheilmoitus>".

Esimerkit:

    | käyttäjänimi | salasana | virheilmoitus             |

    | testi     | virheellinen  | Virheellinen kirjautuminen             |

    | testi     |          | Anna salasana |

    |          | virheellinen  | Anna käyttäjänimi |

Skenaariomallien käytön edut

Skenaariomalleja voidaan pitää testitapauksen ”mallipohjana”. Kun ne toteutetaan testiautomaatiokehyksessä, niiden todellinen tehtävä on suorittaa sama skenaario eri tietojoukoilla.

Etuna on Gherkin-rivien ja toiston vähäisempi määrä. Tämä tarkoittaa, että aina kun yhteiseen skenaarioon tarvitaan muutos, se voidaan tehdä vain kerran, ja muutos otetaan käyttöön kaikissa testidatayhdistelmissä.

Toinen skenaariomallien etu on, että ne voivat tarjota laajemman kattavuuden vähäisellä työllä. Uuden testin lisäämiseksi tarvitsee lisätä vain uusi esimerkkirivi.

More Articles

Skenaariomallien kirjoittamisen parhaat käytännöt

  • Hyödynnä todellista dataa: Tiimi ei todennäköisesti jätä reunaehtoja tai piilotettua tietoa huomiotta, kun se käyttää tosielämän käyttötapauksia toiminnan ymmärtämiseen.
  • Viestikää tavoite liiketoimintaterminologiaa käyttäen, jotta tiimin tekniset ja ei-tekniset sidosryhmät ymmärtävät toisiaan paremmin.
  • Selitä tarkoituksesi sen sijaan, että kuvaisit, miten se toteutetaan; vaiheiden kuvausten tulisi olla mahdollisimman vähän teknisiä. Niiden tulisi keskittyä enemmän järjestelmän toimintoihin kuin sen toimintaan.
  • Säilytä vain tarpeellinen: Jotta skenaario pysyy kiinnostavana kaikille osallistujille, älä kuormita sitä tarpeettomilla vaiheilla.

Tärkeimmät huomiot

Key Takeaways

Yhteistyön tehostaminen: BDD tehostaa sidosryhmien ja kehittäjien välistä yhteistyötä.

Yksinkertainen kieli: BDD käyttää yksinkertaista, toimialakohtaista kieltä järjestelmän toiminnan kuvaamiseen.

Ketterä käytäntö: BDD on ketterän ohjelmistokehityksen käytäntö.

Sidosryhmien osallistuminen: BDD ottaa sidosryhmät mukaan järjestelmän toiminnan määrittelyyn.

Järjestelmän toiminnan kuvaus: BDD keskittyy järjestelmän toiminnan tehokkaaseen kuvaamiseen.

Cucumber on erinomainen yhteistyöväline ei-teknisten henkilöiden, kehittäjien ja testaajien välillä. Se on BDD-työkalu, joka tarjoaa kirjalliset määrittelyt ja jota voidaan käyttää testaamiseen. Erilaisten vaatimusten havainnollistamiseksi voidaan kirjoittaa useita skenaarioita.

Skenaariomallia kannattaa käyttää erillisten arvojoukkojen kanssa, jotka annetaan esimerkkitaulukon kautta, kun skenaarioissa on samat vaiheet mutta ne edellyttävät erilaisia data-arvoja syötteinä tai tulosteina.

Tilaa The CTO Clubin uutiskirje, niin saat lisää näkemyksiä.

Andreea Draniceanu
Hi there! My name is Andreea, I’m a software test engineer based in Romania. I’ve been in the software industry for over 10 years. Currently my main focus is UI test automation with C#, but I love exploring all QA-related areas 😊

You may also like