Architecture Decision Record

Active theme: Light

← ឧទាហរណ៍កំណត់ត្រាការសម្រេចចិត្ត

កំណត់ត្រាការសម្រេចចិត្តខាងស្ថាបត្យកម្ម៖ ក្របខ័ណ្ឌស្វ័យប្រវត្តិកម្មកម្មវិធីរុករកសម្រាប់ការធ្វើតេស្ត E2E (Playwright ប្រៀបធៀប Selenium)

1. បរិបទ

យើងកំពុងស្ថិតក្នុងដំណើរការជ្រើសរើសក្របខ័ណ្ឌស្វ័យប្រវត្តិកម្មកម្មវិធីរុករកសម្រាប់បំពង់ធ្វើតេស្តពីចុងដល់ចុង (E2E) របស់យើង។ ក្របខ័ណ្ឌនេះនឹងមានសារៈសំខាន់ចំពោះដំណើរការ CI/CD របស់យើង ដោយដំណើរការតេស្តដែលក្លែងធ្វើអន្តរកម្មរបស់អ្នកប្រើពិតប្រាកដលើវេទិការបស់យើង។ ជាពិសេស តេស្តនឹងគ្របដណ្តប់សេណារីយ៉ូដូចជា ការចុះឈ្មោះ/ចូលរបស់អ្នកប្រើ ការផ្ទុកឡើងឯកសារ អន្តរកម្មផ្ទាំងគ្រប់គ្រង និងការទាញយករបាយការណ៍។

ក្នុងនាមជា ក្រុមហ៊ុនថ្មី (startup) ការផ្តោតរបស់យើងគឺលើ ការអភិវឌ្ឍបែប agile ជាមួយនឹងតម្រូវការធ្វើវដ្ត និងវិវត្តយ៉ាងលឿន។ ក្រុមរបស់យើងភាគច្រើនធ្វើការជាមួយ TypeScript និង Python ហើយសមត្ថភាពក្នុងការសរសេរតេស្តជាភាសាទាំងនេះគឺចាំបាច់។ លើសពីនេះ វេទិកាមាន តារាងគំនូស និងផ្ទាំងគ្រប់គ្រងអន្តរកម្ម ដែលធ្វើឱ្យមានសារៈសំខាន់ណាស់ដែលឧបករណ៍ស្វ័យប្រវត្តិកម្មគាំទ្រ UI ថាមវន្តដែលសម្បូរបែបបានល្អ។

បេក្ខជនទាំងពីរសម្រាប់កិច្ចការនេះគឺ Playwright និង Selenium ដែលនីមួយៗមានចំណុចខ្លាំង និងការដោះដូរផ្ទាល់ខ្លួន។ យើងត្រូវវាយតម្លៃក្របខ័ណ្ឌទាំងនេះដោយផ្អែកលើមុខងារ និងតម្រូវការដែលបានគូសបញ្ជាក់ខាងក្រោម។

2. ជម្រើសដែលបានពិចារណា

  • Playwright (ដោយ Microsoft)
  • Selenium (ដោយគម្រោង Selenium)

3. កត្តាជំរុញការសម្រេចចិត្ត

កត្តាដែលមានឥទ្ធិពលលើការសម្រេចចិត្តរបស់យើងមានដូចតទៅ៖

  1. ការអភិវឌ្ឍបែប Agile: ឧបករណ៍ដែលបានជ្រើសរើសត្រូវអាចធ្វើឱ្យវដ្តអភិវឌ្ឍលឿន និងបត់បែន។
  2. ការគាំទ្រភាសា: ក្រុមរបស់យើងត្រូវការការគាំទ្រទាំង TypeScript និង Python។
  3. ការធ្វើតេស្ត UI អន្តរកម្ម: សមត្ថភាពក្នុងការសាកល្បងតារាងគំនូស ផ្ទាំងគ្រប់គ្រង និងធាតុថាមវន្តបានដោយអាចទុកចិត្តបានគឺចាំបាច់។
  4. ល្បឿនពេលដំណើរការ: ទោះបីមិនមែនជាកង្វល់ចម្បង ប្រសិទ្ធភាពក្នុងបំពង់ CI/CD គឺជាការពិចារណាមួយ។
  5. ភាពអាចពង្រីកបាន: យើងមិនគ្រោងពង្រីកខ្លាំងក្នុងពេលឆាប់ៗទេ ប៉ុន្តែយើងចង់ធានាថាដំណោះស្រាយអាចដោះស្រាយការលូតលាស់នាពេលអនាគត។
  6. ភាពត្រូវគ្នាថយក្រោយ: ប្រព័ន្ធចាស់ និងភាពត្រូវគ្នាជាមួយកម្មវិធីរុករកចាស់មិនសំខាន់សម្រាប់គម្រោងរបស់យើងនៅពេលនេះទេ។
  7. ការធ្វើតេស្តទូរស័ព្ទ: ទោះបីមិនមែនជាការផ្តោតភ្លាមៗ ក្របខ័ណ្ឌគួរអាចសាកល្បងមុខងារឆ្លើយតបទូរស័ព្ទ ឬអាចពង្រីកបានសម្រាប់ករណីប្រើប្រាស់បែបនេះ។
  8. ការធ្វើតេស្តអេក្រង់ច្រើន: ការគាំទ្រការកំណត់រចនាសម្ព័ន្ធអេក្រង់ច្រើនគឺជាតម្រូវការបន្ទាប់បន្សំ ជាពិសេសប្រសិនបើយើងធ្លាប់ពង្រីកទៅសាកល្បងលំហូរការងារអ្នកប្រើស្មុគស្មាញជាង។
  9. ការធ្វើតេស្តផ្ទុកឡើងឯកសារ: ក្របខ័ណ្ឌត្រូវដោះស្រាយការផ្ទុកឡើងឯកសារប្រកបដោយប្រសិទ្ធភាព ដែលជាតម្រូវការស្នូលនៃតម្រូវការធ្វើតេស្តរបស់យើង។

