Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Το όνομά μου είναι Ντμίτρι, εργάζομαι ως δοκιμαστής στην εταιρεία MEL Επιστήμη. Πολύ πρόσφατα τελείωσα να ασχολούμαι με ένα σχετικά πρόσφατο χαρακτηριστικό από Εργαστήριο δοκιμών Firebase — συγκεκριμένα, με οργανική δοκιμή εφαρμογών iOS χρησιμοποιώντας το εγγενές πλαίσιο δοκιμών XCUITest.

Πριν από αυτό, είχα ήδη δοκιμάσει το Firebase Test Lab για Android και μου άρεσαν πολύ τα πάντα, οπότε αποφάσισα να προσπαθήσω να βάλω την υποδομή δοκιμής iOS του έργου στην ίδια βάση. Χρειάστηκε να κάνω πολύ Google και δεν λειτούργησαν όλα την πρώτη φορά, οπότε αποφάσισα να γράψω ένα εκπαιδευτικό άρθρο για όσους ακόμα δυσκολεύονται.

Επομένως, εάν έχετε δοκιμές διεπαφής χρήστη σε ένα έργο iOS, μπορείτε ήδη να δοκιμάσετε να τις εκτελέσετε σε πραγματικές συσκευές σήμερα, που παρέχονται ευγενικά από την Good Corporation. Για όσους ενδιαφέρονται, καλώς ήρθατε στο cat.

Στην ιστορία, αποφάσισα να βασιστώ σε κάποια αρχικά δεδομένα - ένα ιδιωτικό αποθετήριο στο GitHub και το σύστημα δημιουργίας CircleCI. Το όνομα της εφαρμογής είναι AmazingApp, το bundleID είναι com.company.amazingapp. Παρουσιάζω αμέσως αυτά τα δεδομένα για να μειώσω την επακόλουθη σύγχυση.

Εάν εφαρμόσατε διαφορετικές λύσεις στο έργο σας, μοιραστείτε την εμπειρία σας στα σχόλια.

1. Οι ίδιες οι δοκιμές

Δημιουργήστε έναν νέο κλάδο έργου για δοκιμές διεπαφής χρήστη:

$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”

Ας ανοίξουμε το έργο στο XCode και ας δημιουργήσουμε ένα νέο Target με δοκιμές διεπαφής χρήστη [XCode -> File -> New -> Target -> iOS Testing Bundle], δίνοντάς του το αυτονόητο όνομα AmazingAppUITests.

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Μεταβείτε στην ενότητα Build Phases του δημιουργημένου Target και ελέγξτε για την παρουσία Target Dependencies - AmazingApp, στο Compile Sources - AmazingAppUITests.swift.

Μια καλή πρακτική είναι να διαχωρίζετε διαφορετικές επιλογές κατασκευής σε ξεχωριστά σχήματα. Δημιουργούμε ένα σχήμα για τις δοκιμές διεπαφής χρήστη [XCode -> Product -> Scheme -> New Scheme] και του δίνουμε το ίδιο όνομα: AmazingAppUITests.

Η κατασκευή του δημιουργημένου σχήματος πρέπει να περιλαμβάνει τον στόχο της κύριας εφαρμογής - AmazingApp και δοκιμές διεπαφής χρήστη Target - AmazingAppUITests - δείτε στιγμιότυπο οθόνης

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Στη συνέχεια, δημιουργούμε μια νέα διαμόρφωση build για δοκιμές διεπαφής χρήστη. Στο XCode, κάντε κλικ στο αρχείο του έργου και μεταβείτε στην ενότητα Πληροφορίες. Κάντε κλικ στο "+" και δημιουργήστε μια νέα διαμόρφωση, για παράδειγμα XCtest. Θα το χρειαστούμε στο μέλλον για να αποφύγουμε να χορεύουμε με ντέφι όταν πρόκειται για υπογραφή κώδικα.

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Υπάρχουν τουλάχιστον τρεις στόχοι στο έργο σας: η κύρια εφαρμογή, οι δοκιμές μονάδων (τελικά υπάρχουν, σωστά;) και οι δοκιμές Target UI που δημιουργήσαμε.

