Architecture Decision Record

Active theme: Light

← Mifano ya rekodi za maamuzi

Rekodi ya uamuzi wa usanifu: mfumo wa kiotomatiki wa kivinjari kwa majaribio ya E2E (Playwright au Selenium)

1. Muktadha

Tuko katika mchakato wa kuchagua mfumo wa kiotomatiki wa kivinjari kwa mfereji wetu wa majaribio ya mwanzo-hadi-mwisho (E2E). Mfumo huu utakuwa muhimu katika michakato yetu ya CI/CD, ukiendesha majaribio yanayoiga mwingiliano halisi wa watumiaji kwenye jukwaa letu. Hasa, majaribio yatashughulikia hali kama usajili/kuingia kwa mtumiaji, upakiaji wa faili, mwingiliano wa dashibodi, na upakuaji wa ripoti.

Kama kampuni changa, mkazo wetu ni uundaji wenye wepesi, tukihitaji kurudia na kubadilika kwa haraka. Timu yetu hufanya kazi hasa na TypeScript na Python, na uwezo wa kuandika majaribio katika lugha hizi ni muhimu. Zaidi ya hayo, jukwaa lina chati na dashibodi zenye mwingiliano, jambo linalofanya iwe muhimu kwamba zana ya kiotomatiki inasaidia vizuri violesura tajiri na vinavyobadilika.

Washindani wawili wa kazi hii ni Playwright na Selenium, kila mmoja akiwa na nguvu na mabadilishano yake. Tunahitaji kutathmini mifumo hii kulingana na vipengele na mahitaji yaliyoainishwa hapa chini.

2. Chaguo Zilizozingatiwa

  • Playwright (na Microsoft)
  • Selenium (na Mradi wa Selenium)

3. Vichocheo vya Uamuzi

Mambo yanayoathiri uamuzi wetu ni kama ifuatavyo:

  1. Uundaji wenye Wepesi: Zana iliyochaguliwa lazima iwezeshe mizunguko ya uundaji ya haraka na inayobadilika.
  2. Usaidizi wa Lugha: Timu yetu inahitaji usaidizi wa TypeScript na Python zote mbili.
  3. Kujaribu UI yenye Mwingiliano: Uwezo wa kujaribu chati zenye mwingiliano, dashibodi, na vipengele vinavyobadilika kwa kuaminika ni muhimu.
  4. Kasi ya Utekelezaji: Ingawa si jambo kuu, utendaji katika mifereji ya CI/CD ni jambo la kuzingatia.
  5. Uwezo wa Kupanuka: Hatupangi upanuzi mkubwa katika siku za usoni zilizo karibu, lakini tunataka kuhakikisha suluhisho linaweza kushughulikia ukuaji wa baadaye.
  6. Upatanifu wa Nyuma: Mifumo ya zamani na upatanifu na vivinjari vya zamani si muhimu kwa mradi wetu kwa wakati huu.
  7. Majaribio ya Simu: Ingawa si mkazo wa haraka, mfumo unapaswa kuweza kujaribu vipengele vinavyojibu kwenye simu au kupanuliwa kwa visa vya matumizi hivyo.
  8. Majaribio ya Wachunguzi Wengi: Usaidizi wa usanidi wa wachunguzi wengi ni hitaji la pili, hasa ikiwa tutapanuka kujaribu mtiririko changamano zaidi wa watumiaji.
  9. Majaribio ya Upakiaji wa Faili: Mfumo lazima ushughulikie upakiaji wa faili kwa ufanisi, hitaji la msingi la mahitaji yetu ya majaribio.

4. Vigezo vya Tathmini

  • Urahisi wa Matumizi: Ni rahisi kiasi gani kuandika na kudumisha majaribio?
  • Usaidizi wa Lugha: Je, mfumo unasaidia TypeScript na Python, lugha mbili ambazo timu yetu hutumia mara nyingi zaidi?
  • Kujaribu UI yenye Mwingiliano: Mfumo unashughulikia vizuri kiasi gani violesura changamano vya watumiaji vyenye mwingiliano kama chati, upakiaji wa faili, na data inayobadilika?
  • Ujumuishaji wa CI/CD: Mfumo unajumuika vizuri kiasi gani katika zana na huduma za kawaida za CI/CD?
  • Usaidizi wa Vivinjari Vingi: Ni vivinjari gani vinasaidiwa na vinafanya kazi vipi?
  • Utendaji na Kasi: Majaribio yanaendeshwa kwa kasi gani, hasa katika mfereji wa CI/CD?
  • Uwezo wa Kupanuka: Mfumo unaweza kupanuka vizuri kiasi gani ikiwa majaribio zaidi au hali changamano zaidi zitaongezwa?
  • Jamii na Mfumo Ikolojia: Jamii ya mfumo ni hai kiasi gani? Je, kuna ujumuishaji na viendelezi vingi vinavyopatikana?

