E2E Testing: A Tutorial and Architectural Guide

End-to-end (E2E) -testaus auttaa sovelluksen tärkeimpien virtojen, kuten käyttäjien kirjautumispyyntöjen, validoinnissa. Front-end-kehityksessä E2E-testit auttavat tarkistamaan, onko oikea käyttöliittymä esitetty. Back-end-kehityksessä E2E-testit auttavat varmistamaan, että back-end-palveluiden tärkeä virtaus palauttaa odotetun tuloksen.

Tässä kirjoituksessa esitellään E2E-testausta ja annetaan käyttökelpoisia vinkkejä. Kerromme myös, miten kirjoitat uudelleenkäytettäviä testejä, jotta niitä voidaan käyttää helpommin E2E-testien luomiseen. Kuten ehkä tiedät, E2E-testit ovat usein suuri turhautuminen kehittäjille, koska niiden kirjoittaminen, suorittaminen ja ylläpito vaativat paljon vaivaa.

Katsotaan ensin, missä E2E-testaus sijaitsee ohjelmistotestauksen pyramidissa.

E2E-testien paikka testauspyramidissa

Testauspyramidia tarkasteltaessa löydämme neljä päätestityyppiä, joiden avulla voimme taata koodin laadun:

  1. E2E-testien avulla voidaan todentaa sovelluksen arvokkaat polut. Toisin sanoen ne auttavat todentamaan käyttäjätarinoita, sillä ne edustavat usein virtauksia sovelluksessasi.
  2. Integrointitestit auttavat todentamaan useiden toimintojen tai komponenttien integroinnin. Integrointitestit voivat kertoa, toimiiko koodisi yhtenäisesti muiden toimintojen kanssa.
  3. Yksikkötestit auttavat tarkistamaan toimintojen liiketoimintalogiikan. Yksikkötestit ovat testauksen perusmuoto, ja ne varmistavat, että liiketoimintalogiikka on oikein.
  4. Viimeiseksi, emme voi unohtaa staattista analyysia tai staattista testausta. Staattinen testaus auttaa löytämään kirjoitus- tai tyyppivirheitä.

Tämän pyramidin mukaan useimpien testien tulisi olla yksikkötestejä, vähemmän integrointitestejä ja vielä vähemmän E2E-testejä. On silti tärkeää tarkistaa sovelluksen virrat. E2E-testit ovat vaikeita ylläpitää ja vaativat paljon työtä. Varmista siksi vain tärkeimmät virrat E2E-testeillä. Muiden testaustyyppien, kuten integrointi- ja yksikkötestauksen, pitäisi jo antaa sinulle riittävästi luottamusta koodipohjaasi.

Eerilaisia E2E-testausstrategioita

Kerron, että erilaisia strategioita on olemassa. Voimme valita horisontaalisen E2E-testauksen ja vertikaalisen E2E-testauksen välillä. Molemmat strategiat ovat tutkimisen arvoisia, sillä niiden avulla voit testata erilaisia skenaarioita. Tutustutaanpa siihen, mitä kukin strategia tekee.

Strategia #1: Vertikaalinen End-to-End-testaus

Tässä strategiassa keskitytään testaamaan kaikkia testauspyramidin kerroksia. Se sisältää yksikkötestit, integrointitestit ja käyttöliittymätestit. Tavoitteena on testata komponentti rakeisella tasolla yksikkötesteillä, testata, miten komponentti käyttäytyy vuorovaikutuksessa muiden komponenttien kanssa integraatiotesteillä, ja lopuksi todentaa komponentin käyttäytyminen, kun käyttäjät ovat vuorovaikutuksessa käyttöliittymän kautta.

Yleisimmin haluat käyttää jatkuvan integraation putkea automatisoidaksesi nämä testit jokaista koodin sitoutumista tai pull requestia varten.

Strategia #2: Horisontaalinen End-to-End-testaus

