Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Менің атым Дмитрий, мен компанияда сынақшы болып жұмыс істеймін MEL ғылымы. Жақында мен салыстырмалы түрде жаңа мүмкіндікпен жұмыс істеуді аяқтадым Firebase сынақ зертханасы — атап айтқанда, XCUITest жергілікті тестілеу негізін пайдаланып iOS қолданбаларын аспаптық тестілеу арқылы.

Бұған дейін мен Android үшін Firebase Test Lab қолданбасын қолданып көрдім және бәрі өте ұнады, сондықтан мен жобаның iOS сынақ инфрақұрылымын сол негізге қоюды шештім. Маған Google-ді көп іздеуге тура келді және бәрі бірінші рет орындалмады, сондықтан мен әлі де күресіп жатқандар үшін оқулық мақала жазуды шештім.

Сонымен, егер сізде iOS жобасында UI сынақтары болса, оларды бүгінгі күні 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 сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Жасалған Мақсаттың Құру кезеңдері бөліміне өтіп, Мақсатты тәуелділіктердің бар-жоғын тексеріңіз - AmazingApp, Compile Sources - AmazingAppUITests.swift.

Жақсы тәжірибе әртүрлі құрастыру опцияларын бөлек схемаларға бөлу болып табылады. Біз UI сынақтары үшін схеманы жасаймыз [XCode -> Өнім -> Схема -> Жаңа схема] және оған бірдей атау береміз: AmazingAppUITests.

Жасалған схеманың құрылымы негізгі қолданбаның Мақсатын қамтуы керек - AmazingApp және Target UI сынақтары - AmazingAppUITests - скриншотты қараңыз

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Содан кейін біз UI сынақтары үшін жаңа құрастыру конфигурациясын жасаймыз. XCode бағдарламасында жоба файлын басып, Ақпарат бөліміне өтіңіз. «+» түймесін басып, жаңа конфигурация жасаңыз, мысалы, XCtest. Бұл бізге болашақта кодқа қол қою кезінде домбырамен билемеу үшін қажет болады.

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Жобаңызда кемінде үш Мақсат бар: негізгі қолданба, бірлік сынақтары (олар бар, солай емес пе?) және біз жасаған Target UI сынақтары.

Target AmazingApp, Құрастыру параметрлері қойындысы, Кодқа қол қою идентификациясы бөліміне өтіңіз. XCtest конфигурациясы үшін iOS әзірлеушісін таңдаңыз. Кодқа қол қою стилі бөлімінде Қолмен опциясын таңдаңыз. Біз провизия профилін әлі жасаған жоқпыз, бірақ оған сәл кейінірек ораламыз.

Target AmazingAppUITests үшін біз де солай істейміз, бірақ Өнім жинағының идентификаторы бағанында com.company.amazingappuitests енгіземіз.

2. Apple Developer бағдарламасында жобаны орнату

Apple әзірлеуші ​​​​бағдарламасы бетіне өтіңіз, Сертификаттар, идентификаторлар және профильдер бөліміне, содан кейін Идентификаторлар элементінің Қолданба идентификаторлары бағанына өтіңіз. AmazingAppUITests және bundleID com.company.amazingappuitests деп аталатын жаңа қолданба идентификаторын жасаңыз.

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Енді бізде сынақтарымызға жеке сертификатпен қол қоюға мүмкіндігіміз бар, бірақ... Тестілеу үшін құрастыруды құрастыру процедурасы қосымшаның өзін құрастыруды және сынақ жүгірткіні құрастыруды қамтиды. Тиісінше, біз бір провизия профилі бар екі бума идентификаторына қол қою мәселесіне тап болдық. Бақытымызға орай, қарапайым және талғампаз шешім бар - Wildcard App ID. Жаңа қолданба идентификаторын жасау процедурасын қайталаймыз, бірақ айқын қолданба идентификаторының орнына скриншоттағыдай Wildcard қолданба идентификаторын таңдаңыз.

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Осы сәтте біз developer.apple.com сайтымен жұмыс істеп жатырмыз, бірақ браузер терезесін кішірейтпейміз. барайық Fastlane құжаттама сайты және Match утилитасы туралы басынан аяғына дейін оқыңыз.

Мұқият оқырман бұл қызметтік бағдарламаны пайдалану үшін бізге жеке репозиторий және Apple әзірлеуші ​​​​бағдарламасына және Github-қа кіру мүмкіндігі бар тіркелгі қажет болатынын байқады. Біз пішіннің тіркелгісін жасаймыз (егер кенеттен мұндай нәрсе болмаса). [электрондық пошта қорғалған], күшті құпия сөз ойлап тауып, оны developer.apple.com сайтында тіркеңіз және оны жоба әкімшісі ретінде тағайындаңыз. Әрі қарай, есептік жазбаға компанияңыздың github репозиторийіне рұқсат береміз және AmazingAppMatch сияқты атауы бар жаңа жеке репозиторий жасаймыз.

3. Fastlane және сәйкестік утилитасын орнату

Терминалды ашыңыз, жоба бар қалтаға өтіңіз және көрсетілгендей fastlane инициализациялаңыз ресми нұсқаулық. Пәрменді енгізгеннен кейін