Μεταβείτε στο Target AmazingApp, στην καρτέλα Build Settings, στην ενότητα Code Signing Identity. Για τη διαμόρφωση XCtest, επιλέξτε iOS Developer. Στην ενότητα Στυλ υπογραφής κώδικα, επιλέξτε Μη αυτόματη. Δεν έχουμε δημιουργήσει ακόμα προφίλ παροχής, αλλά σίγουρα θα επιστρέψουμε σε αυτό λίγο αργότερα.

Για το Target AmazingAppUITests κάνουμε το ίδιο, αλλά στη στήλη Product Bundle Identifier εισάγουμε com.company.amazingappuitests.

2. Ρύθμιση έργου στο Πρόγραμμα προγραμματιστών της Apple

Μεταβείτε στη σελίδα Πρόγραμμα προγραμματιστών Apple, μεταβείτε στην ενότητα Πιστοποιητικά, Αναγνωριστικά & Προφίλ και, στη συνέχεια, στη στήλη Αναγνωριστικά εφαρμογών του στοιχείου Αναγνωριστικά. Δημιουργήστε ένα νέο αναγνωριστικό εφαρμογής που ονομάζεται AmazingAppUITests και bundleID com.company.amazingappuitests.

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Τώρα έχουμε την ευκαιρία να υπογράψουμε τις δοκιμές μας με ξεχωριστό πιστοποιητικό, αλλά... Η διαδικασία για τη συναρμολόγηση μιας κατασκευής για δοκιμή περιλαμβάνει τη συναρμολόγηση της ίδιας της εφαρμογής και τη συναρμολόγηση του δοκιμαστικού δρομέα. Κατά συνέπεια, αντιμετωπίζουμε το πρόβλημα της υπογραφής δύο αναγνωριστικών δέσμης με ένα προφίλ παροχής. Ευτυχώς, υπάρχει μια απλή και κομψή λύση - Wildcard App ID. Επαναλαμβάνουμε τη διαδικασία για τη δημιουργία ενός νέου αναγνωριστικού εφαρμογής, αλλά αντί για Ρητό αναγνωριστικό εφαρμογής, επιλέγουμε το αναγνωριστικό εφαρμογής μπαλαντέρ όπως στο στιγμιότυπο οθόνης.

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Σε αυτό το σημείο, τελειώσαμε τη συνεργασία με το developer.apple.com, αλλά δεν θα ελαχιστοποιήσουμε το παράθυρο του προγράμματος περιήγησης. Ας πάμε στο Ιστοσελίδα τεκμηρίωσης Fastlane και διαβάστε για το βοηθητικό πρόγραμμα Match από εξώφυλλο σε εξώφυλλο.

Ένας προσεκτικός αναγνώστης παρατήρησε ότι για να χρησιμοποιήσουμε αυτό το βοηθητικό πρόγραμμα θα χρειαστούμε ένα ιδιωτικό αποθετήριο και έναν λογαριασμό με πρόσβαση τόσο στο Πρόγραμμα προγραμματιστών της Apple όσο και στο Github. Δημιουργούμε (αν ξαφνικά δεν υπάρχει κάτι τέτοιο) έναν λογαριασμό της φόρμας [προστασία μέσω email], βρείτε έναν ισχυρό κωδικό πρόσβασης, καταχωρίστε τον στο developer.apple.com και ορίστε τον ως διαχειριστή έργου. Στη συνέχεια, δίνουμε στον λογαριασμό πρόσβαση στο αποθετήριο github της εταιρείας σας και δημιουργούμε ένα νέο ιδιωτικό αποθετήριο με όνομα όπως το AmazingAppMatch.

3. Ρύθμιση του Fastlane και του βοηθητικού προγράμματος match