Horisontaalinen E2E-testaus keskittyy täydellisen käyttäjävirran tarkistamiseen. Tässä on esimerkki verkkokaupan virtauksesta:

  1. Tuotesivun avaaminen
  2. Tuotteen koon valitseminen
  3. Tuotteen lisääminen ostoskoriin
  4. Kassaan siirtyminen
  5. Ohjeita osoite- ja maksutiedot
  6. Maksun suorittaminen
  7. Näytä ostonvahvistusruutu

Tässä vaiheessa haluamme todentaa käyttäjävirtauksen jokaisen tapahtuman. Usein tämäntyyppisellä testauksella todennetaan eri sovellusten välinen vuorovaikutus ja tarkistetaan näiden sovellusten tilamuutokset.

Huomaa, että tämäntyyppiset testit ovat kalliita kirjoittaa. Käyttäjävirtojen määrittelyyn ja näiden testien kirjoittamiseen kuluu melko paljon aikaa. Yritä siksi keskittyä sovelluksesi kannalta kriittisiin tapahtumapolkuihin.

Varmista kuitenkin, että näitä kriittisiä käyttäjävirtoja testataan eri olosuhteissa. Tämän strategian avulla saat kattavan kuvan käyttäjävirran kestävyydestä. Näitä olosuhteita ovat esimerkiksi:

  • Monimutkaiset ajoitusskenaariot: Esimerkiksi konserttilippu on saatavilla vain 15 minuutin ajan.
  • Erilainen tietojen syöttö tai puuttuvat tiedot.
  • Virran katkeamiset: Käyttäjä päättää poistua kassasivulta katsomaan toista tuotesivua. Meidän on esimerkiksi tarkistettava, tallentaako komponentti kassatilan.

Seuraavaksi opitaan, milloin kannattaa kirjoittaa E2E-testejä.

Kuinka kirjoittaa E2E-testejä

Et ehkä tiedä, että E2E-testit ovat kalliita testejä, jotka kannattaa suorittaa jatkuvan integroinnin putkessa. Ne vaativat usein paljon valmistelua, kuten tuotantotietoja jäljittelevän tietokannan luomista. Lisäksi ne edustavat joskus aikaa vieviä virtauksia sovelluksessasi. Siksi niiden suorittaminen voi olla hidasta ja vaatia enemmän resursseja.

Käytä E2E-testejä sovelluksesi tärkeimpien virtojen tarkistamiseen. Esimerkkejä arvokkaista virroista ovat:

  • Kirjautuminen ja uloskirjautuminen
  • Uuden käyttäjän rekisteröinti
  • Tuotteen lisääminen ostoskoriin
  • Salasanan vaihtaminen
  • Mahdolliset muut palveluun liittyvät tärkeät virrat

Älkää kuitenkaan unohtako varmennusta kirjoittamallenne liiketoimintalogiikalle yksikkö- ja integraatiotesteillä. Sekä yksikkö- että integrointitestien yhdistelmän pitäisi antaa sinulle runsaasti varmuutta koodisi laadusta. E2E-testit auttavat sinua lisäämään tätä luottamusta kriittisten polkujen osalta.

Tässä on joitain toteuttamiskelpoisia vinkkejä E2E-testien kirjoittamiseen.

Vinkkejä E2E-testien kirjoittamiseen

Keskity uudelleenkäytettävien testien kirjoittamiseen

Ensimmäisenä ja tärkeimpänä vinkkinä mainittakoon pienten itsenäisten uudelleenkäytettävien testejä ja komponentteja koskevien testien kirjoittaminen. Näin voit nivoa yhteen useita pieniä komponentteja ja luoda helpommin täydellisiä päästä päähän -käyttäjävirtoja. Sen sijaan, että kirjoitat paljon mukautettuja komponentteja vain E2E-testejä varten, keskity uudelleenkäytettävien komponenttien kirjoittamiseen.

