Integración CI/CD

En este artículo se muestra cómo configurar la integración de CI/CD para pruebas de Power Platform Playwright en Acciones de GitHub y Azure Pipelines. Automatice la autenticación, ejecute pruebas de extremo a extremo y publique los resultados como artefactos de pipeline e informes de prueba.

Prerrequisitos

Antes de configurar la canalización, asegúrese de que tiene:

  • Un Azure Key Vault con un certificado para el usuario de prueba
  • La entidad de servicio de tu canalización concedió el rol Usuario de certificados de Key Vault en la bóveda.
  • Las direcciones URL de la aplicación, el identificador de inquilino y el correo electrónico almacenados como secretos de canalización o variables

Para la configuración del certificado local, consulte Guía de autenticación.

Acciones de GitHub

Los siguientes pasos configuran un flujo de trabajo de Acciones de GitHub para ejecutar las pruebas de Power Platform Playwright en cada acción de inserción, pull request o acción programada.

Almacenamiento de secretos

En el repositorio, vaya a Configuración → Secretos y variables → Acciones y agregue:

Secreto Descripción
MS_AUTH_EMAIL Correo electrónico de la cuenta de usuario de prueba
AZURE_KEYVAULT_URL dirección URL de Key Vault (https://<vault>.vault.azure.net/)
AZURE_CERTIFICATE_NAME Nombre del certificado en Key Vault
AZURE_TENANT_ID id. de inquilino de Microsoft Entra
CANVAS_APP_URL Dirección URL completa del modo de ejecución de la aplicación canvas
MODEL_DRIVEN_APP_URL Dirección URL completa de la aplicación controlada por modelos

Archivo de flujo de trabajo

Creación de .github/workflows/e2e.yml:

name: Power Platform E2E Tests

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  schedule:
    - cron: '0 6 * * 1-5'  # Weekdays at 6 AM UTC

jobs:
  e2e:
    runs-on: ubuntu-latest
    timeout-minutes: 60

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Rush dependencies
        run: node common/scripts/install-run-rush.js install

      - name: Build toolkit
        run: node common/scripts/install-run-rush.js build --to power-platform-playwright-toolkit

      - name: Install Playwright browsers
        working-directory: packages/e2e-tests
        run: npx playwright install chromium --with-deps

      - name: Authenticate to Power Platform (Canvas)
        working-directory: packages/e2e-tests
        env:
          MS_AUTH_EMAIL: ${{ secrets.MS_AUTH_EMAIL }}
          MS_AUTH_CREDENTIAL_TYPE: certificate
          MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
          AZURE_KEYVAULT_URL: ${{ secrets.AZURE_KEYVAULT_URL }}
          AZURE_CERTIFICATE_NAME: ${{ secrets.AZURE_CERTIFICATE_NAME }}
          AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          CANVAS_APP_URL: ${{ secrets.CANVAS_APP_URL }}
          MODEL_DRIVEN_APP_URL: ${{ secrets.MODEL_DRIVEN_APP_URL }}
        run: npm run auth

      - name: Authenticate to Power Platform (MDA)
        working-directory: packages/e2e-tests
        env:
          MS_AUTH_EMAIL: ${{ secrets.MS_AUTH_EMAIL }}
          MS_AUTH_CREDENTIAL_TYPE: certificate
          MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
          AZURE_KEYVAULT_URL: ${{ secrets.AZURE_KEYVAULT_URL }}
          AZURE_CERTIFICATE_NAME: ${{ secrets.AZURE_CERTIFICATE_NAME }}
          AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          MODEL_DRIVEN_APP_URL: ${{ secrets.MODEL_DRIVEN_APP_URL }}
        run: npm run auth:mda

      - name: Run Playwright tests
        working-directory: packages/e2e-tests
        env:
          MS_AUTH_EMAIL: ${{ secrets.MS_AUTH_EMAIL }}
          CANVAS_APP_URL: ${{ secrets.CANVAS_APP_URL }}
          MODEL_DRIVEN_APP_URL: ${{ secrets.MODEL_DRIVEN_APP_URL }}
          CUSTOM_PAGE_NAME: AccountsCustomPage
          CI: true
        run: npx playwright test

      - name: Upload test results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: playwright-report
          path: packages/e2e-tests/playwright-report/
          retention-days: 30

      - name: Upload JUnit results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: test-results
          path: packages/e2e-tests/test-results/
          retention-days: 30

Publicación de resultados de pruebas en Acciones de GitHub

Para mostrar los resultados de las pruebas en la vista de comprobación de PR, agregue el paso del reportador JUnit después de ejecutar las pruebas.

      - name: Publish test results
        if: always()
        uses: dorny/test-reporter@v1
        with:
          name: Playwright Tests
          path: packages/e2e-tests/test-results/results.xml
          reporter: java-junit

Azure Pipelines

Los pasos siguientes configuran una definición de Azure Pipelines con plantillas reutilizables para ejecutar las pruebas de Power Platform Playwright.

Grupo de variables

Cree un grupo de variables denominado power-platform-e2e-secrets en Pipelines → Library y agregue las mismas variables que la tabla de secretos de Acciones de GitHub anterior.

Definición de la canalización

Creación de .azure-pipelines/e2e-tests.yml:

trigger:
  branches:
    include:
      - main

pr:
  branches:
    include:
      - main

schedules:
  - cron: '0 6 * * 1-5'
    displayName: Weekday morning run
    branches:
      include:
        - main

pool:
  vmImage: ubuntu-latest

variables:
  - group: power-platform-e2e-secrets
  - name: NODE_VERSION
    value: '20'

stages:
  - stage: E2E
    displayName: End-to-End Tests
    jobs:
      - job: PlaywrightTests
        displayName: Power Platform Playwright Tests
        timeoutInMinutes: 60
        steps:
          - template: steps/e2e-setup.yml

          - task: Bash@3
            displayName: Authenticate (Canvas)
            env:
              MS_AUTH_EMAIL: $(MS_AUTH_EMAIL)
              MS_AUTH_CREDENTIAL_TYPE: certificate
              MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
              AZURE_KEYVAULT_URL: $(AZURE_KEYVAULT_URL)
              AZURE_CERTIFICATE_NAME: $(AZURE_CERTIFICATE_NAME)
              AZURE_TENANT_ID: $(AZURE_TENANT_ID)
              CANVAS_APP_URL: $(CANVAS_APP_URL)
              MODEL_DRIVEN_APP_URL: $(MODEL_DRIVEN_APP_URL)
            script: |
              cd packages/e2e-tests
              npm run auth

          - task: Bash@3
            displayName: Authenticate (MDA)
            env:
              MS_AUTH_EMAIL: $(MS_AUTH_EMAIL)
              MS_AUTH_CREDENTIAL_TYPE: certificate
              MS_AUTH_CREDENTIAL_PROVIDER: azure-keyvault
              AZURE_KEYVAULT_URL: $(AZURE_KEYVAULT_URL)
              AZURE_CERTIFICATE_NAME: $(AZURE_CERTIFICATE_NAME)
              AZURE_TENANT_ID: $(AZURE_TENANT_ID)
              MODEL_DRIVEN_APP_URL: $(MODEL_DRIVEN_APP_URL)
            script: |
              cd packages/e2e-tests
              npm run auth:mda

          - task: Bash@3
            displayName: Run Playwright Tests
            env:
              MS_AUTH_EMAIL: $(MS_AUTH_EMAIL)
              CANVAS_APP_URL: $(CANVAS_APP_URL)
              MODEL_DRIVEN_APP_URL: $(MODEL_DRIVEN_APP_URL)
              CUSTOM_PAGE_NAME: AccountsCustomPage
              CI: 'true'
            script: |
              cd packages/e2e-tests
              npx playwright test

          - template: steps/e2e-publish-results.yml

Plantilla de paso de instalación reutilizable

Creación de .azure-pipelines/steps/e2e-setup.yml:

steps:
  - task: NodeTool@0
    displayName: Install Node.js
    inputs:
      versionSpec: $(NODE_VERSION)

  - task: Bash@3
    displayName: Install Rush dependencies
    script: node common/scripts/install-run-rush.js install

  - task: Bash@3
    displayName: Build toolkit
    script: node common/scripts/install-run-rush.js build --to power-platform-playwright-toolkit

  - task: Bash@3
    displayName: Install Playwright browsers
    script: |
      cd packages/e2e-tests
      npx playwright install chromium --with-deps

Plantilla de resultados de publicación reutilizable

Creación de .azure-pipelines/steps/e2e-publish-results.yml:

steps:
  - task: PublishTestResults@2
    displayName: Publish JUnit test results
    condition: always()
    inputs:
      testResultsFormat: JUnit
      testResultsFiles: packages/e2e-tests/test-results/results.xml
      testRunTitle: Power Platform Playwright Tests

  - task: PublishPipelineArtifact@1
    displayName: Publish Playwright report
    condition: always()
    inputs:
      targetPath: packages/e2e-tests/playwright-report
      artifact: playwright-report
      publishLocation: pipeline

Solución de problemas de errores de canalización de CI/CD

Use la tabla siguiente para diagnosticar y resolver problemas comunes al ejecutar pruebas de Playwright en una canalización de CI.

Síntoma Resolution
Falla en el paso de autenticación debido a un error de certificado Verificar la URL de Key Vault, el nombre del certificado y el rol del principal del servicio de la canalización
Se produce un error en las pruebas en la primera ejecución en CI Aumente retries a 1 y compruebe si hay selectores poco fiables.
Artefacto no publicado Asegúrese de que if: always() / condition: always() está establecido
El tiempo de espera de la tubería se agota Reducir el número de pruebas o aumentar timeoutInMinutes
Cannot find module con error Ejecutar el paso de compilación del kit de herramientas antes de ejecutar pruebas

Pasos siguientes

Consulte también