4. លក្ខណៈវិនិច្ឆ័យវាយតម្លៃ

  • ភាពងាយប្រើ: តើវាងាយប៉ុណ្ណាក្នុងការសរសេរ និងថែទាំតេស្ត?
  • ការគាំទ្រភាសា: តើក្របខ័ណ្ឌគាំទ្រ TypeScript និង Python ដែលជាភាសាពីរដែលក្រុមរបស់យើងប្រើញឹកញាប់បំផុតឬទេ?
  • ការធ្វើតេស្ត UI អន្តរកម្ម: តើក្របខ័ណ្ឌដោះស្រាយចំណុចប្រទាក់អ្នកប្រើអន្តរកម្មស្មុគស្មាញដូចជាតារាងគំនូស ការផ្ទុកឡើងឯកសារ និងទិន្នន័យថាមវន្តបានល្អប៉ុណ្ណា?
  • ការរួមបញ្ចូល CI/CD: តើក្របខ័ណ្ឌរួមបញ្ចូលទៅក្នុងឧបករណ៍ និងសេវាកម្ម CI/CD ទូទៅបានល្អប៉ុណ្ណា?
  • ការគាំទ្រកម្មវិធីរុករកច្រើន: តើកម្មវិធីរុករកអ្វីខ្លះត្រូវបានគាំទ្រ ហើយដំណើរការបានល្អប៉ុណ្ណា?
  • ប្រសិទ្ធភាព និងល្បឿន: តើតេស្តដំណើរការលឿនប៉ុណ្ណា ជាពិសេសក្នុងបំពង់ CI/CD?
  • ភាពអាចពង្រីកបាន: តើក្របខ័ណ្ឌអាចពង្រីកបានល្អប៉ុណ្ណា ប្រសិនបើមានតេស្តច្រើនជាង ឬសេណារីយ៉ូស្មុគស្មាញជាងត្រូវបានបន្ថែម?
  • សហគមន៍ និងប្រព័ន្ធអេកូឡូស៊ី: តើសហគមន៍របស់ក្របខ័ណ្ឌសកម្មប៉ុណ្ណា? តើមានការរួមបញ្ចូល និងផ្នែកបន្ថែមច្រើនឬទេ?

5. ការពិចារណា

5.1 Playwright

