Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Tên tôi là Dmitry, tôi làm nhân viên thử nghiệm trong công ty Khoa học MEL. Gần đây tôi đã hoàn thành việc xử lý một tính năng tương đối gần đây từ Phòng thí nghiệm kiểm tra Firebase - cụ thể là kiểm thử công cụ các ứng dụng iOS bằng cách sử dụng khung kiểm thử gốc XCUITest.

Trước đó, tôi đã dùng thử Firebase Test Lab cho Android và thực sự thích mọi thứ, vì vậy tôi quyết định thử đặt cơ sở hạ tầng thử nghiệm iOS của dự án vào cùng một nền tảng. Tôi đã phải tra Google rất nhiều và không phải mọi thứ đều diễn ra ngay lần đầu tiên, vì vậy tôi quyết định viết một bài hướng dẫn cho những người vẫn đang gặp khó khăn.

Vì vậy, nếu bạn có các thử nghiệm giao diện người dùng trên một dự án iOS, bạn có thể thử chạy chúng trên các thiết bị thực ngay hôm nay, do Good Corporation cung cấp. Đối với những người quan tâm, chào mừng bạn đến với mèo.

Trong câu chuyện, tôi quyết định xây dựng dựa trên một số dữ liệu ban đầu - một kho lưu trữ riêng trên GitHub và hệ thống xây dựng CircleCI. Tên ứng dụng là AmazingApp, BundleID là com.company.amazingapp. Tôi trình bày dữ liệu này ngay lập tức để giảm bớt sự nhầm lẫn sau này.

Nếu bạn đã triển khai một số giải pháp nhất định trong dự án của mình một cách khác biệt, hãy chia sẻ kinh nghiệm của bạn trong phần nhận xét.

1. Bản thân các bài kiểm tra

Tạo một nhánh dự án mới để kiểm tra giao diện người dùng:

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

Hãy mở dự án trong XCode và tạo Mục tiêu mới với các thử nghiệm giao diện người dùng [XCode -> Tệp -> Mới -> Mục tiêu -> Gói thử nghiệm iOS], đặt cho nó cái tên dễ hiểu là AmazingAppUITests.

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Đi tới phần Giai đoạn xây dựng của Mục tiêu đã tạo và kiểm tra sự hiện diện của Phụ thuộc mục tiêu - AmazingApp, trong Nguồn biên dịch - AmazingAppUITests.swift.

Một cách thực hành tốt là tách các tùy chọn xây dựng khác nhau thành các Lược đồ riêng biệt. Chúng tôi tạo một lược đồ cho các thử nghiệm giao diện người dùng [XCode -> Sản phẩm -> Lược đồ -> Lược đồ mới] và đặt cùng tên: AmazingAppUITests.

Bản dựng lược đồ đã tạo phải bao gồm Mục tiêu của ứng dụng chính - Kiểm tra giao diện người dùng AmazingApp và Target - AmazingAppUITests - xem ảnh chụp màn hình

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Tiếp theo, chúng tôi tạo cấu hình bản dựng mới để kiểm tra giao diện người dùng. Trong XCode, nhấp vào tệp dự án và chuyển đến phần Thông tin. Nhấp vào “+” và tạo cấu hình mới, ví dụ XCtest. Chúng tôi sẽ cần điều này trong tương lai để tránh việc nhảy múa với tambourine khi ký mã.

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Có ít nhất ba Mục tiêu trong dự án của bạn: ứng dụng chính, các bài kiểm tra đơn vị (xét cho cùng, chúng tồn tại, phải không?) và các bài kiểm tra Giao diện người dùng Mục tiêu mà chúng tôi đã tạo.

Chuyển đến Target AmazingApp, tab Cài đặt bản dựng, phần Nhận dạng ký mã. Đối với cấu hình XCtest, chọn Nhà phát triển iOS. Trong phần Kiểu ký mã, chọn Thủ công. Chúng tôi chưa tạo hồ sơ cung cấp, nhưng chúng tôi chắc chắn sẽ quay lại hồ sơ đó sau.

Đối với Target AmazingAppUITests, chúng tôi cũng thực hiện tương tự, nhưng trong cột Mã định danh gói sản phẩm, chúng tôi nhập com.company.amazingappuitests.

2. Thiết lập dự án trong Chương trình nhà phát triển Apple

