Playwright või Cypress: kiirem test ei pruugi olla stabiilsem valik

|Autor: QUASA toimetus|4 min lugemist
Playwright või Cypress: kiirem test ei pruugi olla stabiilsem valik

Kui uue veebirakenduse E2E-testid peavad katma Chromiumi, Firefoxi ja WebKiti, on Playwright tugev lähtevalik. Kui meeskonna suurem mure on harva ilmuvate tõrgete uurimine, tasub kaaluda Cypressit koos Cypress Cloudiga. Üksiku testi kiirem täitmine ei ütle veel, kui sageli test õigesti läbib või kui kaua võtab ebaõnnestumise selgitamine.

Valikut mõjutavad brauserinõuded, ootamismehhanism, silumisvahendid ja kogu CI-käivituse korraldus. Täitmisaja ühtlus ning testi töökindlus on eri mõõdikud: test võib käia iga kord peaaegu sama kaua, kuid siiski vale eelduse või jagatud andmete tõttu juhuslikult läbi kukkuda.

Brauseritugi: WebKiti staatus muudab valikut

Playwrighti ja Cypressi brauseritugi: Chromium ja Firefox on mõlemal kasutusel, Cypressi WebKiti tugi on katseline.

Playwrighti brauserijuhend kirjeldab Chromiumi, Firefoxi ja WebKiti käitamist ning võimalust kasutada Google Chrome’i ja Microsoft Edge’i. Projekte saab seadistada eri brauserite ja seadmeprofiilide jaoks. See teeb mitme brauserimootori kontrolli lihtsaks lähtekohaks, kui sama kasutajateekond peab läbima kogu nõutud komplekti.

Cypressi brauserijuhend loetleb Chrome’i perekonna ja Firefoxi ning märgib WebKiti toe katseliseks. Seetõttu on WebKiti kohustuslikul katmisel Playwrightil selgem positsioon. Playwrighti WebKit põhineb siiski eraldi järgul, mitte paigaldatud Safari rakendusel; kui nõue puudutab kindlat Safari väljalaset või platvormipõhist meediakäitumist, tuleb seda eraldi arvesse võtta.

Automaatne ootamine aitab ainult õige tingimuse korral

Playwrighti automaatse ootamise juhend näitab, et enne klõpsu kontrollitakse elemendi nähtavust, stabiilsust, sündmuste vastuvõttu ja lubatud olekut. Ootavad väited proovivad tingimust uuesti kuni selle täitumise või ajalimiidini. Nii saab test oodata näiteks pärast päringut aktiveeruvat nuppu ilma fikseeritud viivituseta.

Ka Cypressi päringud ja väited ootavad tingimuse täitumist. Raamistike erinevus ei taandu seega küsimusele, kas üks ootab ja teine mitte. Kui test klõpsab valet nuppu, tugineb muutuvale tekstile või eeldab sõltumatute võrgupäringute kindlat saabumisjärjekorda, võib ootamine muuta vea avaldumise aega, kuid ei paranda testi eeldust. Stabiilsuse hindamisel tuleb eristada kasutajaliidese valmimist, testandmete olekut ja seda, mida väide tegelikult kontrollib.

Mida Angulari mõõtmine kiiruse kohta näitab?

Avaldatud Angulari võrdluses oli Playwright kõigis viies stsenaariumis Cypressist kiirem; näiteks esimese stsenaariumi keskmised ajad olid 10,33 ja 21,96 sekundit. Katsed tehti ühe kohalikult käitatud rakendusega kontrollitud arvutikeskkonnas, brauserid töötasid ilma nähtava aknata ning iga stsenaariumi korrati igas brauserikeskkonnas 50 korda. Need arvud kirjeldavad selle rakenduse ja seadistuse mõõtmist.

Uuringus kõikus Playwrighti täitmisaeg samuti vähem. Autorid hindasid stabiilsust peamiselt täitmisaja ja ressursikasutuse hajuvuse järgi; sellest ei saa tuletada kummagi tööriista juhuslike CI-läbikukkumiste määra mõnes teises projektis. Pikema kasutajateekonna, teistsuguste testandmete või ülekoormatud CI-masina korral muutub mõõdetav töö. Seepärast ei ole uuringu sekundite vahe lubadus, mille võiks oma testikomplekti ajakavasse üle kanda.