គុណសម្បត្តិ:
  1. API ឆ្លាតជាងសម្រាប់ការផ្ទុកឡើងឯកសារក្នុងម៉ាស៊ីន: API របស់ Playwright សម្រាប់ធ្វើអន្តរកម្មជាមួយឯកសារក្នុងម៉ាស៊ីន និងអនុវត្តការផ្ទុកឡើងឯកសារ គឺសាមញ្ញ និងងាយយល់ជាង។ នេះនឹងធ្វើឱ្យការធ្វើតេស្តការផ្ទុកឡើងឯកសារងាយអនុវត្ត និងថែទាំជាង។
  2. វាក្យសម្ព័ន្ធ និងការបង្កើតកូដ: Playwright មានវាក្យសម្ព័ន្ធខ្លីជាង និងសង្ខេបជាង។ នេះនាំឱ្យមានកូដ boilerplate តិចជាង ដែលកែលម្អភាពអាចថែទាំបាន និងប្រសិទ្ធភាពអ្នកអភិវឌ្ឍន៍។ លើសពីនេះ វាក្យសម្ព័ន្ធខ្លីជាងនេះកែលម្អគុណភាពការបង្កើតកូដរបស់ OpenAI ដែលធ្វើឱ្យងាយស្រួលបង្កើតស្គ្រីបតេស្តដោយស្វ័យប្រវត្តិ។
  3. ការធ្វើតេស្ត UI អន្តរកម្ម: Playwright ពូកែក្នុងការសាកល្បងកម្មវិធីគេហទំព័រថាមវន្ត និងអន្តរកម្ម ដូចជាកម្មវិធីដែលមានតារាងគំនូសសម្បូរបែប អន្តរកម្មអ្នកប្រើស្មុគស្មាញ និងការធ្វើបច្ចុប្បន្នភាពពេលវេលាជាក់ស្តែង។ វាដោះស្រាយ WebSockets, WebRTC, shadow DOM និងបច្ចេកវិទ្យាគេហទំព័រទំនើបផ្សេងទៀតបានយ៉ាងមានប្រសិទ្ធភាព។
  4. ការគាំទ្រកម្មវិធីរុករកច្រើន: Playwright គាំទ្រ Chromium, WebKit និង Firefox។ វាមានប្រសិទ្ធភាពស៊ីសង្វាក់គ្នាលើកម្មវិធីរុករកទាំងនេះ ដែលគួរគ្របដណ្តប់តម្រូវការធ្វើតេស្តភាគច្រើនរបស់យើង។
  5. ការរួមបញ្ចូល CI/CD: Playwright រួមបញ្ចូលយ៉ាងរលូនជាមួយវេទិកា CI/CD ទំនើប (GitHub Actions, Jenkins ។ល។)។ វាអាចដំណើរការតេស្តស្របគ្នាលើកម្មវិធីរុករកផ្សេងៗ ដោយធ្វើឱ្យពេលវេលាដំណើរការតេស្តល្អបំផុត និងធ្វើឱ្យវាសមស្របសម្រាប់ការអភិវឌ្ឍលឿន។
  6. លឿន និងអាចទុកចិត្តបាន: Playwright លឿនជាង Selenium ជាទូទៅ ជាពិសេសក្នុងរបៀប headless និងធន់ជាងនៅពេលដោះស្រាយជាមួយធាតុគេហទំព័រអសមកាល។
គុណវិបត្តិ:
  1. ការធ្វើតេស្តទូរស័ព្ទមានកំណត់: ទោះបី Playwright គាំទ្រការក្លែងធ្វើទូរស័ព្ទសម្រាប់កម្មវិធីរុករក វាខ្វះសមត្ថភាពធ្វើតេស្តទូរស័ព្ទដើមកំណើតដូចការរួមបញ្ចូលរបស់ Selenium ជាមួយ Appium សម្រាប់ការធ្វើតេស្តទូរស័ព្ទពិតប្រាកដ។
  2. ប្រព័ន្ធអេកូឡូស៊ីតូចជាង: Playwright នៅតែថ្មីជាង និងមិនសូវមានមូលដ្ឋានរឹងមាំដូច Selenium។ ទោះបីវាមានសហគមន៍ដែលលូតលាស់លឿន និងឯកសារល្អក៏ដោយ វាប្រហែលជាមិនទាន់មានប្រព័ន្ធអេកូឡូស៊ីដ៏ធំនៃកម្មវិធីជំនួយ និងការរួមបញ្ចូលដែល Selenium ផ្តល់ទេ។
  3. ការគាំទ្រកម្មវិធីរុករកមានកំណត់: ទោះបី Playwright គ្របដណ្តប់កម្មវិធីរុករកទំនើបសំខាន់ៗ (Chrome, Safari, Firefox) ការគាំទ្ររបស់វាសម្រាប់កម្មវិធីរុករកចាស់ (ឧ. Internet Explorer) មិនរឹងមាំដូច Selenium ទេ។

5.2 Selenium

