Azure DevOps

Ce guide explique comment intégrer le client API JMeter de LoadFocus avec Azure DevOps pour les tests de performance automatisés.

Étapes de configuration

1. Stocker les identifiants dans Azure Key Vault

Pour une gestion sécurisée des identifiants, stockez vos identifiants API LoadFocus dans Azure Key Vault :

  1. Créez un Key Vault dans Azure si vous n'en avez pas
  2. Ajoutez les secrets suivants :
    • loadfocus-api-key : Votre clé API LoadFocus
    • loadfocus-team-id : Votre ID d'équipe LoadFocus
  3. Configurez une connexion de service pour accéder au Key Vault depuis votre pipeline

2. Créer un pipeline Azure

Créez un nouveau fichier nommé azure-pipelines.yml dans votre dépôt :

trigger:
- main
- develop
pool:
vmImage: 'ubuntu-latest'
variables:
- group: loadfocus-variables # Groupe de variables contenant les references Key Vault
stages:
- stage: Build
jobs:
- job: BuildAndTest
steps:
# Vos etapes de build et de test existantes...
- 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:
# Vos etapes de deploiement...

3. Configurer un groupe de variables avec l'intégration Key Vault

  1. Allez dans Pipelines > Library > Variable Groups
  2. Créez un nouveau groupe de variables nommé "loadfocus-variables"
  3. Liez-le à votre Azure Key Vault
  4. Ajoutez les variables suivantes en les liant à vos secrets Key Vault :
    • LOADFOCUS_API_KEY : Liée au secret loadfocus-api-key
    • LOADFOCUS_TEAM_ID : Liée au secret loadfocus-team-id

Configuration avancée

Utilisation de modèles YAML

Pour des étapes de test de performance réutilisables, créez un fichier modèle 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

Puis dans votre pipeline principal :

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

Exécuter plusieurs tests

Pour exécuter plusieurs tests de performance en séquence :

- script: |
# Executer le test API
loadfocus-api jmeter run-test \
--name "API_Test" \
--thresholds "avgresponse<=200,errors==0" \
--format json > $(Build.ArtifactStagingDirectory)/api_test_results.json
# Executer le test 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'

Intégration avec Azure Test Plans

Pour intégrer les résultats de tests de performance avec Azure Test Plans :

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

Vous devrez convertir la sortie JSON au format JUnit :

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

Conseils pour l'intégration Azure DevOps

  1. Jobs parallèles : Si vous avez plusieurs tests de performance, envisagez d'utiliser des jobs parallèles :

    jobs:
    - job: API_Performance_Test
    steps:
    # Executer le test de performance API
    - job: UI_Performance_Test
    steps:
    # Executer le test de performance UI
  2. Portes de déploiement : Utilisez les résultats des tests de performance comme porte de déploiement :

    - job: DeploymentGate
    steps:
    - script: |
    # Verifier si les tests de performance ont reussi
    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. Tableau de bord personnalisé : Créez un tableau de bord personnalisé pour visualiser les résultats des tests de performance au fil du temps.

  4. Notifications : Configurez des notifications pour les échecs de tests de performance :

    - 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()

Pour plus d'informations, consultez la documentation Azure DevOps et la documentation du client API LoadFocus.