Ανοίξτε ένα τερματικό, μεταβείτε στο φάκελο με το έργο και αρχικοποιήστε το fastlane όπως υποδεικνύεται στο επίσημο εγχειρίδιο. Αφού εισαγάγετε την εντολή

$ fastlane init

Θα σας ζητηθεί να επιλέξετε τις διαθέσιμες διαμορφώσεις χρήσης. Επιλέξτε την τέταρτη επιλογή - μη αυτόματη ρύθμιση έργου.

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Το έργο έχει έναν νέο κατάλογο fastlane, ο οποίος περιέχει δύο αρχεία - Appfile και Fastfile. Με λίγα λόγια, αποθηκεύουμε δεδομένα υπηρεσίας στο Appfile και γράφουμε εργασίες στο Fastfile, που ονομάζονται λωρίδες στην ορολογία Fastlane. Συνιστώ να διαβάσετε την επίσημη τεκμηρίωση: ώρα, два.

Ανοίξτε το Appfile στο αγαπημένο σας πρόγραμμα επεξεργασίας κειμένου και φέρτε το στην παρακάτω φόρμα:

app_identifier "com.company.amazingapp"       # Bundle ID
apple_dev_portal_id "[email protected]"  # Созданный инфраструктурный аккаунт, имеющий право на редактирование iOS проекта в Apple Developer Program.
team_id "LSDY3IFJAY9" # Your Developer Portal Team ID

Επιστρέφουμε στο τερματικό και σύμφωνα με το επίσημο εγχειρίδιο αρχίζουμε να διαμορφώνουμε το match.

$ fastlane match init
$ fastlane match development

Στη συνέχεια, εισαγάγετε τα ζητούμενα δεδομένα - αποθήκη, λογαριασμό, κωδικό πρόσβασης κ.λπ.

Σημαντικό: Όταν εκκινήσετε για πρώτη φορά το βοηθητικό πρόγραμμα αντιστοίχισης, θα σας ζητηθεί να εισαγάγετε έναν κωδικό πρόσβασης για την αποκρυπτογράφηση του αποθετηρίου. Είναι πολύ σημαντικό να αποθηκεύσετε αυτόν τον κωδικό πρόσβασης· θα τον χρειαστούμε κατά τη ρύθμιση του διακομιστή CI!

Ένα νέο αρχείο εμφανίστηκε στο φάκελο fastlane - Matchfile. Ανοίξτε το στο αγαπημένο σας πρόγραμμα επεξεργασίας κειμένου και εμφανίστε το ως εξής:

git_url("https://github.com/YourCompany/AmazingAppMatch") #Созданный приватный репозиторий для хранения сертификатов и профайлов.
type("development") # The default type, can be: appstore, adhoc, enterprise or development
app_identifier("com.company.amazingapp")
username("[email protected]") # Your Infrastructure account Apple Developer Portal username

Το συμπληρώνουμε ακριβώς με αυτόν τον τρόπο, αν θέλουμε να χρησιμοποιήσουμε το match στο μέλλον για να υπογράψουμε εκδόσεις για εμφάνιση στο Crashlytics ή/και στο AppStore, δηλαδή για να υπογράψουμε το αναγνωριστικό πακέτου της εφαρμογής σας.

Όμως, όπως θυμόμαστε, δημιουργήσαμε ένα ειδικό αναγνωριστικό Wildcard για να υπογράψουμε τη δοκιμαστική έκδοση. Επομένως, ανοίξτε το Fastfile και εισαγάγετε μια νέα λωρίδα:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
    )

end

Αποθηκεύστε και μπείτε στο τερματικό

fastlane testing_build_for_firebase

και βλέπουμε πώς η fastlane δημιούργησε ένα νέο πιστοποιητικό και το έβαλε στο αποθετήριο. Εξαιρετική!

