Architecture Decision Record

Active theme: Light

← Päätöstietueiden esimerkkejä

Arkkitehtuuripäätöstietue: selainautomaatiokehys E2E-testaukseen (Playwright vai Selenium)

1. Konteksti

Valitsemme selainautomaatiokehystä päästä päähän (E2E) -testausputkeemme. Tämä kehys on olennainen osa CI/CD-prosessejamme, ja se ajaa testejä, jotka simuloivat todellisia käyttäjävuorovaikutuksia alustallamme. Testit kattavat erityisesti skenaariot kuten käyttäjän rekisteröityminen/kirjautuminen, tiedostojen lataukset, kojelautavuorovaikutukset ja raporttien lataukset.

Startupina painopisteemme on ketterässä kehityksessä, ja meidän on iteroitava ja kehityttävä nopeasti. Tiimimme työskentelee pääasiassa TypeScriptillä ja Pythonilla, ja kyky kirjoittaa testejä näillä kielillä on välttämätön. Lisäksi alustalla on interaktiivisia kaavioita ja kojelautoja, minkä vuoksi on kriittistä, että automaatiotyökalu tukee rikkaita, dynaamisia käyttöliittymiä hyvin.

Kaksi ehdokasta tähän tehtävään ovat Playwright ja Selenium, joilla kummallakin on omat vahvuutensa ja kompromissinsa. Meidän on arvioitava nämä kehykset alla esitettyjen ominaisuuksien ja vaatimusten perusteella.

2. Harkitut vaihtoehdot

  • Playwright (Microsoft)
  • Selenium (Selenium Project)

3. Päätöksen ajurit

Päätökseemme vaikuttavat tekijät ovat seuraavat:

  1. Ketterä kehitys: Valitun työkalun on mahdollistettava nopeat ja joustavat kehityssyklit.
  2. Kielituki: Tiimimme tarvitsee tuen sekä TypeScriptille että Pythonille.
  3. Interaktiivisen käyttöliittymän testaus: Kyky testata interaktiivisia kaavioita, kojelautoja ja dynaamisia elementtejä luotettavasti on välttämätön.
  4. Ajonaikainen nopeus: Vaikka ei ensisijainen huolenaihe, suorituskyky CI/CD-putkissa on huomioon otettava seikka.
  5. Skaalautuvuus: Emme suunnittele massiivista skaalausta lähitulevaisuudessa, mutta haluamme varmistaa, että ratkaisu kestää tulevan kasvun.
  6. Taaksepäin yhteensopivuus: Vanhat järjestelmät ja yhteensopivuus vanhempien selainten kanssa eivät ole projektillemme tällä hetkellä kriittisiä.
  7. Mobiilitestaus: Vaikka ei välitön painopiste, kehyksen tulisi pystyä testaamaan mobiiliresponsiivisia ominaisuuksia tai olla laajennettavissa sellaisiin käyttötapauksiin.
  8. Moninäyttötestaus: Tuki moninäyttökokoonpanoille on toissijainen vaatimus, erityisesti jos skaalaamme tulevaisuudessa testaamaan monimutkaisempia käyttäjätyönkulkuja.
  9. Tiedostolatausten testaus: Kehyksen on käsiteltävä tiedostolatauksia tehokkaasti, mikä on testaustarpeidemme ydinvaatimus.

4. Arviointikriteerit

  • Käytön helppous: Kuinka helppoa testien kirjoittaminen ja ylläpito on?
  • Kielituki: Tukeeko kehys TypeScriptiä ja Pythonia, kahta tiimimme useimmin käyttämää kieltä?
  • Interaktiivisen käyttöliittymän testaus: Kuinka hyvin kehys käsittelee monimutkaisia interaktiivisia käyttöliittymiä, kuten kaavioita, tiedostolatauksia ja dynaamista dataa?
  • CI/CD-integraatio: Kuinka hyvin kehys integroituu yleisiin CI/CD-työkaluihin ja -palveluihin?
  • Selainten välinen tuki: Mitä selaimia tuetaan ja kuinka hyvin ne toimivat?
  • Suorituskyky ja nopeus: Kuinka nopeasti testit ajetaan, erityisesti CI/CD-putkessa?
  • Skaalautuvuus: Kuinka hyvin kehys skaalautuu, jos lisätään enemmän testejä tai monimutkaisempia skenaarioita?
  • Yhteisö ja ekosysteemi: Kuinka aktiivinen kehyksen yhteisö on? Onko saatavilla runsaasti integraatioita ja laajennuksia?