គុណសម្បត្តិ:
  1. ប្រវត្តិយូរជាង និងភាពចាស់ទុំ: Selenium មានអស់រយៈពេលជាយូរហើយ ហើយមានកំណត់ត្រាបង្ហាញភាពជោគជ័យ។ វាត្រូវបានប្រើយ៉ាងទូលំទូលាយនៅទូទាំងក្រុម និងឧស្សាហកម្មជាច្រើន ដែលបាននាំឱ្យមានប្រព័ន្ធអេកូឡូស៊ីដ៏ធំនៃកម្មវិធីជំនួយ ការរួមបញ្ចូល និងធនធាន។
  2. ការគាំទ្រកម្មវិធីរុករក និងវេទិកាច្រើន: Selenium គាំទ្រ កម្មវិធីរុករក និងកំណែច្រើនប្រភេទ រួមទាំង Internet Explorer ហើយក៏អាចរួមបញ្ចូលជាមួយឧបករណ៍ផ្សេងៗដូចជា Docker, Selenium Grid និង សេវាកម្មពពក សម្រាប់ការធ្វើតេស្តចែកចាយ។
  3. ការធ្វើតេស្តទូរស័ព្ទ: Selenium តាមរយៈការរួមបញ្ចូលជាមួយ Appium រឹងមាំជាងច្រើនសម្រាប់ការធ្វើតេស្តទូរស័ព្ទ រួមទាំងកម្មវិធី Android និង iOS។ នេះធ្វើឱ្យវាជាជម្រើសល្អជាងសម្រាប់គម្រោងដែលផ្តោតលើទូរស័ព្ទជាមុន ឬទូរស័ព្ទជាចម្បង។
  4. ការធ្វើតេស្តអេក្រង់ច្រើន: Selenium ផ្តល់ការគាំទ្រល្អជាងសម្រាប់សេណារីយ៉ូដែលពាក់ព័ន្ធនឹង អេក្រង់ច្រើន ឬអន្តរកម្មបង្អួចច្រើនស្មុគស្មាញ។
គុណវិបត្តិ:
  1. ភាពស្មុគស្មាញ: API របស់ Selenium វែងជាង និងច្បាស់លាស់ជាង។ ទោះបីនេះអាចជាអត្ថប្រយោជន៍ក្នុងករណីខ្លះក៏ដោយ វាមានន័យថាមានកូដច្រើនជាងដែលត្រូវសរសេរ និងថែទាំ ដែលអាចកាត់បន្ថយភាពរហ័សរហួនរបស់អ្នកអភិវឌ្ឍន៍ ជាពិសេសសំខាន់ក្នុងបរិយាកាសក្រុមហ៊ុនថ្មី។
  2. ប្រសិទ្ធភាព: Selenium ជាទូទៅដំណើរការយឺតជាង Playwright ជាពិសេសក្នុងរបៀប headless។ នេះអាចប៉ះពាល់ដល់បំពង់ CI/CD ជាពិសេសនៅពេលចំនួនតេស្តកើនឡើង។
  3. ការធ្វើតេស្ត UI អន្តរកម្ម: Selenium មិនរលូនដូច Playwright ទេ នៅពេលនិយាយអំពីការសាកល្បង UI គេហទំព័រទំនើប និងអន្តរកម្ម ជាពិសេសជាមួយតារាងគំនូស និងការធ្វើបច្ចុប្បន្នភាពទិន្នន័យពេលវេលាជាក់ស្តែង។ វាតម្រូវឱ្យមានការដំឡើង និងការដោះស្រាយបន្ថែមដើម្បីធ្វើអន្តរកម្មជាមួយមាតិកាថាមវន្តដោយអាចទុកចិត្តបាន។

6. សេចក្តីសង្ខេបនៃការប្រៀបធៀប

មុខងារ Playwright Selenium
ភាពងាយប្រើ វាក្យសម្ព័ន្ធខ្លីជាង ងាយយល់ជាងសម្រាប់ UI ទំនើប ច្បាស់លាស់ជាង តម្រូវឱ្យមាន boilerplate ច្រើនជាង
ការគាំទ្រភាសា TypeScript, Python, JavaScript TypeScript, Python, Java, Ruby, C#
ការធ្វើតេស្ត UI អន្តរកម្ម ឆ្នើមសម្រាប់ UI ថាមវន្ត ពេលវេលាជាក់ស្តែង ដោះស្រាយ UI មូលដ្ឋាន ប៉ុន្តែវែងជាង និងស្មុគស្មាញជាងសម្រាប់អន្តរកម្មសម្បូរបែប
ការធ្វើតេស្តផ្ទុកឡើងឯកសារ API ឆ្លាតជាងសម្រាប់ការផ្ទុកឡើងឯកសារ វែងជាង API មិនសូវងាយយល់
ការរួមបញ្ចូល CI/CD រួមបញ្ចូលបានងាយជាមួយ GitHub Actions, Jenkins ការរួមបញ្ចូលរឹងមាំជាមួយឧបករណ៍ CI ច្រើន
ការធ្វើតេស្តទូរស័ព្ទ មានកំណត់ តែការក្លែងធ្វើប៉ុណ្ណោះ ការគាំទ្រពេញលេញតាមរយៈ Appium
ការគាំទ្រកម្មវិធីរុករកច្រើន Chromium, WebKit, Firefox ការគាំទ្រពេញលេញលើកម្មវិធីរុករកសំខាន់ៗ និងចាស់
ប្រសិទ្ធភាព លឿន ធ្វើឱ្យល្អបំផុតសម្រាប់ការធ្វើតេស្ត headless យឺតជាង ជាពិសេសក្នុងរបៀប headless
ការធ្វើតេស្តអេក្រង់ច្រើន មានកំណត់ ការគាំទ្រល្អសម្រាប់ការដំឡើងអេក្រង់ច្រើន
សហគមន៍ និងប្រព័ន្ធអេកូឡូស៊ី កំពុងលូតលាស់ ឯកសារល្អ ធំ ចាស់ទុំ ប្រព័ន្ធអេកូឡូស៊ីទូលំទូលាយ

