เรียกใช้การทดสอบด้วยเครื่องมือใน Firebase Test Lab ส่วนที่ 1: โครงการ iOS

เรียกใช้การทดสอบด้วยเครื่องมือใน Firebase Test Lab ส่วนที่ 1: โครงการ iOS

ฉันชื่อมิทรี ฉันทำงานเป็นผู้ทดสอบในบริษัทแห่งหนึ่ง วิทยาศาสตร์ MEL. ล่าสุดฉันได้จัดการกับฟีเจอร์ที่ค่อนข้างใหม่เสร็จแล้ว ห้องปฏิบัติการทดสอบฐานไฟ - กล่าวคือ ด้วยการทดสอบเครื่องมือของแอปพลิเคชัน iOS โดยใช้เฟรมเวิร์กการทดสอบดั้งเดิม XCUITest

ก่อนหน้านั้น ฉันลองใช้ Firebase Test Lab สำหรับ Android แล้ว และฉันชอบทุกอย่างมาก ดังนั้นฉันจึงตัดสินใจลองวางโครงสร้างพื้นฐานการทดสอบ iOS ของโปรเจ็กต์ไว้บนรางเดียวกัน ฉันต้องใช้ Google มากมายและไม่ใช่ว่าทุกอย่างจะได้ผลในครั้งแรก ดังนั้นฉันจึงตัดสินใจเขียนบทความแนะนำสำหรับผู้ที่ยังต้องทำอยู่

ดังนั้น หากคุณมีการทดสอบ UI บนโปรเจ็กต์ iOS คุณสามารถลองรันการทดสอบบนอุปกรณ์จริงได้แล้ววันนี้ โดยได้รับความกรุณาจาก Good Corporation สนใจ-ยินดีต้อนรับภายใต้แมว.

ในเรื่องราวนี้ ฉันตัดสินใจสร้างจากแหล่งข้อมูลบางส่วน ซึ่งเป็นพื้นที่เก็บข้อมูลส่วนตัวบน GitHub และระบบการสร้าง CircleCI ชื่อแอปพลิเคชันคือ AmazingApp, BundleID คือ com.company.amazingapp ฉันอ้างอิงข้อมูลเหล่านี้ทันทีเพื่อลดความสับสนในภายหลัง

หากคุณใช้โซลูชันบางอย่างในโครงการของคุณแตกต่างออกไป แบ่งปันประสบการณ์ของคุณในความคิดเห็น

1. การทดสอบด้วยตนเอง

สร้างสาขาโครงการใหม่สำหรับการทดสอบ UI:

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

มาเปิดโปรเจ็กต์ใน XCode และสร้างเป้าหมายใหม่ด้วยการทดสอบ UI [XCode -> ไฟล์ -> ใหม่ -> เป้าหมาย -> ชุดการทดสอบ iOS] ตั้งชื่อให้ AmazingAppUITests

เรียกใช้การทดสอบด้วยเครื่องมือใน Firebase Test Lab ส่วนที่ 1: โครงการ iOS

ไปที่ส่วน Build Phases ของ Target ที่สร้างขึ้น และตรวจสอบ Target Dependencies - AmazingApp ใน Compile Sources - AmazingAppUITests.swift

แนวทางปฏิบัติที่ดีในการแยกตัวเลือกบิลด์ต่างๆ ออกเป็นโครงร่างที่แยกจากกัน เราสร้างโครงร่างสำหรับการทดสอบ UI ของเรา [XCode -> Product -> Scheme -> New Scheme] และตั้งชื่อเดียวกันว่า AmazingAppUITests

โครงสร้างโครงร่างที่สร้างขึ้นควรรวมเป้าหมายของแอปพลิเคชันหลัก - การทดสอบ AmazingApp และ Target UI - AmazingAppUITests - ดูภาพหน้าจอ

เรียกใช้การทดสอบด้วยเครื่องมือใน Firebase Test Lab ส่วนที่ 1: โครงการ iOS

ต่อไป เราจะสร้างการกำหนดค่าบิลด์ใหม่สำหรับการทดสอบ UI ใน Xcode คลิกที่ไฟล์โครงการ ไปที่ส่วนข้อมูล คลิกที่ “+” และสร้างการกำหนดค่าใหม่ เช่น XCtest เราจะต้องการสิ่งนี้ในอนาคตเพื่อหลีกเลี่ยงการเต้นรำกับแทมบูรีนเมื่อต้องลงนามโค้ด