Kui kiirus mõjutab valikut, on võrreldav üksus kogu käivitus: brauseri ettevalmistus, testide jaotus, korduskatsed ja tulemuste talletamine. Lühike üksiktest võib kuuluda aeglasesse töövoogu, kui teised testid ootavad ühes järjekorras. Samuti võib korduskatsetega roheline lõpptulemus varjata esimesel katsel ebakindlat testi.

Silumine ja paralleelsus mõjutavad tegelikku ajakulu

Cypressi Command Logi tõrkesamm seostub Cypress Cloudi varasemate testikäivituste ajalooga.

Cypressi ametlik võrdlus toob esile interaktiivse Command Logi, Test Replay ning Cypress Cloudi ebastabiilsete testide ajaloo. Cloudi koondatud käivitusandmed on eriti kasulikud, kui sama tõrge tuleb tagasi eri CI-käivitustes ja üks kohalik kordus seda ei taasta. Playwrighti jälg võimaldab samuti uurida toiminguid ja lehe olekut, kuid meeskonnal tuleb korraldada selle säilitamine ning ligipääs CI tulemustest.

Paralleelsuse puhul loeb, kuidas testikomplekt tööde vahel jaguneb. Playwrighti jaotust saab korraldada oma CI-töödes; Cypress Cloud saab salvestatud käivitustes jagada spetsifikatsioonifaile ning kasutada varasemaid kestusi koormuse tasakaalustamiseks. Mõlemal juhul seab piiri jagatud kasutajakonto, muudetav andmebaas või üks väga pikk testifail. Lisamasin ei tee sõltuvatest testidest sõltumatuid teste.

Otsustusmaatriks viie töövoo jaoks

  • Mitme brauserimootori kohustuslik kontroll. Alusta Playwrightist, kui Chromium, Firefox ja WebKit peavad kõik kuuluma tavapärasesse käivitusse. Täpse Safari versiooni nõue vajab eraldi kontrolli.
  • Chrome’i või Edge’i keskne väike rakendus. Mõlemad on mõistlikud kandidaadid. Kui kohalik käsupõhine silumine säästab rohkem aega kui lühem käivitus, võib Cypress meeskonnale paremini sobida.
  • Suur komplekt mitmes CI-töös. Võrdle oma korraldatud Playwrighti jaotust Cypress Cloudi tasakaalustamisega kogu töövoo kestuse järgi. Arvesta ka sellega, kas meeskond soovib kasutada pilveteenust.
  • Harvad ja raskesti taastatavad tõrked. Cypress Cloudi käivituste ajalugu ja Test Replay annavad varasemate juhtumite uurimiseks koondatud vaate. Hästi säilitatud Playwrighti jälgedega töövoos võib praktiline vahe olla väiksem.
  • Ühist olekut muutvad testid. Eralda kontod ja andmed enne paralleelsuse suurendamist. Muidu mõjutab ühe testi tegevus teise tulemust sõltumata valitud raamistikust.

Sama kasutajateekond mõlemas raamistikus

Järgmine on tingimuslik näide, mitte mõõdetud jõudlustulemus. Eelda rakendust, mille avalehel on salvestusnupp atribuudiga data-testid=save. Pärast klõpsu ilmub nähtav element atribuudiga data-testid=save-status ja tekstiga „Salvestatud”. Mõlemas projektis peab baseURL viitama samale rakendusele ning salvestatav andmestik peab enne käivitust olema samas lähteolekus.

Playwrighti test: import { test, expect } from '@playwright/test'; test('salvestamine', async ({ page }) => { await page.goto('/'); await page.getByTestId('save').click(); await expect(page.getByTestId('save-status')).toBeVisible(); await expect(page.getByTestId('save-status')).toHaveText('Salvestatud'); });

Cypressi test: it('salvestamine', () => { cy.visit('/'); cy.get('[data-testid=save]').click(); cy.get('[data-testid=save-status]').should('be.visible').and('have.text', 'Salvestatud'); });

Mõlemad testid avavad sama lehe, vajutavad sama nuppu ning kontrollivad nähtavat tulemust. Võrreldava käivituse jaoks kasuta sama brauserit, rakenduse versiooni ja eraldatud testandmeid. Kirjuta eraldi üles üksiktesti kestus, kogu CI-töö kestus ja esimesel katsel ebaõnnestumised; tõrke uurimiseks kuluv aeg näitab silumisvahendite mõju, mida sekundites mõõdetud test üksi ei näita.

Loe ka:

Jaga:

Telli meie uudiskiri

Saa värskeimad Web3, AI ja krüptouudised otse oma postkasti.

0