Đi tới trang Chương trình nhà phát triển Apple, đi tới phần Chứng chỉ, Số nhận dạng & Hồ sơ rồi đến cột ID ứng dụng của mục Số nhận dạng. Tạo ID ứng dụng mới có tên AmazingAppUITests và BundleID com.company.amazingappuests.

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Bây giờ chúng tôi có cơ hội ký các thử nghiệm của mình bằng một chứng chỉ riêng, nhưng... Quy trình lắp ráp bản dựng để thử nghiệm bao gồm việc lắp ráp chính ứng dụng và lắp ráp trình chạy thử nghiệm. Theo đó, chúng tôi phải đối mặt với vấn đề ký hai ID gói với một hồ sơ cung cấp. May mắn thay, có một giải pháp đơn giản và hiệu quả - ID ứng dụng Wildcard. Chúng tôi lặp lại quy trình tạo ID ứng dụng mới, nhưng thay vì ID ứng dụng rõ ràng, hãy chọn ID ứng dụng ký tự đại diện như trong ảnh chụp màn hình.

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Tại thời điểm này, chúng tôi đã hoàn tất làm việc với dev.apple.com nhưng chúng tôi sẽ không thu nhỏ cửa sổ trình duyệt. Chúng ta hãy đi đến Trang web tài liệu Fastlane và đọc về tiện ích Match từ đầu đến cuối.

Một độc giả chú ý nhận thấy rằng để sử dụng tiện ích này, chúng tôi sẽ cần một kho lưu trữ riêng và một tài khoản có quyền truy cập vào cả Chương trình nhà phát triển Apple và Github. Chúng tôi tạo (nếu đột nhiên không có thứ đó) một tài khoản có dạng [email được bảo vệ], tạo một mật khẩu mạnh, đăng ký nó với dev.apple.com và chỉ định nó làm quản trị viên dự án. Tiếp theo, chúng tôi cấp cho tài khoản quyền truy cập vào kho lưu trữ github của công ty bạn và tạo một kho lưu trữ riêng mới có tên như AmazingAppMatch.

3. Thiết lập Fastlane và tiện ích kết hợp

Mở một thiết bị đầu cuối, đi đến thư mục chứa dự án và khởi tạo fastlane như được chỉ ra trong hướng dẫn chính thức. Sau khi vào lệnh

$ fastlane init

Bạn sẽ được nhắc chọn cấu hình sử dụng có sẵn. Chọn tùy chọn thứ tư - thiết lập dự án thủ công.

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Dự án có một thư mục fastlane mới, chứa hai tệp - Appfile và Fastfile. Tóm lại, chúng tôi lưu trữ dữ liệu dịch vụ trong Appfile và viết công việc trong Fastfile, được gọi là làn đường trong thuật ngữ Fastlane. Tôi khuyên bạn nên đọc tài liệu chính thức: thời gian, два.

Mở Appfile trong trình soạn thảo văn bản yêu thích của bạn và đưa nó về dạng sau:

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

Chúng tôi quay trở lại thiết bị đầu cuối và theo hướng dẫn chính thức, chúng tôi bắt đầu định cấu hình khớp.

$ fastlane match init
$ fastlane match development

Tiếp theo, nhập dữ liệu được yêu cầu - kho lưu trữ, tài khoản, mật khẩu, v.v.

Quan trọng: Khi khởi chạy tiện ích match lần đầu tiên, bạn sẽ được yêu cầu nhập mật khẩu để giải mã kho lưu trữ. Việc lưu mật khẩu này là rất quan trọng, chúng ta sẽ cần nó khi thiết lập máy chủ CI!

Một tệp mới đã xuất hiện trong thư mục fastlane - Matchfile. Mở nó trong trình soạn thảo văn bản yêu thích của bạn và hiển thị nó như thế này:

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

Chúng tôi điền chính xác theo cách này nếu chúng tôi muốn sử dụng đối sánh trong tương lai để ký các bản dựng để hiển thị trong Crashlytics và/hoặc AppStore, tức là ký ID gói cho ứng dụng của bạn.

Tuy nhiên, như chúng tôi nhớ, chúng tôi đã tạo một ID Wildcard đặc biệt để ký bản dựng thử nghiệm. Do đó, hãy mở Fastfile và vào làn đường mới:

lane :testing_build_for_firebase do

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

end

Lưu và nhập vào terminal

fastlane testing_build_for_firebase

và chúng tôi thấy cách fastlane tạo chứng chỉ mới và đưa nó vào kho lưu trữ. Tuyệt vời!

Mở XCode. Bây giờ chúng ta đã có hồ sơ cung cấp cần thiết có dạng Match Development com.company.*. Hồ sơ này phải được chỉ định trong phần Hồ sơ cung cấp cho mục tiêu AmazingApp và AmazingAppUITests.

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Vẫn còn phải thêm làn đường để lắp ráp các bài kiểm tra. Chúng ta hãy đi đến kho một dự án plugin dành cho fastlane giúp thiết lập xuất sang Phòng thí nghiệm kiểm tra Firebase dễ dàng hơn và làm theo hướng dẫn.