Pienten, toisistaan riippumattomien komponenttien kirjoittaminen auttaa koodin uudelleenkäytössä ja vähentää virheiden vianetsintään kuluvaa aikaa. Lisäksi pieniä komponentteja on helpompi päivittää, kun toiminnallisuus tai käyttäjävirrat muuttuvat.

Huomioi aina E2E-testin kirjoittamisen syy

Kun haluat kattaa tietyn virtauksen E2E-testillä, harkitse, kannattaako se kattaa. Testaa vain arvokkaita käyttäjävirtoja E2E-testeillä. Sinun ei esimerkiksi pitäisi testata, näytetäänkö virheilmoitus, kun käyttäjä syöttää väärän sähköpostiosoitteen. Tämä on aivan liian yksinkertainen käyttötapaus, joka ei sovi E2E-testiin. Tämä vaatimus voidaan yksinkertaisesti testata yksikkötestillä.

Toisaalta kannattaa testata, ohjaako kirjautumissivu käyttäjän oikealle sovellussivulle onnistuneen kirjautumisen jälkeen. Tämä on arvokas virtaus, jotta käyttäjät voivat käyttää sovellusta. Lyhyesti sanottuna, ota aina huomioon syy E2E-testin kirjoittamiseen.

E2E-testien ei pitäisi olla riippuvaisia toteutuksen yksityiskohdista

Ei kannata päivittää E2E-testejä joka kerta, kun muutat tietyn virtauksen toteutuksen yksityiskohtia. Siksi haluat kirjoittaa komponentteja, joiden avulla voit abstrahoida toteutuksen yksityiskohtia. E2E-testauksesta tulee paljon helpompaa ylläpitää ja hauskempaa kirjoittaa, kun toteutuksen yksityiskohdat piilotetaan komponentteihin. Lyhyesti sanottuna E2E-testien tulisi olla riippumattomia toteutuksen yksityiskohdista.

Katsotaan seuraavaksi E2E-testien sudenkuoppia.

E2E-testien sudenkuopat

Tässä on lista yleisimmistä E2E-testien sudenkuopista, jotka liittyvät E2E-testien tekemiseen:

  • E2E-testeissä ei saisi pyrkiä testaamaan kerralla mahdollisimman paljon. Usein kehittäjät kirjoittavat valtavia E2E-testejä, jotka tarkistavat kaikki käyttäjävirran osa-alueet. Pidä asiat yksinkertaisina ja verifioi käyttäjävirran tärkeimmät näkökohdat. Esimerkiksi kirjautumisvirran osalta sinun tarvitsee vain tarkistaa, onko käyttäjä ohjattu sovellussivulle. Näin kehittäjien on helpompi ylläpitää ja päivittää E2E-testejä.
  • Kun E2E-testi epäonnistuu, epäonnistumisen tarkkaa syytä voi olla vaikea löytää. Voit kuitenkin vähentää vaadittavia virheenkorjausyrityksiä kattamalla liiketoimintalogiikan yksikkö- ja integrointitesteillä. Jotkin työkalut tarjoavat myös hyvän perimmäisten syiden analyysin, mukaan lukien kuvakaappaukset ja konsolilokit epäonnistuneista testivaiheista, mikä voi vähentää vianmääritykseen kuluvaa aikaa.
  • E2E-testit vaativat huomattavan määrän aikaa jatkuvassa integrointiputkessa (CI). Ne voivat tukkia CI-putken, mikä hidastaa yleistä kehitystä. Tämä tarkoittaa, että sinun on ehkä investoitava CI-putkistoosi, jotta sinulla on muutama lisäputki testien suorittamista varten.
  • E2E-testit ovat jatkuvaa työtä. Aina kun uusia toimintoja lisätään tai vanhoja toimintoja muutetaan, sinun on todennäköisesti päivitettävä E2E-testejäsi. Voimme kuitenkin vähentää tätä vaivaa kirjoittamalla uudelleenkäytettäviä komponentteja, jotka abstrahoivat toteutuksen yksityiskohtia. Lisäksi jotkin työkalut käyttävät tekoälyä, joka auttaa mukauttamaan testit koodin muuttuessa, mikä vähentää testien ylläpitoa.