7. ការសម្រេចចិត្ត

បន្ទាប់ពីពិចារណាតម្រូវការ និងការដោះដូរ Playwright គឺជាជម្រើសល្អជាងសម្រាប់តម្រូវការបច្ចុប្បន្នរបស់យើង។ API ឆ្លាតជាងរបស់វាសម្រាប់ការធ្វើតេស្តផ្ទុកឡើងឯកសារក្នុងម៉ាស៊ីន វាក្យសម្ព័ន្ធសង្ខេប និងការគាំទ្ររឹងមាំសម្រាប់ការធ្វើតេស្ត UI អន្តរកម្ម ធ្វើឱ្យវាសមស្របល្អឥតខ្ចោះសម្រាប់វដ្តអភិវឌ្ឍ agile របស់យើង។ ការពិតដែលវាគាំទ្រទាំង TypeScript និង Python គឺសំខាន់ចំពោះក្រុមរបស់យើង ហើយវិធីសាស្ត្រទំនើបរបស់ក្របខ័ណ្ឌចំពោះការធ្វើតេស្តនឹងអនុញ្ញាតឱ្យយើងសរសេរកូដស្អាត និងអាចថែទាំបាន។

ទោះបី Selenium នៅតែជាឧបករណ៍ដ៏ល្អ ជាពិសេសសម្រាប់ការធ្វើតេស្តទូរស័ព្ទ ការគាំទ្រកម្មវិធីរុករកចាស់ និងការដំឡើងអេក្រង់ច្រើន វាមិនសូវសមស្របនឹងតម្រូវការបច្ចុប្បន្នរបស់យើងទេ។ ភាពវែងឆ្ងាយ ប្រសិទ្ធភាពយឺតជាង និងការដោះស្រាយ UI ថាមវន្តដូចជាតារាងគំនូសដែលស្មុគស្មាញជាង ធ្វើឱ្យវាមិនល្អបំផុតសម្រាប់ករណីប្រើប្រាស់របស់យើង។

8. ផលវិបាក

  • សកម្មភាពភ្លាមៗ: យើងនឹងទទួលយក Playwright សម្រាប់ការធ្វើតេស្ត E2E របស់យើង ដោយផ្តោតលើការសាកល្បងលំហូរអ្នកប្រើដែលពាក់ព័ន្ធនឹងការចុះឈ្មោះ ការចូល ការផ្ទុកឡើងឯកសារ ផ្ទាំងគ្រប់គ្រង និងការទាញយករបាយការណ៍។
  • ការពិចារណារយៈពេលវែង: យើងនឹងតាមដានប្រព័ន្ធអេកូឡូស៊ី Playwright ដែលកំពុងវិវត្ត។ ប្រសិនបើតម្រូវការរបស់យើងផ្លាស់ប្តូរ ជាពិសេសអំពីការធ្វើតេស្តទូរស័ព្ទ ឬការគាំទ្រកម្មវិធីរុករកចាស់ យើងអាចពិនិត្យ Selenium ឡើងវិញ។
  • ការបណ្តុះបណ្តាល និងឯកសារ: ក្រុមអភិវឌ្ឍន៍នឹងត្រូវស្គាល់ API របស់ Playwright ជាពិសេសសម្រាប់ដោះស្រាយ UI ថាមវន្ត និងការផ្ទុកឡើងឯកសារ។
  • ការផ្លាស់ប្តូរ: តេស្ត Selenium ដែលមានស្រាប់ (ប្រសិនបើមាន) នឹងត្រូវផ្លាស់ប្តូរទៅ Playwright ជាបណ្តើរៗ។

9. ការពិចារណាអនាគត