5. Mazingatio

5.1 Playwright

Faida:
  1. API Bora Zaidi ya Upakiaji wa Faili za Ndani: API ya Playwright ya kuingiliana na faili za ndani na kutekeleza upakiaji wa faili ni rahisi na angavu zaidi. Hii ingerahisisha kutekeleza na kudumisha majaribio ya upakiaji wa faili.
  2. Sintaksia na Uzalishaji wa Msimbo: Playwright ina sintaksia fupi zaidi na ya ufupi. Hii husababisha msimbo wa kawaida mdogo, unaoboresha udumishaji na ufanisi wa mwundaji. Zaidi ya hayo, sintaksia hii fupi huboresha ubora wa uzalishaji wa msimbo wa OpenAI, ikirahisisha kuzalisha hati za majaribio kiotomatiki.
  3. Kujaribu UI yenye Mwingiliano: Playwright hufanya vizuri sana katika kujaribu programu za wavuti zinazobadilika, zenye mwingiliano, kama zile zenye chati tajiri, mwingiliano changamano wa watumiaji, na masasisho ya wakati halisi. Inashughulikia WebSockets, WebRTC, shadow DOMs, na teknolojia nyingine za kisasa za wavuti kwa ufanisi sana.
  4. Usaidizi wa Vivinjari Vingi: Playwright inasaidia Chromium, WebKit, na Firefox. Ina utendaji thabiti katika vivinjari hivi, jambo linalopaswa kufunika mahitaji yetu mengi ya majaribio.
  5. Ujumuishaji wa CI/CD: Playwright huunganishwa bila mshono na majukwaa ya kisasa ya CI/CD (GitHub Actions, Jenkins, n.k.). Inaweza kuendesha majaribio kwa sambamba katika vivinjari tofauti, ikiboresha muda wa kuendesha majaribio na kuifanya ifae kwa uundaji wa haraka.
  6. Haraka na ya Kuaminika: Playwright ni ya haraka kuliko Selenium kwa ujumla, hasa katika hali isiyo na kichwa (headless), na imara zaidi inaposhughulika na vipengele vya wavuti visivyolandana.
Hasara:
  1. Majaribio Machache ya Simu: Ingawa Playwright inasaidia uigaji wa simu kwa vivinjari, inakosa uwezo asilia wa majaribio ya simu kama ujumuishaji wa Selenium na Appium kwa majaribio halisi ya simu.
  2. Mfumo Ikolojia Mdogo Zaidi: Playwright bado ni mpya zaidi na haijaimarika kama Selenium. Ingawa ina jamii inayokua kwa kasi na nyaraka nzuri, huenda bado haina mfumo ikolojia mkubwa wa programu-jalizi na ujumuishaji ambao Selenium hutoa.
  3. Usaidizi Mdogo wa Vivinjari: Ingawa Playwright inashughulikia vivinjari vikuu vya kisasa (Chrome, Safari, Firefox), usaidizi wake kwa vivinjari vya zamani (mf., Internet Explorer) si imara kama wa Selenium.

5.2 Selenium

Faida:
  1. Historia Ndefu na Ukomavu: Selenium imekuwepo kwa muda mrefu na ina rekodi iliyothibitishwa. Inatumika kwa upana na timu na sekta nyingi, jambo lililosababisha mfumo ikolojia mkubwa wa programu-jalizi, ujumuishaji, na rasilimali.
  2. Usaidizi wa Vivinjari Vingi na Majukwaa Mengi: Selenium inasaidia anuwai pana ya vivinjari na matoleo, ikiwa ni pamoja na Internet Explorer, na pia inaweza kuunganishwa na zana mbalimbali kama Docker, Selenium Grid, na huduma za wingu kwa majaribio yaliyosambazwa.
  3. Majaribio ya Simu: Selenium, kupitia ujumuishaji wake na Appium, ni imara zaidi kwa majaribio ya simu, ikiwa ni pamoja na programu za Android na iOS. Hii inaifanya kuwa chaguo bora kwa miradi inayolenga simu au inayotegemea sana simu.
  4. Majaribio ya Wachunguzi Wengi: Selenium hutoa usaidizi bora kwa hali zinazohusisha wachunguzi wengi au mwingiliano changamano wa madirisha mengi.
