Azure DevOps

Este guia explica como integrar o Cliente API JMeter do LoadFocus com o Azure DevOps para testes de desempenho automatizados.

Passos de Configuracao

1. Armazenar Credenciais no Azure Key Vault

Para uma gestao segura de credenciais, armazene as suas credenciais da API do LoadFocus no Azure Key Vault:

  1. Crie um Key Vault no Azure se ainda nao tiver um
  2. Adicione os seguintes segredos:
    • loadfocus-api-key: A sua API key do LoadFocus
    • loadfocus-team-id: O seu team ID do LoadFocus
  3. Configure uma ligacao de servico para aceder ao Key Vault a partir do seu pipeline

2. Criar um Pipeline Azure

Crie um novo ficheiro chamado azure-pipelines.yml no seu repositorio:

trigger:
- main
- develop
pool:
vmImage: 'ubuntu-latest'
variables:
- group: loadfocus-variables # Variable group containing Key Vault references
stages:
- stage: Build
jobs:
- job: BuildAndTest
steps:
# Your existing build and test steps...
- 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:
# Your deployment steps...

3. Configurar Grupo de Variaveis com Integracao Key Vault

  1. Va a Pipelines > Library > Variable Groups
  2. Crie um novo Variable Group chamado "loadfocus-variables"
  3. Ligue-o ao seu Azure Key Vault
  4. Adicione as seguintes variaveis, ligando-as aos seus segredos do Key Vault:
    • LOADFOCUS_API_KEY: Ligar ao segredo loadfocus-api-key
    • LOADFOCUS_TEAM_ID: Ligar ao segredo loadfocus-team-id

Configuracao Avancada

Utilizar Templates YAML

Para passos de teste de desempenho reutilizaveis, crie um ficheiro de template 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

Depois, no seu pipeline principal:

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

Executar Multiplos Testes

Para executar multiplos testes de desempenho em sequencia:

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

Integracao com Azure Test Plans

Para integrar os resultados dos testes de desempenho com o Azure Test Plans:

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

Tera de converter a saida JSON para o formato JUnit:

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

Dicas para Integracao com Azure DevOps

  1. Jobs Paralelos: Se tiver multiplos testes de desempenho, considere utilizar jobs paralelos:

    jobs:
    - job: API_Performance_Test
    steps:
    # Run API performance test
    - job: UI_Performance_Test
    steps:
    # Run UI performance test
  2. Portas de Implementacao: Utilize os resultados dos testes de desempenho como porta de implementacao:

    - job: DeploymentGate
    steps:
    - script: |
    # Check if performance tests passed
    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. Painel Personalizado: Crie um painel personalizado para visualizar os resultados dos testes de desempenho ao longo do tempo.

  4. Notificacoes: Configure notificacoes para falhas nos testes de desempenho:

    - 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 mais informacoes, consulte a documentacao do Azure DevOps e a documentacao do Cliente API do LoadFocus.