เรียกใช้การทดสอบด้วยเครื่องมือใน Firebase Test Lab ส่วนที่ 1: โครงการ iOS

มีเป้าหมายอย่างน้อยสามประการในโครงการของคุณ: แอปพลิเคชันหลัก การทดสอบหน่วย (มีบางส่วนใช่ไหม) และ UI เป้าหมายของการทดสอบที่เราสร้างขึ้น

ไปที่ Target AmazingApp, แท็บการตั้งค่า Build, ส่วน Code Signing Identity สำหรับการกำหนดค่า XCtest ให้เลือก iOS Developer ในส่วนสไตล์การลงนามโค้ด ให้เลือกด้วยตนเอง เรายังไม่ได้สร้างโปรไฟล์การจัดสรร แต่เราจะกลับมาที่โปรไฟล์นี้ในภายหลังอย่างแน่นอน

สำหรับ Target AmazingAppUITests เราก็ทำเช่นเดียวกัน แต่ป้อน com.company.amazingappuitests ในคอลัมน์ Product Bundle Identifier

2. การจัดทำโปรเจ็กต์ใน Apple Developer Program

ไปที่หน้าโปรแกรมนักพัฒนาของ Apple ไปที่ส่วนใบรับรอง ตัวระบุ และโปรไฟล์ จากนั้นไปที่คอลัมน์รหัสแอปของรายการตัวระบุ สร้าง App ID ใหม่ชื่อ AmazingAppUITests และ BundleID com.company.amazingappuitests

เรียกใช้การทดสอบด้วยเครื่องมือใน Firebase Test Lab ส่วนที่ 1: โครงการ iOS

ตอนนี้เรามีโอกาสที่จะลงนามการทดสอบของเราด้วยใบรับรองแยกต่างหาก แต่ ... ขั้นตอนการสร้างสำหรับการทดสอบเกี่ยวข้องกับการสร้างแอปพลิเคชันเองและการสร้างตัวดำเนินการทดสอบ ดังนั้นเราจึงประสบปัญหาในการลงนาม ID บันเดิลสองชุดด้วยโปรไฟล์การจัดเตรียมเดียว โชคดีที่มีวิธีแก้ไขที่เรียบง่ายและสวยงาม - Wildcard App ID เราทำซ้ำขั้นตอนในการสร้าง App ID ใหม่ แต่แทนที่จะใช้ ID แอปที่ชัดเจน ให้เลือก Wildcard App ID ดังในภาพหน้าจอ

เรียกใช้การทดสอบด้วยเครื่องมือใน Firebase Test Lab ส่วนที่ 1: โครงการ iOS

ณ จุดนี้ เราดำเนินการกับ Developer.apple.com เสร็จแล้ว แต่เราจะไม่ย่อขนาดหน้าต่างเบราว์เซอร์ ไปกันเถอะ ไซต์พร้อมเอกสารเกี่ยวกับ Fastlane และอ่านเกี่ยวกับยูทิลิตี้ Match ตั้งแต่หน้าหนึ่งไปอีกหน้าหนึ่ง

ผู้อ่านที่สนใจได้สังเกตเห็นว่าในการใช้ยูทิลิตี้นี้ เราจำเป็นต้องมีพื้นที่เก็บข้อมูลส่วนตัวและบัญชีที่สามารถเข้าถึงทั้งโปรแกรมนักพัฒนา Apple และ Github เราสร้างบัญชีของแบบฟอร์ม (หากจู่ๆ ก็ไม่มีสิ่งนั้น) [ป้องกันอีเมล]ตั้งรหัสผ่านที่รัดกุม ลงทะเบียนที่ Developer.apple.com และแต่งตั้งให้เป็นผู้ดูแลโครงการ จากนั้น ให้สิทธิ์บัญชีของคุณในการเข้าถึงพื้นที่เก็บข้อมูล GitHub ของบริษัทของคุณ และสร้างพื้นที่เก็บข้อมูลส่วนตัวใหม่ที่มีชื่อเช่น AmazingAppMatch

3. การตั้งค่า Fastlane และยูทิลิตี้การจับคู่

เปิดเทอร์มินัล ไปที่โฟลเดอร์ที่มีโปรเจ็กต์และเริ่มต้น Fastlane ตามที่ระบุไว้ใน คู่มืออย่างเป็นทางการ. หลังจากเข้าคำสั่งแล้ว

