Playwright или Cypress: бржи тест није увек бржи CI

|Аутор: Уредништво QUASA|5 мин читања
Playwright или Cypress: бржи тест није увек бржи CI

За краћи CI циклус, Playwright је добар избор када тим жели да сам управља бројем радника и поделом тестова на послове. Cypress Cloud је привлачнији када се трајања спецификација мењају и важна је динамичка расподела на слободне машине. Бржи појединачни тест зато не гарантује да ће цео пакет раније завршити.

Избор има смисла донети на истом скупу E2E сценарија, у истом прегледачу и са упоредивим CI ресурсима. Локално време говори о извршавању сценарија, док време повратне информације обухвата припрему послова, расподелу пакета и најспорији преостали задатак. Одвојено треба проценити колико ресурса тај распоред троши и како се после неуспеха налази узрок грешке.

Шта говори локално време теста

Исти сценарио додавања производа у корпу даје различита локална времена у Playwright-у и Cypress-у.

Локално мерење је корисно за конкретан сценарио, али резултат зависи од апликације, машине и начина извршавања. У студији о алатима за веб тестирање сваки тест је покренут десет пута на истој пробној апликацији, а упоређени су просечно трајање, употреба процесора и меморије. Регистрација новог корисника трајала је у просеку 2,51 секунду у Playwright-у и 3,49 у Cypress-у; при додавању производа у корпу Cypress је имао 9,66, а Playwright 10,75 секунди.

То су резултати одређених тестова у студији, а не универзална брзина два оквира. Аутори су мерили на једној радној станици, па из тих бројева не следи колико ће трајати покретање на више CI машина. Они ипак показују зашто треба мерити разноврстан пакет: алат који је бржи у једном току може бити спорији у другом. За одлуку су значајни и дужина најспорије датотеке и то да ли кратки тестови могу да раде истовремено.

Како се пакет дели међу машинама

Playwright подразумевано извршава датотеке паралелно на једној машини, а подела помоћу shard-ова омогућава да засебни CI послови преузму делове пакета преко параметра --shard=x/y. Без подешавања fullyParallel расподела иде по датотекама; са њим може да иде по појединачним тестовима. Тим унапред одређује укупан број делова, али сваки део и даље може користити више локалних радника. То су два нивоа паралелизације која не треба мешати при поређењу времена.

Ако једна датотека садржи много дужи ток од осталих, подела по датотекама може оставити један посао активним док су други готови. Подела по тестовима даје ситније јединице рада, али има смисла само за тестове који могу независно да се извршавају. Код заједничких налога, стања корпе или података који се мењају, повећање броја радника може открити зависност међу тестовима. Тада питање брзине постаје и питање изолације тестних података.

Cypress Cloud динамички додељује целе спецификације доступним CI машинама, користећи процену трајања засновану на ранијим покретањима. Машина која се ослободи преузима следећу спецификацију из заједничког реда; режим ради уз снимање покретања и паралелно извршавање у Cloud-у. То смањује потребу да тим ручно прерасподељује датотеке када им се трајања промене. Ипак, једна већ започета дуга спецификација остаје целина: нова слободна машина не може да преузме њен преостали део.

Када краћи CI постаје скупљи

Трајање целог CI покретања и утрошак инфраструктуре су различите мере. Брзину одређује тренутак када се заврши последњи неопходан посао; за процену CI потрошње треба сабрати време заузећа свих послова. Више машина може скратити чекање тима, а истовремено повећати укупно време које се наплаћује по машинама. Ако се послови покрећу споро или остају неравномерно попуњени, додатна паралелизација може донети мање користи него што сугерише збир времена локалних тестова.

Условни пример то разјашњава: ако два посла трају приближно исто, њихово истовремено покретање скраћује време до резултата, али не уклања рад који су оба обавила. Ако сви послови чекају да се једна дуга спецификација заврши, додавање још машине не решава застој. Трошак Cypress Cloud-а треба гледати поред трошка CI машина, према условима плана који тим стварно користи; локално покретање Cypress-а и услуга за Cloud расподелу имају различите услове коришћења.

Прегледачи и отклањање грешака мењају поређење

Cypress приказује стања после команди, док Playwright чува trace за накнадни преглед грешке.

Исти тест не треба поредити у различитим прегледачима као да је разлика настала само због оквира. Cypress-ово упутство за прелазак описује да Playwright преузима сопствене верзије Chromium-а, Firefox-а и WebKit-а, док Cypress за Chrome, Firefox и Edge користи прегледаче инсталиране у окружењу. То утиче на постављање CI посла, контролу верзије прегледача и време припреме. Упутство такође приказује Playwright-ов trace артефакт и Cypress Cloud Test Replay као начине за накнадни преглед покретања.

За локалну истрагу грешке, Cypress open mode приказује редослед команди и снимке стања апликације уз кораке теста. Playwright-ов сачувани trace отвара се после покретања, док је Test Replay везан за покретања снимљена у Cypress Cloud-у. Разлика је у радном току: локални интерактивни приказ, сачувани траг и репродукција удаљеног покретања не траже исти поступак од програмера. Ако је проблем редак, али тежак за поновити, доступност одговарајућег артефакта може бити важнија од мале разлике у времену успешног теста.

Исти мали пакет као основа одлуке

За пробу су довољни исти кратак ток, дужи ток и сценарио у ком је отклањање грешке важно, под условом да се у оба оквира проверава исто понашање апликације. Прво треба забележити време сваког сценарија локално, а затим време целог пакета у CI-ју. За Playwright се уписују број локалних радника и распоред shard-ова; за Cypress треба јасно разликовати обично покретање од покретања снимљеног у Cloud-у са паралелном расподелом. Исти број CI машина није довољан за поштено поређење ако им се разликују процесор, меморија или припрема прегледача.

Одлуку онда воде три запажања: када стиже резултат целог пакета, колико су дуго машине биле заузете и колико брзо се објашњава неуспех. Уједначени, независни тестови погодни су за Playwright-ову унапред задату поделу. Пакет у ком се трајања спецификација често мењају може више добити од динамичке доделе у Cypress Cloud-у, под условом да тиму одговарају услови коришћења. Ако једна дуга спецификација одређује крај сваког покретања, прво треба променити величину јединице рада, па тек онда разматрати још CI машина.

Прочитајте и:

Подели:

Претплатите се на наш билтен

Добијајте најновије вести о Web3, AI-у и криптовалутама директно у пријемно сандуче.

0