Katsotaan nyt lyhyesti järjestelmätestauksen ja E2E-testauksen eroja.

Järjestelmätestausta vs. E2E-testausta – mitä eroa on?

Mitä eroa on siis järjestelmätestauksella ja E2E-testauksella? Järjestelmätestauksessa keskitytään sekä toiminnallisten että ei-toiminnallisten vaatimusten validointiin. Usein sen suorittaa ulkopuolinen ryhmä, joka käsittelee sovellusta mustana laatikkona. Toisin sanoen he eivät tiedä sovelluksen toiminnasta mitään muuta kuin ne vaatimukset, jotka sen pitäisi täyttää.

Tämä testauksen muoto sekoitetaan kuitenkin usein E2E-testaukseen, sillä järjestelmätestaus on eräs E2E-testausmuoto. Järjestelmätestauksessa todennetaan kuitenkin paljon enemmän kuin E2E-testauksessa. Järjestelmätestauksella mitataan esimerkiksi skaalautuvuutta, suorituskykyä tai luotettavuutta. Kun taas E2E-testaus keskittyy käyttäjävirtojen oikeaan loppuunsaattamiseen.

Viimeiseksi tehdään yhteenveto tämän artikkelin oppeista.

Johtopäätös E2E:stä

End-to-end-testaukset ovat melko tehokkaita, sillä ne auttavat validoimaan arvokkaita käyttäjävirtoja tai käyttäjätarinoita. Ne auttavat takaamaan sovelluksen laadun.

E2E-testien kirjoittaminen ja ylläpitäminen voi kuitenkin vaatia paljon aikaa ja vaivaa. Tätä vaivaa on mahdollista vähentää kirjoittamalla pieniä, uudelleenkäytettäviä komponentteja, jotka abstrahoivat toteutuksen yksityiskohtia. Jotkin työkalut auttavat myös luomaan joustavampia testejä käyttämällä tekoälyä tai useita attribuutteja kunkin elementin tunnistamiseen. Näin ollen E2E-testejä ei tarvitse päivittää aina, kun arvokkaiden käyttäjävirtojen toteutuksen yksityiskohdat muuttuvat. Lisäksi uudelleenkäytettävien komponenttien avulla voit liittää kyseiset komponentit toisiinsa ja luoda E2E-testauksen virrat helposti.

E2E-testauksen tulisi kattaa sovelluksesi tärkeimmät virrat. Niillä testataan virtoja, joita käyttäjät ja asiakkaat noudattavat saadakseen lisäarvoa sovelluksestasi. Jos he eivät voi kirjautua sisään tai lisätä tuotetta ostoskoriin, he joko poistuvat (jos voivat) tai soittavat asiakaspalveluun, jos heidän on pakko käyttää sovellustasi. Haluat esimerkiksi kattaa kirjautumis- ja uloskirjautumisvirran, mutta et ole yhtä kiinnostunut virheilmoituksen tarkistamisesta virheellisen sähköpostiosoitteen syöttämisen jälkeen.

Loppujen lopuksi E2E-testejä pitäisi olla hauska kirjoittaa. Niiden kirjoittamisen ja ylläpitämisen ei pitäisi vaatia paljon aikaa ja vaivaa. Pidä E2E-testit yksinkertaisina ja keskity uudelleenkäytettäviin komponentteihin, niin näet loistavia tuloksia!

Tämän viestin on kirjoittanut Michiel Mulders. Michiel on intohimoinen lohkoketjukehittäjä, joka rakastaa teknisen sisällön kirjoittamista. Sen lisäksi hän rakastaa markkinoinnista, UX-psykologiasta ja yrittäjyydestä oppimista. Kun hän ei kirjoita, hän luultavasti nauttii belgialaista olutta!

Vastaa

Sähköpostiosoitettasi ei julkaista.