Hãy sao chép và dán từ ví dụ ban đầu để làn đường testing_build_for_firebase của chúng ta trông như thế này:


 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

Để biết thông tin đầy đủ về cách thiết lập fastlane trong CircleCI, tôi khuyên bạn nên đọc tài liệu chính thức lần, два.

Đừng quên thêm một tác vụ mới vào config.yml của chúng tôi:

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. Còn băng ghế thử nghiệm của chúng tôi thì sao? Đang thiết lập căn cứ hỏa lực.

Chúng ta hãy đi sâu vào mục đích của bài báo.

Có thể ứng dụng của bạn sử dụng Firebase theo gói miễn phí hoặc có thể không sử dụng. Hoàn toàn không có sự khác biệt cơ bản nào, vì đối với nhu cầu thử nghiệm, chúng tôi có thể tạo một dự án riêng với một năm sử dụng miễn phí (thú vị, phải không?)

Chúng tôi đăng nhập vào tài khoản cơ sở hạ tầng của mình (hoặc bất kỳ tài khoản nào khác, không thành vấn đề) và truy cập Trang bảng điều khiển Firebase. Tạo một dự án mới có tên AmazingAppUITests.

Quan trọng: Ở bước trước trong Fastfile ở làn firebase_test_lab_ios_xctest, tham số gcp_project phải khớp với tên dự án.

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Các cài đặt mặc định phù hợp với chúng tôi khá tốt.

Không đóng tab, đăng ký cùng một tài khoản trong gcloud - đây là biện pháp cần thiết vì giao tiếp với Firebase diễn ra bằng giao diện bảng điều khiển gcloud.

Google sẽ tặng 300 đô la trong một năm, trong bối cảnh thực hiện kiểm tra tự động tương đương với một năm sử dụng dịch vụ miễn phí. Chúng tôi nhập thông tin thanh toán của bạn, đợi khoản ghi nợ thử nghiệm là 1 đô la và nhận 300 đô la vào tài khoản của bạn. Sau một năm, dự án sẽ tự động được chuyển sang gói miễn phí thuế quan nên không cần lo lắng về khả năng mất tiền.

Hãy quay lại tab có dự án Firebase và chuyển nó sang gói thuế Blaze - bây giờ chúng tôi phải trả một số tiền nếu vượt quá giới hạn.

Trong giao diện gcloud, chọn dự án Firebase của chúng tôi, chọn mục menu chính “Thư mục” và thêm API kiểm tra đám mây và API kết quả công cụ đám mây.

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Sau đó vào mục menu “IAM và quản trị” -> Tài khoản dịch vụ -> Tạo tài khoản dịch vụ. Chúng tôi cấp quyền chỉnh sửa dự án.

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Tạo khóa API ở định dạng JSON

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS

Chúng tôi sẽ cần JSON đã tải xuống sau đó một chút, nhưng bây giờ chúng tôi sẽ coi như quá trình thiết lập Test Lab đã hoàn tất.

5. Thiết lập CircleCI

Một câu hỏi hợp lý được đặt ra - phải làm gì với mật khẩu? Cơ chế biến môi trường của máy xây dựng sẽ giúp chúng tôi lưu trữ mật khẩu và dữ liệu nhạy cảm khác một cách an toàn. Trong cài đặt dự án CircleCI, chọn Biến môi trường

Chúng tôi chạy thử nghiệm công cụ trong Phòng thí nghiệm kiểm tra Firebase. Phần 1: Dự án iOS
Và thiết lập các biến sau:

  • khóa: GOOGLE_APPLICATION_CREDENTIALS
    giá trị: nội dung của tệp json của khóa tài khoản dịch vụ gcloud
  • khóa: MATCH_PASSWORD
    giá trị: mật khẩu để giải mã kho lưu trữ github bằng chứng chỉ
  • khóa: FASTLANE_PASSWORD
    giá trị: Mật khẩu tài khoản cơ sở hạ tầng Cổng thông tin dành cho nhà phát triển của Apple

Chúng tôi lưu các thay đổi, tạo PR và gửi cho trưởng nhóm của chúng tôi để xem xét.

Kết quả

Kết quả của những thao tác đơn giản này là chúng tôi đã có được một chiếc giá đỡ làm việc tốt, ổn định với khả năng quay video trên màn hình thiết bị tại thời điểm thử nghiệm. Trong ví dụ thử nghiệm, tôi đã chỉ định kiểu thiết bị iPhone X, nhưng trang trại cung cấp nhiều lựa chọn phong phú từ sự kết hợp của nhiều kiểu máy và phiên bản iOS khác nhau.

Phần thứ hai sẽ dành cho việc thiết lập từng bước Phòng thí nghiệm kiểm tra Firebase cho một dự án Android.

Nguồn: www.habr.com

Thêm một lời nhận xét