$ fastlane init

Қол жетімді пайдалану конфигурацияларын таңдау сұралады. Төртінші опцияны таңдаңыз - жобаны қолмен орнату.

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Жобада екі файлдан тұратын жаңа жылдам каталог бар - Appfile және Fastfile. Қысқаша айтқанда, біз қызмет деректерін Appfile ішінде сақтаймыз және Fastlane терминологиясында жолақтар деп аталатын Fastfile ішінде тапсырмаларды жазамыз. Мен ресми құжаттаманы оқуды ұсынамын: рет, два.

Таңдаулы мәтіндік редакторда 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-да жариялауға арналған жинақтарға қол қою үшін, яғни қолданбаңыздың бума идентификаторына қол қою үшін болашақта сәйкестікті пайдаланғымыз келсе, оны дәл осылай толтырамыз.

Бірақ, есімізде, біз сынақ құрастыруға қол қою үшін арнайы 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 сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Сынақтарды жинау үшін жолақты қосу қалады. барайық репозиторий Firebase сынақ зертханасына экспорттауды орнатуды және нұсқауларды орындауды жеңілдететін fastlane плагин жобасы.

Түпнұсқа мысалдан көшіріп қойайық, сонда 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

CircleCI ішінде fastlane орнату туралы толық ақпарат алу үшін мен ресми құжаттаманы оқуды ұсынамын рет, два.

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 консоль беті. AmazingAppUITests атты жаңа жоба жасаңыз.

Бұл маңызды болып табылады: Firebase_test_lab_ios_xctest жолындағы Fastfile ішіндегі алдыңғы қадамда gcp_project параметрі жоба атауына сәйкес келуі керек.

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Әдепкі параметрлер бізге өте жақсы сәйкес келеді.

Қойындыны жаппаңыз, сол тіркелгі бойынша тіркеліңіз Gcloud - бұл қажетті шара, өйткені Firebase-пен байланыс gcloud консоль интерфейсі арқылы жүзеге асады.

Google бір жылға 300 доллар береді, бұл автотесттерді орындау аясында қызметті бір жыл тегін пайдаланумен тең. Төлем ақпаратыңызды енгіземіз, $1 сынақ дебетін күтеміз және шотыңызға $300 аламыз. Бір жылдан кейін жоба автоматты түрде тегін тарифтік жоспарға ауысады, сондықтан ақшаны жоғалту мүмкіндігі туралы алаңдаудың қажеті жоқ.

Firebase жобасымен қойындыға оралайық және оны Blaze тарифтік жоспарына ауыстырайық - енді бізде лимиттен асып кеткен жағдайда төлеуге болатын нәрсе бар.

Gcloud интерфейсінде Firebase жобамызды таңдап, «Каталог» негізгі мәзір элементін таңдап, Cloud Testing API және Cloud Tools Result API қосыңыз.

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Содан кейін «IAM және әкімшілік» мәзір тармағына өтіңіз -> Қызметтік тіркелгілер -> Қызметтік тіркелгі жасау. Біз жобаны өңдеу құқығын береміз.

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

JSON пішімінде API кілтін жасаңыз

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы

Бізге жүктелген JSON сәл кейінірек қажет болады, бірақ әзірге сынақ зертханасын орнату аяқталған деп есептейміз.

5. CircleCI орнату

Ақылға қонымды сұрақ туындайды - парольдермен не істеу керек? Құрастыру машинасының ортаның айнымалы механизмі бізге құпия сөздерді және басқа құпия деректерді қауіпсіз сақтауға көмектеседі. CircleCI жоба параметрлерінде Ортаның айнымалы мәндерін таңдаңыз

Біз Firebase сынақ зертханасында аспаптық сынақтарды жүргіземіз. 1-бөлім: iOS жобасы
Және келесі айнымалыларды орнатыңыз:

  • кілт: GOOGLE_APPLICATION_CREDENTIALS
    мән: gcloud қызмет тіркелгі кілтінің json файлының мазмұны
  • кілт: MATCH_PASSWORD
    мән: сертификаттармен github репозиторийінің шифрын шешуге арналған құпия сөз
  • кілт: FASTLANE_PASSWORD
    мән: Apple әзірлеуші ​​порталының инфрақұрылым тіркелгісінің құпия сөзі

Біз өзгертулерді сақтаймыз, PR жасаймыз және оны топ басшысына тексеруге жібереміз.

Нәтижелері

Осы қарапайым манипуляциялардың нәтижесінде біз тестілеу кезінде құрылғы экранында бейне жазу мүмкіндігі бар жақсы, тұрақты жұмыс стенді алдық. Сынақ мысалында мен iPhone X құрылғысының үлгісін көрсеттім, бірақ ферма әртүрлі үлгілер мен iOS нұсқаларының тіркесімінен бай таңдауды қамтамасыз етеді.

Екінші бөлім Android жобасы үшін Firebase сынақ зертханасын кезең-кезеңімен орнатуға арналады.

Ақпарат көзі: www.habr.com

пікір қалдыру