5. Huomioon otettavat seikat

5.1 Playwright

Hyvät puolet:
  1. Älykkäämpi rajapinta paikallisten tiedostojen lataamiseen: Playwrightin rajapinta paikallisten tiedostojen käsittelyyn ja tiedostolatausten suorittamiseen on yksinkertaisempi ja intuitiivisempi. Tämä helpottaisi tiedostolatausten testauksen toteuttamista ja ylläpitoa.
  2. Syntaksi ja koodin generointi: Playwrightilla on lyhyempi ja ytimekkäämpi syntaksi. Tämä johtaa vähempään kaavakoodiin, mikä parantaa ylläpidettävyyttä ja kehittäjien tehokkuutta. Lisäksi tämä lyhyempi syntaksi parantaa OpenAI:n koodigeneroinnin laatua, mikä helpottaa testiskriptien automaattista generointia.
  3. Interaktiivisen käyttöliittymän testaus: Playwright on erinomainen dynaamisten, interaktiivisten verkkosovellusten testaamisessa, kuten sellaisten, joissa on rikkaita kaavioita, monimutkaisia käyttäjävuorovaikutuksia ja reaaliaikaisia päivityksiä. Se käsittelee WebSocketeja, WebRTC:tä, shadow DOM:eja ja muita nykyaikaisia verkkoteknologioita erittäin tehokkaasti.
  4. Selainten välinen tuki: Playwright tukee Chromiumia, WebKitiä ja Firefoxia. Sillä on johdonmukainen suorituskyky näissä selaimissa, minkä pitäisi kattaa suurin osa testaustarpeistamme.
  5. CI/CD-integraatio: Playwright integroituu saumattomasti nykyaikaisiin CI/CD-alustoihin (GitHub Actions, Jenkins jne.). Se voi ajaa testejä rinnakkain eri selaimissa, mikä optimoi testiajoajat ja tekee siitä sopivan nopeaan kehitykseen.
  6. Nopea ja luotettava: Playwright on yleensä nopeampi kuin Selenium, erityisesti päättömässä (headless) tilassa, ja kestävämpi asynkronisten verkkoelementtien kanssa.
Huonot puolet:
  1. Rajallinen mobiilitestaus: Vaikka Playwright tukee mobiilisimulaatiota selaimille, siltä puuttuvat natiivit mobiilitestausominaisuudet, kuten Seleniumin Appium-integraatio todelliseen mobiilitestaukseen.
  2. Pienempi ekosysteemi: Playwright on edelleen uudempi ja vähemmän vakiintunut kuin Selenium. Vaikka sillä on nopeasti kasvava yhteisö ja hyvä dokumentaatio, siinä ei välttämättä vielä ole Seleniumin tarjoamaa valtavaa lisäosien ja integraatioiden ekosysteemiä.
  3. Rajallinen selaintuki: Vaikka Playwright kattaa tärkeimmät nykyaikaiset selaimet (Chrome, Safari, Firefox), sen tuki vanhoille selaimille (esim. Internet Explorer) ei ole yhtä vankka kuin Seleniumin.

5.2 Selenium

Hyvät puolet:
  1. Pidempi historia ja kypsyys: Selenium on ollut olemassa pitkään ja sillä on todistettu menestyshistoria. Sitä käytetään laajasti monissa tiimeissä ja toimialoilla, mikä on johtanut valtavaan lisäosien, integraatioiden ja resurssien ekosysteemiin.
  2. Selainten ja alustojen välinen tuki: Selenium tukee laajaa valikoimaa selaimia ja versioita, mukaan lukien Internet Explorer, ja se voidaan integroida myös erilaisiin työkaluihin kuten Docker, Selenium Grid ja pilvipalvelut hajautettua testausta varten.
  3. Mobiilitestaus: Selenium on Appium-integraationsa kautta paljon vankempi mobiilitestauksessa, mukaan lukien sekä Android- että iOS-sovellukset. Tämä tekee siitä paremman valinnan projekteille, joissa mobiili on ensisijainen tai painotettu.
  4. Moninäyttötestaus: Selenium tarjoaa paremman tuen skenaarioille, joihin liittyy useita näyttöjä tai monimutkaisia monen ikkunan vuorovaikutuksia.