Ανοίξτε το XCode. Τώρα έχουμε το απαραίτητο προφίλ παροχής της φόρμας Match Development com.company.*, το οποίο πρέπει να καθοριστεί στην ενότητα Προφίλ παροχής για τους στόχους AmazingApp και AmazingAppUITests.

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Απομένει να προσθέσουμε λωρίδα για δοκιμές συναρμολόγησης. Ας πάμε στο αποθήκη ένα έργο προσθήκης για το fastlane που διευκολύνει τη ρύθμιση της εξαγωγής στο Firebase Test Lab και την ακολουθία των οδηγιών.

Ας κάνουμε αντιγραφή-επικόλληση από το αρχικό παράδειγμα, έτσι ώστε το lane testing_build_for_firebase να έχει ως εξής:


 lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"
    )

    scan(
      scheme: 'AmazingAppUITests',      # UI Test scheme
      clean: true,                        # Recommended: This would ensure the build would not include unnecessary files
      skip_detect_devices: true,          # Required
      build_for_testing: true,            # Required
      sdk: 'iphoneos',                    # Required
      should_zip_build_products: true,     # Must be true to set the correct format for Firebase Test Lab
    )

    firebase_test_lab_ios_xctest(
      gcp_project: 'AmazingAppUITests', # Your Google Cloud project name (к этой строчке вернемся позже)
      devices: [                          # Device(s) to run tests on
        {
          ios_model_id: 'iphonex',        # Device model ID, see gcloud command above
          ios_version_id: '12.0',         # iOS version ID, see gcloud command above
          locale: 'en_US',                # Optional: default to en_US if not set
          orientation: 'portrait'         # Optional: default to portrait if not set
        }
      ]
    )

  end

Για πλήρεις πληροφορίες σχετικά με τη ρύθμιση του fastlane στο CircleCI, προτείνω να διαβάσετε την επίσημη τεκμηρίωση φορές, два.

Μην ξεχάσετε να προσθέσετε μια νέα εργασία στο config.yml μας:

build-for-firebase-test-lab:
   macos:
     xcode: "10.1.0"   
   working_directory: ~/project
   shell: /bin/bash --login -o pipefail
   steps:
     - checkout
     - attach_workspace:
         at: ~/project
     - run: sudo bundle install     # обновляем зависимости
     - run:
         name: install gcloud-sdk   # на mac машину необходимо установить gcloud
         command: |
           ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null
           brew cask install google-cloud-sdk
     - run:
         name: build app for testing
         command: fastlane testing_build_for_firebase  # запускаем lane сборки и отправки в firebase

4. Τι γίνεται με τον πάγκο δοκιμών μας; Ρύθμιση του Firebase.

Ας πάμε στο γιατί γράφτηκε το άρθρο.

Ίσως η εφαρμογή σας χρησιμοποιεί το Firebase σε δωρεάν πρόγραμμα ή ίσως καθόλου. Δεν υπάρχει καμία απολύτως θεμελιώδης διαφορά, γιατί για τις ανάγκες δοκιμών μπορούμε να δημιουργήσουμε ένα ξεχωριστό έργο με ένα χρόνο δωρεάν χρήσης (cool, σωστά;)

Συνδεόμαστε στον λογαριασμό υποδομής μας (ή οποιονδήποτε άλλο, δεν έχει σημασία) και μεταβούμε στο Σελίδα κονσόλας Firebase. Δημιουργήστε ένα νέο έργο με το όνομα AmazingAppUITests.

Σημαντικό: Στο προηγούμενο βήμα στη δοκιμή Fastfile in lane firebase_test_lab_ios_xc, η παράμετρος gcp_project πρέπει να ταιριάζει με το όνομα του έργου.

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Οι προεπιλεγμένες ρυθμίσεις μας ταιριάζουν αρκετά.

Μην κλείσετε την καρτέλα, εγγραφείτε στον ίδιο λογαριασμό Γελοία - αυτό είναι ένα απαραίτητο μέτρο, καθώς η επικοινωνία με το Firebase πραγματοποιείται χρησιμοποιώντας τη διεπαφή της κονσόλας gcloud.

