Azure DevOps

Esta guía explica cómo integrar el Cliente API de JMeter de LoadFocus con Azure DevOps para pruebas de rendimiento automatizadas.

Pasos de Configuración

1. Almacenar Credenciales en Azure Key Vault

Para una gestión segura de credenciales, almacena tus credenciales de API de LoadFocus en Azure Key Vault:

  1. Crea un Key Vault en Azure si no tienes uno
  2. Agrega los siguientes secretos:
    • loadfocus-api-key: Tu clave API de LoadFocus
    • loadfocus-team-id: Tu ID de equipo de LoadFocus
  3. Configura una conexión de servicio para acceder al Key Vault desde tu pipeline

2. Crear un Pipeline de Azure

Crea un nuevo archivo llamado azure-pipelines.yml en tu repositorio:

trigger:
- main
- develop
pool:
vmImage: 'ubuntu-latest'
variables:
- group: loadfocus-variables # Grupo de variables que contiene referencias al Key Vault
stages:
- stage: Build
jobs:
- job: BuildAndTest
steps:
# Tus pasos existentes de compilación y prueba...
- stage: PerformanceTest
dependsOn: Build
condition: succeeded()
jobs:
- job: RunPerformanceTests
steps:
- task: NodeTool@0
inputs:
versionSpec: '16.x'
displayName: 'Install Node.js'
- script: |
npm install -g @loadfocus/loadfocus-api-client
displayName: 'Install LoadFocus JMeter API Client'
- script: |
loadfocus-api config set apikey $(LOADFOCUS_API_KEY)
loadfocus-api config set teamid $(LOADFOCUS_TEAM_ID)
displayName: 'Configure LoadFocus API Client'
- script: |
loadfocus-api jmeter run-test \
--name "AzureDevOps_$(Build.Repository.Name)_$(Build.SourceBranchName)" \
--thresholds "avgresponse<=200,errors==0,p95<=250" \
--format json > $(Build.ArtifactStagingDirectory)/performance_results.json
displayName: 'Run Performance Tests'
continueOnError: false
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'performance-test-results'
displayName: 'Publish Performance Test Results'
- stage: Deploy
dependsOn: PerformanceTest
condition: succeeded()
jobs:
- job: DeployApplication
steps:
# Tus pasos de despliegue...

3. Configurar Grupo de Variables con Integración de Key Vault

  1. Ve a Pipelines > Library > Variable Groups
  2. Crea un nuevo Grupo de Variables llamado "loadfocus-variables"
  3. Vincúlalo a tu Azure Key Vault
  4. Agrega las siguientes variables, vinculándolas a los secretos de tu Key Vault:
    • LOADFOCUS_API_KEY: Vinculado al secreto loadfocus-api-key
    • LOADFOCUS_TEAM_ID: Vinculado al secreto loadfocus-team-id

Configuración Avanzada

Uso de Plantillas YAML

Para pasos de pruebas de rendimiento reutilizables, crea un archivo de plantilla performance-test-template.yml:

parameters:
testName: 'Default_Test'
thresholds: 'avgresponse<=200,errors==0,p95<=250'
waitTimeout: 1800
steps:
- script: |
loadfocus-api jmeter run-test \
--name "${{ parameters.testName }}" \
--thresholds "${{ parameters.thresholds }}" \
--waitTimeout ${{ parameters.waitTimeout }} \
--format json > $(Build.ArtifactStagingDirectory)/performance_results.json
displayName: 'Run Performance Tests'
continueOnError: false

Luego en tu pipeline principal:

- template: performance-test-template.yml
parameters:
testName: 'AzureDevOps_$(Build.Repository.Name)_$(Build.SourceBranchName)'
thresholds: 'avgresponse<=150,errors==0,p95<=200'
waitTimeout: 2400

Ejecutar Múltiples Pruebas

Para ejecutar múltiples pruebas de rendimiento en secuencia:

- script: |
# Ejecutar prueba de API
loadfocus-api jmeter run-test \
--name "API_Test" \
--thresholds "avgresponse<=200,errors==0" \
--format json > $(Build.ArtifactStagingDirectory)/api_test_results.json
# Ejecutar prueba de UI
loadfocus-api jmeter run-test \
--name "UI_Test" \
--thresholds "avgresponse<=500,errors==0" \
--format json > $(Build.ArtifactStagingDirectory)/ui_test_results.json
displayName: 'Run Multiple Performance Tests'

Integración con Azure Test Plans

Para integrar los resultados de pruebas de rendimiento con Azure Test Plans:

- task: PublishTestResults@2
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '$(Build.ArtifactStagingDirectory)/test-results.xml'
testRunTitle: 'Performance Tests'
displayName: 'Publish Test Results'
condition: succeededOrFailed()

Necesitarás convertir la salida JSON al formato JUnit:

- script: |
# Ejecutar prueba de rendimiento
loadfocus-api jmeter run-test \
--name "AzureDevOps_Test" \
--thresholds "avgresponse<=200,errors==0" \
--format json > $(Build.ArtifactStagingDirectory)/performance_results.json
# Convertir JSON a formato JUnit (usando un script personalizado)
node convert-to-junit.js \
$(Build.ArtifactStagingDirectory)/performance_results.json \
$(Build.ArtifactStagingDirectory)/test-results.xml
displayName: 'Run Performance Tests and Convert Results'

Consejos para la Integración con Azure DevOps

  1. Jobs en Paralelo: Si tienes múltiples pruebas de rendimiento, considera usar jobs en paralelo:

    jobs:
    - job: API_Performance_Test
    steps:
    # Ejecutar prueba de rendimiento de API
    - job: UI_Performance_Test
    steps:
    # Ejecutar prueba de rendimiento de UI
  2. Puertas de Despliegue: Usa los resultados de pruebas de rendimiento como puerta de despliegue:

    - job: DeploymentGate
    steps:
    - script: |
    # Verificar si las pruebas de rendimiento pasaron
    if grep -q '"overallResult": "FAILED"' $(Build.ArtifactStagingDirectory)/performance_results.json; then
    echo "##vso[task.logissue type=error]Performance tests failed"
    echo "##vso[task.complete result=Failed;]"
    fi
  3. Panel Personalizado: Crea un panel personalizado para visualizar los resultados de pruebas de rendimiento a lo largo del tiempo.

  4. Notificaciones: Configura notificaciones para fallos en pruebas de rendimiento:

    - task: SendEmail@1
    inputs:
    to: 'team@example.com'
    subject: 'Performance Test Failed'
    body: 'Performance tests failed to meet thresholds. See attached results.'
    addAttachment: true
    attachmentPath: '$(Build.ArtifactStagingDirectory)/performance_results.json'
    condition: failed()

Para más información, consulta la documentación de Azure DevOps y la documentación del Cliente API de LoadFocus.