$ fastlane init

คุณจะได้รับแจ้งให้เลือกการกำหนดค่าการใช้งานที่มีอยู่ เราเลือกรายการที่สี่ - การกำหนดค่าด้วยตนเองของโครงการ

เรียกใช้การทดสอบด้วยเครื่องมือใน Firebase Test Lab ส่วนที่ 1: โครงการ iOS

ไดเร็กทอรี fastlane ใหม่ปรากฏในโปรเจ็กต์ ซึ่งมีสองไฟล์ - Appfile และ Fastfile โดยสรุป - ใน Appfile เราจัดเก็บข้อมูลบริการ และใน Fastfile เราเขียนงานในคำศัพท์ Fastlane ที่เรียกว่า lanes ฉันแนะนำให้อ่านเอกสารอย่างเป็นทางการ: เวลา, สอง.

เปิด 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

เรากลับไปที่เทอร์มินัลและเริ่มตั้งค่าการจับคู่ตามคู่มืออย่างเป็นทางการ

$ 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

เรากรอกข้อมูลด้วยวิธีนี้หากเราต้องการใช้การจับคู่ในอนาคตเพื่อลงนามบิวด์สำหรับการอัปโหลดไปยัง Crashlytics และ/หรือ AppStore เช่น เพื่อลงนาม ID ชุดรวมของแอปพลิเคชันของคุณ

แต่อย่างที่เราจำได้ เราได้สร้าง Wildcard ID พิเศษเพื่อลงนามในรุ่นทดสอบ ดังนั้นให้เปิด 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 เป็นเรื่องง่าย และทำตามคำแนะนำ

คัดลอกและวางจากตัวอย่างดั้งเดิมเพื่อให้เลนการทดสอบ_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

สำหรับข้อมูลทั้งหมดเกี่ยวกับการตั้งค่าช่องทางด่วนใน 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 ในแผนบริการฟรี หรืออาจไม่ได้ใช้ Firebase เลย ไม่มีความแตกต่างพื้นฐานอย่างแน่นอน เพราะสำหรับความต้องการในการทดสอบ เราสามารถสร้างโปรเจ็กต์แยกต่างหากพร้อมการใช้งานฟรีหนึ่งปี (เจ๋งใช่มั้ย)

เราเข้าสู่บัญชีโครงสร้างพื้นฐานของเรา (หรืออื่น ๆ ไม่สำคัญ) และไปที่ หน้าคอนโซล firebase. สร้างโปรเจ็กต์ใหม่ชื่อ AmazingAppUITests

สำคัญ: ในขั้นตอนก่อนหน้า ใน Fastfile ในเลน firebase_test_lab_ios_xctest พารามิเตอร์ 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 ให้เลือกตัวแปรสภาพแวดล้อม

เรียกใช้การทดสอบด้วยเครื่องมือใน Firebase Test Lab ส่วนที่ 1: โครงการ iOS
และตั้งค่าตัวแปรดังต่อไปนี้:

  • คีย์: GOOGLE_APPLICATION_CREDENTIALS
    ค่า: เนื้อหาของไฟล์ json คีย์บัญชีบริการ gcloud
  • คีย์: MATCH_PASSWORD
    ค่า: รหัสผ่านเพื่อถอดรหัสที่เก็บ GitHub ด้วยใบรับรอง
  • คีย์: FASTLANE_PASSWORD
    ค่า: รหัสผ่านบัญชีโครงสร้างพื้นฐานของพอร์ทัลนักพัฒนา Apple

เราบันทึกการเปลี่ยนแปลง สร้าง PR และส่งให้หัวหน้าทีมของเราตรวจสอบ

ผลของการ

จากการปรับเปลี่ยนง่าย ๆ เหล่านี้ เราจึงมีจุดยืนการทำงานที่ดีและมั่นคง พร้อมความสามารถในการบันทึกวิดีโอบนหน้าจออุปกรณ์ในขณะที่ทำการทดสอบ ในกรณีทดสอบ ฉันระบุรุ่นอุปกรณ์ iPhone X แต่ฟาร์มมีตัวเลือกมากมายจากการผสมผสานระหว่างรุ่นต่างๆ และเวอร์ชัน iOS

ส่วนที่สองจะเน้นไปที่การตั้งค่า Firebase Test Lab สำหรับโปรเจ็กต์ Android ทีละขั้นตอน

ที่มา: will.com

เพิ่มความคิดเห็น