Η Google δίνει 300 δολάρια για ένα χρόνο, τα οποία στο πλαίσιο της διενέργειας αυτόματων δοκιμών ισοδυναμούν με ένα χρόνο δωρεάν χρήσης της υπηρεσίας. Εισάγουμε τα στοιχεία πληρωμής σας, περιμένουμε τη δοκιμαστική χρέωση 1 $ και λαμβάνουμε 300 $ στο λογαριασμό σας. Μετά από ένα χρόνο, το έργο θα μεταφερθεί αυτόματα σε ένα δωρεάν πρόγραμμα χρέωσης, επομένως δεν υπάρχει λόγος ανησυχίας για πιθανή απώλεια χρημάτων.

Ας επιστρέψουμε στην καρτέλα με το έργο Firebase και ας το μεταφέρουμε στο πρόγραμμα χρέωσης Blaze - τώρα έχουμε κάτι να πληρώσουμε εάν ξεπεραστεί το όριο.

Στη διεπαφή του gcloud, επιλέξτε το έργο Firebase, επιλέξτε το στοιχείο του κύριου μενού "Κατάλογος" και προσθέστε το Cloud Testing API και το Cloud Tools Result API.

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Στη συνέχεια, μεταβείτε στο στοιχείο μενού "IAM και διαχείριση" -> Λογαριασμοί υπηρεσίας -> Δημιουργία λογαριασμού υπηρεσίας. Παραχωρούμε δικαιώματα για την επεξεργασία του έργου.

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Δημιουργήστε ένα κλειδί API σε μορφή JSON

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS

Θα χρειαστούμε το ληφθέν JSON λίγο αργότερα, αλλά προς το παρόν θα θεωρήσουμε ότι η εγκατάσταση του Test Lab έχει ολοκληρωθεί.

5. Ρύθμιση του CircleCI

Τίθεται ένα εύλογο ερώτημα - τι να κάνετε με τους κωδικούς πρόσβασης; Ο μηχανισμός μεταβλητής περιβάλλοντος της μηχανής κατασκευής μας θα μας βοηθήσει να αποθηκεύσουμε με ασφάλεια τους κωδικούς πρόσβασης και άλλα ευαίσθητα δεδομένα. Στις ρυθμίσεις έργου CircleCI, επιλέξτε Environment Variables

Εκτελούμε δοκιμές οργάνων στο Firebase Test Lab. Μέρος 1: Έργο iOS
Και ρυθμίστε τις ακόλουθες μεταβλητές:

  • κλειδί: GOOGLE_APPLICATION_CREDENTIALS
    τιμή: περιεχόμενα του αρχείου json του κλειδιού λογαριασμού υπηρεσίας gcloud
  • κλειδί: MATCH_PASSWORD
    τιμή: κωδικός πρόσβασης για την αποκρυπτογράφηση του αποθετηρίου github με πιστοποιητικά
  • κλειδί: FASTLANE_PASSWORD
    τιμή: Κωδικός πρόσβασης λογαριασμού υποδομής πύλης προγραμματιστών Apple

Αποθηκεύουμε τις αλλαγές, δημιουργούμε ένα PR και το στέλνουμε στον επικεφαλής της ομάδας μας για έλεγχο.

Αποτελέσματα της

Ως αποτέλεσμα αυτών των απλών χειρισμών, λάβαμε μια καλή, σταθερή βάση εργασίας με δυνατότητα εγγραφής βίντεο στην οθόνη της συσκευής τη στιγμή της δοκιμής. Στο παράδειγμα δοκιμής, καθόρισα το μοντέλο της συσκευής iPhone X, αλλά η φάρμα παρέχει μια πλούσια επιλογή από έναν συνδυασμό διαφορετικών μοντέλων και εκδόσεων iOS.

Το δεύτερο μέρος θα είναι αφιερωμένο στη βήμα προς βήμα ρύθμιση του Firebase Test Lab για ένα έργο Android.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο