Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

Chámome Dmitry, traballo como probador na empresa Ciencia MEL. Hai pouco rematei de tratar unha función relativamente recente de Laboratorio de probas de Firebase — é dicir, con probas instrumentais de aplicacións iOS usando o marco de proba nativo XCUITest.

Antes disto, xa probara Firebase Test Lab para Android e gustoume moito todo, así que decidín tentar poñer a infraestrutura de proba de iOS do proxecto no mesmo punto de vista. Tiven que buscar moito en Google e non todo funcionou a primeira vez, así que decidín escribir un artigo tutorial para aqueles que aínda están loitando.

Entón, se tes probas de IU nun proxecto de iOS, xa podes probar a executalas en dispositivos reais hoxe, ofrecidos por Good Corporation. Para os interesados, benvido a cat.

Na historia, decidín construír algúns datos iniciais: un repositorio privado en GitHub e o sistema de compilación CircleCI. O nome da aplicación é AmazingApp, o bundleID é com.company.amazingapp. Presento estes datos inmediatamente para reducir a confusión posterior.

Se implementaches certas solucións no teu proxecto de forma diferente, comparte a túa experiencia nos comentarios.

1. As propias probas

Crea unha nova rama de proxecto para probas de IU:

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

Abramos o proxecto en XCode e creemos un novo destino con probas de IU [XCode -> Ficheiro -> Novo -> Destino -> Paquete de probas de iOS], dándolle o nome autoexplicativo AmazingAppUITests.

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

Vaia á sección Fases de compilación do Destino creado e comprobe a presenza de Dependencias de destino - AmazingApp, en Fontes de compilación - AmazingAppUITests.swift.

Unha boa práctica é separar diferentes opcións de compilación en esquemas separados. Creamos un esquema para as nosas probas de IU [XCode -> Produto -> Esquema -> Novo esquema] e dámoslle o mesmo nome: AmazingAppUITests.

A compilación do esquema creado debe incluír o Destino da aplicación principal: probas de AmazingApp e Target UI - AmazingAppUITests - ver a captura de pantalla

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

A continuación, creamos unha nova configuración de compilación para probas de IU. En XCode, fai clic no ficheiro do proxecto e vai á sección Información. Fai clic en "+" e crea unha nova configuración, por exemplo XCtest. Necesitaremos isto no futuro para evitar bailar con pandeireta á hora de firmar códigos.

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

Hai polo menos tres Targets no teu proxecto: a aplicación principal, as probas unitarias (despois de todo, existen, non?) e as probas de Target UI que creamos.

Vaia a Target AmazingApp, pestana Configuración de compilación, sección Identidade de sinatura de código. Para a configuración de XCtest, seleccione Desenvolvedor de iOS. Na sección Estilo de sinatura de código, seleccione Manual. Aínda non xeramos un perfil de aprovisionamento, pero definitivamente volveremos a el un pouco máis tarde.

Para Target AmazingAppUITests facemos o mesmo, pero na columna Product Bundle Identifier introducimos com.company.amazingappuitests.

2. Configurar un proxecto no Apple Developer Program

Vaia á páxina do Programa para desenvolvedores de Apple, vai á sección Certificados, identificadores e perfís e, a continuación, á columna ID da aplicación do elemento Identificadores. Crea un novo ID de aplicación chamado AmazingAppUITests e bundleID com.company.amazingappuitests.

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

Agora temos a oportunidade de asinar as nosas probas cun certificado separado, pero... O procedemento para montar unha compilación para probar implica montar a propia aplicación e montar o corredor de probas. En consecuencia, atopámonos co problema de asinar dous ID de paquete cun perfil de aprovisionamento. Afortunadamente, hai unha solución sinxela e elegante: Wildcard App ID. Repetimos o procedemento para crear un novo ID de aplicación, pero en lugar de ID de aplicación explícito, seleccione ID de aplicación comodín como na captura de pantalla.

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

Neste momento, rematamos de traballar con developer.apple.com, pero non minimizaremos a xanela do navegador. Imos a Sitio de documentación de Fastlane e le sobre a utilidade Match de principio a fin.

Un lector atento observou que para usar esta utilidade necesitaremos un repositorio privado e unha conta con acceso tanto ao Programa para Desenvolvedores de Apple como a Github. Creamos (se de súpeto non hai tal cousa) unha conta do formulario [protexido por correo electrónico], crea un contrasinal seguro, rexístrao en developer.apple.com e nomeao como administrador do proxecto. A continuación, dámoslle acceso á conta ao repositorio github da túa empresa e creamos un novo repositorio privado cun nome como AmazingAppMatch.

3. Configurar Fastlane e a utilidade de coincidencia

Abre un terminal, vai ao cartafol co proxecto e inicializa Fastlane como se indica en manual oficial. Despois de introducir o comando

$ fastlane init

Solicitarase que seleccione as configuracións de uso dispoñibles. Seleccione a cuarta opción: configuración manual do proxecto.

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

O proxecto ten un novo directorio fastlane, que contén dous ficheiros: Appfile e Fastfile. En poucas palabras, almacenamos os datos do servizo en Appfile e escribimos traballos en Fastfile, chamados carrís na terminoloxía de Fastlane. Recomendo ler a documentación oficial: tempo, два.

Abre o Appfile no teu editor de texto favorito e lévao ao seguinte formulario:

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

Volvemos ao terminal e segundo o manual oficial comezamos a configurar o partido.

$ fastlane match init
$ fastlane match development

A continuación, introduza os datos solicitados: repositorio, conta, contrasinal, etc.

Importante: Cando inicies por primeira vez a utilidade de coincidencia, pediráselle que introduza un contrasinal para descifrar o repositorio. É moi importante gardar este contrasinal, necesitarémolo ao configurar o servidor CI.

Apareceu un ficheiro novo no cartafol Fastlane: Matchfile. Ábreo no teu editor de texto favorito e móstrao así:

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

Enchémolo exactamente deste xeito se queremos usar a coincidencia no futuro para asinar compilacións para publicalas en Crashlytics e/ou AppStore, é dicir, para asinar o ID do paquete da túa aplicación.

Pero, como lembramos, creamos un ID comodín especial para asinar a compilación de proba. Polo tanto, abra Fastfile e introduza un novo carril:

lane :testing_build_for_firebase do

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

end

Garda e entra no terminal

fastlane testing_build_for_firebase

e vemos como fastlane creou un novo certificado e o meteu no repositorio. Genial!

Abre XCode. Agora temos o perfil de aprovisionamento necesario do formulario Match Development com.company.*, que debe especificarse na sección Perfil de aprovisionamento para os obxectivos de AmazingApp e AmazingAppUITests.

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

Queda por engadir carril para probas de montaxe. Imos a repositorio un proxecto de complemento para Fastlane que facilita a configuración da exportación a Firebase Test Lab e segue as instrucións.

Imos copiar e pegar desde o exemplo orixinal para que a nosa pista testing_build_for_firebase remate así:


 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

Para obter información completa sobre a configuración de fastlane en CircleCI, recoméndolle ler a documentación oficial tempos, два.

Non esquezas engadir unha nova tarefa ao noso 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. E o noso banco de probas? Configurando Firebase.

Imos ver para que foi escrito o artigo.

Quizais a túa aplicación use Firebase nun plan gratuíto, ou quizais non. Non hai absolutamente ningunha diferenza fundamental, porque para as necesidades de proba podemos crear un proxecto separado cun ano de uso gratuíto (xenial, non?)

Iniciamos sesión na nosa conta de infraestrutura (ou calquera outra, non importa) e imos a Páxina da consola de Firebase. Crea un novo proxecto chamado AmazingAppUITests.

Importante: No paso anterior no Fastfile no carril firebase_test_lab_ios_xctest, o parámetro gcp_project debería coincidir co nome do proxecto.

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

A configuración predeterminada axúdanos bastante ben.

Non peches a pestana, rexístrate coa mesma conta Gcloud - esta é unha medida necesaria, xa que a comunicación con Firebase prodúcese mediante a interface da consola gcloud.

Google dá 300 dólares por ano, o que no contexto da realización de autotests equivale a un ano de uso gratuíto do servizo. Introducimos a túa información de pago, agardamos ao débito de proba de 1 $ e recibimos 300 $ na túa conta. Despois dun ano, o proxecto transferirase automaticamente a un plan de tarifas gratuítas, polo que non hai que preocuparse pola posible perda de diñeiro.

Volvamos á pestana co proxecto Firebase e transfirémolo ao plan de tarifas Blaze; agora temos algo que pagar se se supera o límite.

Na interface de gcloud, selecciona o noso proxecto Firebase, selecciona o elemento do menú principal "Directorio" e engade a API Cloud Testing e Cloud Tools Result API.

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

A continuación, vai ao elemento de menú "IAM e administración" -> Contas de servizo -> Crear conta de servizo. Concedemos dereitos para editar o proxecto.

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

Crea unha clave de API en formato JSON

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS

Necesitaremos o JSON descargado un pouco máis tarde, pero polo momento consideraremos que a configuración do Laboratorio de probas está completa.

5. Creación de CircleCI

Xorde unha pregunta razoable: que facer cos contrasinais? O mecanismo variable de ambiente da nosa máquina de compilación axudaranos a almacenar de forma segura os nosos contrasinais e outros datos confidenciais. Na configuración do proxecto CircleCI, seleccione Variables de ambiente

Realizamos probas instrumentais en Firebase Test Lab. Parte 1: proxecto iOS
E configura as seguintes variables:

  • clave: GOOGLE_APPLICATION_CREDENTIALS
    valor: contido do ficheiro json da clave da conta do servizo gcloud
  • clave: MATCH_PASSWORD
    valor: contrasinal para descifrar o repositorio github con certificados
  • chave: FASTLANE_PASSWORD
    valor: contrasinal da conta de infraestrutura do portal de desenvolvedores de Apple

Gardamos os cambios, creamos un PR e enviámolo ao responsable do noso equipo para que o revise.

Resultados de

Como resultado destas sinxelas manipulacións, recibimos un soporte de traballo bo e estable coa capacidade de gravar vídeo na pantalla do dispositivo no momento da proba. No exemplo de proba, especifiquei o modelo do dispositivo iPhone X, pero a granxa ofrece unha rica selección dunha combinación de diferentes modelos e versións de iOS.

A segunda parte estará dedicada á configuración paso a paso de Firebase Test Lab para un proxecto de Android.

Fonte: www.habr.com

Engadir un comentario