Huonot puolet:
  1. Monimutkaisuus: Seleniumin rajapinta on sanallisempi ja eksplisiittisempi. Vaikka tämä voi joissakin tapauksissa olla etu, se tarkoittaa enemmän kirjoitettavaa ja ylläpidettävää koodia, mikä voi heikentää kehittäjien ketteryyttä — erityisen tärkeää startup-ympäristössä.
  2. Suorituskyky: Selenium on yleensä hitaampi kuin Playwright, erityisesti päättömässä tilassa. Tämä voi vaikuttaa CI/CD-putkiin, erityisesti testien määrän kasvaessa.
  3. Interaktiivisen käyttöliittymän testaus: Selenium ei ole yhtä sujuva kuin Playwright nykyaikaisten, interaktiivisten verkkokäyttöliittymien testauksessa, erityisesti kaavioiden ja reaaliaikaisten tietopäivitysten kanssa. Se vaatii enemmän asetuksia ja käsittelyä dynaamisen sisällön luotettavaan vuorovaikutukseen.

6. Vertailun yhteenveto

Ominaisuus Playwright Selenium
Käytön helppous Lyhyempi syntaksi, intuitiivisempi nykyaikaisille käyttöliittymille Eksplisiittisempi, vaatii enemmän kaavakoodia
Kielituki TypeScript, Python, JavaScript TypeScript, Python, Java, Ruby, C#
Interaktiivisen käyttöliittymän testaus Erinomainen dynaamisille, reaaliaikaisille käyttöliittymille Käsittelee peruskäyttöliittymiä, mutta sanallisempi ja monimutkaisempi rikkaille vuorovaikutuksille
Tiedostolatausten testaus Älykkäämpi rajapinta tiedostolatauksille Sanallisempi, vähemmän intuitiivinen rajapinta
CI/CD-integraatio Helppo integraatio GitHub Actionsiin, Jenkinsiin Vahva integraatio monien CI-työkalujen kanssa
Mobiilitestaus Rajallinen, vain simulaatio Täysi tuki Appiumin kautta
Selainten välinen tuki Chromium, WebKit, Firefox Täysi tuki tärkeimmille ja vanhoille selaimille
Suorituskyky Nopea, optimoitu päättömälle testaukselle Hitaampi, erityisesti päättömässä tilassa
Moninäyttötestaus Rajallinen Hyvä tuki moninäyttöjärjestelyille
Yhteisö ja ekosysteemi Kasvava, hyvä dokumentaatio Suuri, kypsä, laaja ekosysteemi

7. Päätös

Vaatimukset ja kompromissit huomioon ottaen Playwright on parempi valinta nykyisiin tarpeisiimme. Sen älykkäämpi rajapinta paikallisten tiedostolatausten testaukseen, ytimekäs syntaksi ja vahva tuki interaktiivisen käyttöliittymän testaukselle tekevät siitä ihanteellisen sopivan ketterään kehityssykliimme. Se, että se tukee sekä TypeScriptiä että Pythonia, on tiimillemme ratkaisevan tärkeää, ja kehyksen nykyaikainen lähestymistapa testaukseen mahdollistaa siistin, ylläpidettävän koodin kirjoittamisen.

Vaikka Selenium on edelleen erinomainen työkalu, erityisesti mobiilitestaukseen, vanhojen selainten tukeen ja moninäyttöjärjestelyihin, se sopii nykyisiin tarpeisiimme huonommin. Sen sanallisuus, hitaampi suorituskyky ja dynaamisten käyttöliittymien, kuten kaavioiden, monimutkaisempi käsittely tekevät siitä vähemmän optimaalisen käyttötapaukseemme.

8. Seuraukset

  • Välitön toimenpide: Otamme Playwrightin käyttöön E2E-testauksessamme keskittyen käyttäjäpolkujen testaukseen, joihin kuuluu rekisteröityminen, kirjautuminen, tiedostolataukset, kojelaudat ja raporttilataukset.
  • Pitkän aikavälin huomiot: Seuraamme Playwrightin kehittyvää ekosysteemiä. Jos tarpeemme muuttuvat, erityisesti mobiilitestauksen tai vanhojen selainten tuen osalta, voimme palata Seleniumiin.
  • Koulutus ja dokumentaatio: Kehitystiimien on tutustuttava Playwrightin rajapintaan, erityisesti dynaamisten käyttöliittymien ja tiedostolatausten käsittelyyn.
  • Siirtymä: Olemassa olevat Selenium-testit (jos sellaisia on) siirretään vähitellen Playwrightiin.

9. Tulevaisuuden huomiot