Hasara:
  1. Utata: API ya Selenium ni ndefu zaidi na wazi zaidi. Ingawa hii inaweza kuwa faida katika baadhi ya hali, inamaanisha msimbo zaidi wa kuandika na kudumisha, jambo linaloweza kupunguza wepesi wa waundaji—muhimu hasa katika mazingira ya kampuni changa.
  2. Utendaji: Selenium kwa ujumla huendesha polepole kuliko Playwright, hasa katika hali isiyo na kichwa. Hii inaweza kuathiri mifereji ya CI/CD, hasa kadiri idadi ya majaribio inavyoongezeka.
  3. Kujaribu UI yenye Mwingiliano: Selenium si laini kama Playwright inapokuja kujaribu UI za kisasa za wavuti zenye mwingiliano, hasa zenye chati na masasisho ya data ya wakati halisi. Inahitaji usanidi na ushughulikiaji zaidi ili kuingiliana kwa kuaminika na maudhui yanayobadilika.

6. Muhtasari wa Ulinganisho

Kipengele Playwright Selenium
Urahisi wa Matumizi Sintaksia fupi, angavu zaidi kwa UI za kisasa Wazi zaidi, inahitaji msimbo wa kawaida zaidi
Usaidizi wa Lugha TypeScript, Python, JavaScript TypeScript, Python, Java, Ruby, C#
Kujaribu UI yenye Mwingiliano Bora kwa UI zinazobadilika za wakati halisi Inashughulikia UI za msingi, lakini ndefu zaidi na changamano kwa mwingiliano tajiri
Majaribio ya Upakiaji wa Faili API bora zaidi ya upakiaji wa faili Ndefu zaidi, API isiyo angavu sana
Ujumuishaji wa CI/CD Ujumuishaji rahisi na GitHub Actions, Jenkins Ujumuishaji imara na zana nyingi za CI
Majaribio ya Simu Machache, uigaji tu Usaidizi kamili kupitia Appium
Usaidizi wa Vivinjari Vingi Chromium, WebKit, Firefox Usaidizi kamili katika vivinjari vikuu na vya zamani
Utendaji Haraka, imeboreshwa kwa majaribio yasiyo na kichwa Polepole zaidi, hasa katika hali isiyo na kichwa
Majaribio ya Wachunguzi Wengi Machache Usaidizi mzuri wa usanidi wa wachunguzi wengi
Jamii na Mfumo Ikolojia Inayokua, nyaraka nzuri Kubwa, iliyokomaa, mfumo ikolojia mpana

7. Uamuzi

Baada ya kuzingatia mahitaji na mabadilishano, Playwright ni chaguo bora zaidi kwa mahitaji yetu ya sasa. API yake bora zaidi ya kujaribu upakiaji wa faili za ndani, sintaksia fupi, na usaidizi imara wa kujaribu UI yenye mwingiliano huifanya iwe inayofaa kabisa kwa mzunguko wetu wa uundaji wenye wepesi. Ukweli kwamba inasaidia TypeScript na Python zote mbili ni muhimu kwa timu yetu, na mbinu ya kisasa ya mfumo ya kujaribu itaturuhusu kuandika msimbo safi, unaoweza kudumishwa.

Ingawa Selenium inabaki kuwa zana nzuri, hasa kwa majaribio ya simu, usaidizi wa vivinjari vya zamani, na usanidi wa wachunguzi wengi, haifai sana mahitaji yetu ya sasa. Ndefu yake, utendaji wa polepole zaidi, na ushughulikiaji changamano zaidi wa UI zinazobadilika kama chati huifanya isiwe bora kwa kisa chetu cha matumizi.

8. Matokeo

  • Hatua ya Haraka: Tutapitisha Playwright kwa majaribio yetu ya E2E, tukizingatia kujaribu mtiririko wa watumiaji unaohusisha usajili, kuingia, upakiaji wa faili, dashibodi, na upakuaji wa ripoti.
  • Mazingatio ya Muda Mrefu: Tutafuatilia mfumo ikolojia unaobadilika wa Playwright. Mahitaji yetu yakibadilika, hasa kuhusu majaribio ya simu au usaidizi wa vivinjari vya zamani, tunaweza kupitia upya Selenium.
  • Mafunzo na Nyaraka: Timu za uundaji zitahitaji kuifahamu API ya Playwright, hasa kwa kushughulikia UI zinazobadilika na upakiaji wa faili.
  • Uhamiaji: Majaribio ya Selenium yaliyopo (ikiwa yapo) yatahamishwa polepole kwenda Playwright.

9. Mazingatio ya Baadaye