Architecture Decision Record

Active theme: Light

← Παραδείγματα καταγραφής αποφάσεων

Καταγραφή αρχιτεκτονικής απόφασης: πλαίσιο αυτοματοποίησης προγράμματος περιήγησης για δοκιμές E2E (Playwright έναντι Selenium)

1. Πλαίσιο

Βρισκόμαστε στη διαδικασία επιλογής ενός πλαισίου αυτοματοποίησης προγράμματος περιήγησης για τη ροή δοκιμών end-to-end (E2E). Αυτό το πλαίσιο θα είναι αναπόσπαστο μέρος των διαδικασιών CI/CD μας, εκτελώντας δοκιμές που προσομοιώνουν πραγματικές αλληλεπιδράσεις χρηστών στην πλατφόρμα μας. Συγκεκριμένα, οι δοκιμές θα καλύπτουν σενάρια όπως εγγραφή/σύνδεση χρήστη, μεταφορτώσεις αρχείων, αλληλεπιδράσεις με πίνακες ελέγχου και λήψη αναφορών.

Ως startup, εστιάζουμε στην ευέλικτη ανάπτυξη, με ανάγκη για γρήγορη επανάληψη και εξέλιξη. Η ομάδα μας εργάζεται κυρίως με TypeScript και Python και η δυνατότητα γραφής δοκιμών σε αυτές τις γλώσσες είναι απαραίτητη. Επιπλέον, η πλατφόρμα περιέχει διαδραστικά γραφήματα και πίνακες ελέγχου, γεγονός που καθιστά κρίσιμο το εργαλείο αυτοματοποίησης να υποστηρίζει καλά πλούσιες, δυναμικές διεπαφές χρήστη.

Οι δύο υποψήφιοι για αυτή την εργασία είναι το Playwright και το Selenium, καθένας με τα δυνατά του σημεία και τους συμβιβασμούς του. Πρέπει να αξιολογήσουμε αυτά τα πλαίσια βάσει των χαρακτηριστικών και των απαιτήσεων που περιγράφονται παρακάτω.

2. Επιλογές που εξετάστηκαν

  • Playwright (της Microsoft)
  • Selenium (του έργου Selenium)

3. Παράγοντες απόφασης

Οι παράγοντες που επηρεάζουν την απόφασή μας είναι οι εξής:

  1. Ευέλικτη ανάπτυξη: Το επιλεγμένο εργαλείο πρέπει να επιτρέπει γρήγορους, ευέλικτους κύκλους ανάπτυξης.
  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 έχει συντομότερη, πιο περιεκτική σύνταξη. Αυτό έχει ως αποτέλεσμα λιγότερο επαναλαμβανόμενο κώδικα, βελτιώνοντας τη συντηρησιμότητα και την αποδοτικότητα των προγραμματιστών. Επιπλέον, αυτή η συντομότερη σύνταξη βελτιώνει την ποιότητα του κώδικα που παράγει το 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 και υπηρεσίες cloud για κατανεμημένες δοκιμές.
  3. Δοκιμές κινητών: Το Selenium, μέσω της ενσωμάτωσης με το Appium, είναι πολύ πιο ισχυρό για δοκιμές κινητών, συμπεριλαμβανομένων εφαρμογών Android και iOS. Αυτό το καθιστά την καλύτερη επιλογή για έργα με έμφαση στα κινητά.
  4. Δοκιμές πολλών οθονών: Το Selenium παρέχει καλύτερη υποστήριξη για σενάρια με πολλές οθόνες ή σύνθετες αλληλεπιδράσεις πολλών παραθύρων.
Κατά:
  1. Πολυπλοκότητα: Το API του Selenium είναι πιο φλύαρο και ρητό. Παρότι σε ορισμένες περιπτώσεις μπορεί να είναι πλεονέκτημα, σημαίνει περισσότερο κώδικα προς γραφή και συντήρηση, κάτι που μπορεί να μειώσει την ευελιξία των προγραμματιστών — ιδιαίτερα σημαντική σε περιβάλλον startup.
  2. Απόδοση: Το Selenium εκτελείται γενικά πιο αργά από το Playwright, ειδικά σε λειτουργία headless. Αυτό θα μπορούσε να επηρεάσει τις ροές CI/CD, ιδίως καθώς αυξάνεται ο αριθμός των δοκιμών.
  3. Δοκιμές διαδραστικού UI: Το Selenium δεν είναι τόσο ομαλό όσο το Playwright στη δοκιμή σύγχρονων, διαδραστικών UI ιστού, ιδίως με γραφήματα και ενημερώσεις δεδομένων σε πραγματικό χρόνο. Απαιτεί περισσότερη ρύθμιση και χειρισμό για αξιόπιστη αλληλεπίδραση με δυναμικό περιεχόμενο.

6. Περίληψη σύγκρισης

Χαρακτηριστικό Playwright Selenium
Ευκολία χρήσης Συντομότερη σύνταξη, πιο διαισθητικό για σύγχρονα UI Πιο ρητό, απαιτεί περισσότερο επαναλαμβανόμενο κώδικα
Υποστήριξη γλωσσών 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 το καθιστούν ιδανικό για τον ευέλικτο κύκλο ανάπτυξής μας. Το γεγονός ότι υποστηρίζει τόσο TypeScript όσο και Python είναι κρίσιμο για την ομάδα μας και η σύγχρονη προσέγγιση του πλαισίου στις δοκιμές θα μας επιτρέψει να γράφουμε καθαρό, συντηρήσιμο κώδικα.

Παρότι το Selenium παραμένει εξαιρετικό εργαλείο, ιδίως για δοκιμές κινητών, υποστήριξη παλαιών προγραμμάτων περιήγησης και ρυθμίσεις πολλών οθονών, ταιριάζει λιγότερο στις τρέχουσες ανάγκες μας. Η φλυαρία του, η πιο αργή απόδοση και ο πιο σύνθετος χειρισμός δυναμικών UI όπως τα γραφήματα το καθιστούν λιγότερο βέλτιστο για την περίπτωσή μας.

8. Συνέπειες

  • Άμεση ενέργεια: Θα υιοθετήσουμε το Playwright για τις δοκιμές E2E μας, εστιάζοντας στη δοκιμή ροών χρήστη που περιλαμβάνουν εγγραφή, σύνδεση, μεταφορτώσεις αρχείων, πίνακες ελέγχου και λήψη αναφορών.
  • Μακροπρόθεσμες σκέψεις: Θα παρακολουθούμε το εξελισσόμενο οικοσύστημα του Playwright. Αν οι ανάγκες μας αλλάξουν, ιδίως όσον αφορά τις δοκιμές κινητών ή την υποστήριξη παλαιών προγραμμάτων περιήγησης, ενδέχεται να επανεξετάσουμε το Selenium.
  • Εκπαίδευση και τεκμηρίωση: Οι ομάδες ανάπτυξης θα πρέπει να εξοικειωθούν με το API του Playwright, ιδίως για τον χειρισμό δυναμικών UI και μεταφορτώσεων αρχείων.
  • Μετάβαση: Οι υπάρχουσες δοκιμές Selenium (αν υπάρχουν) θα μεταφερθούν σταδιακά στο Playwright.

9. Μελλοντικές σκέψεις