Usar segredos e variáveis de ambiente no Teste de Carga do Azure

Neste artigo, você aprenderá a passar segredos e ambientes como parâmetros para um teste de carga no Teste de Carga do Azure. Você pode usar parâmetros para alterar o comportamento de um teste de carga sem precisar editar o script do Apache JMeter. Por exemplo, para testar um aplicativo Web, especifique a URL do ponto de extremidade como um parâmetro para reutilizar o script de teste em vários ambientes. Você também poderá usar parâmetros para evitar que você precise codificar informações confidenciais no script de teste do JMeter.

O serviço de Teste de Carga do Azure dá suporte a dois tipos de parâmetros:

  • Segredos: contêm informações confidenciais e são passadas com segurança para o mecanismo de teste de carga. Por exemplo, os segredos fornecem credenciais de serviço Web em vez de codificá-las embutidamente no script de teste. Para saber mais, confira Configurar testes de carga com segredos.

  • Variáveis de ambiente: contêm informações não confidenciais e estão disponíveis como variáveis de ambiente no mecanismo de teste de carga. Por exemplo, as variáveis de ambiente tornam a URL do ponto de extremidade do aplicativo configurável. Para obter mais informações, confira Configurar testes de carga com variáveis de ambiente.

Você pode especificar parâmetros na configuração do teste de carga ao criar um novo teste ou atualizar um teste existente. Se você executar um teste de carga em seu fluxo de trabalho de CI/CD, definirá os parâmetros no arquivo de configuração do teste de carga ou na definição do fluxo de trabalho de CI/CD.

Pré-requisitos

  • Uma conta do Azure com uma assinatura ativa. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

  • Um recurso de teste de carga do Azure. Se precisar criar um recurso de Teste de Carga do Azure, consulte o início rápido Criar e executar um teste de carga.

Configurar testes de carga com segredos

Nesta seção, você aprenderá a passar segredos para o script de teste de carga no Teste de Carga do Azure. Por exemplo, você pode usar um segredo para passar a chave de API para um ponto de extremidade de serviço Web no qual você está realizando testes de carga. Em vez de armazenar a chave de API na configuração ou codificá-la-a no script, você pode salvá-la em um armazenamento de segredos para controlar rigorosamente o acesso ao segredo.

O Teste de Carga do Azure permite que você armazene segredos no Azure Key Vault. Como alternativa, ao executar o teste de carga em um pipeline de CI/CD, você também pode usar o armazenamento de segredos associado à sua tecnologia de CI/CD, como Azure Pipelines ou GitHub Actions.

Para usar segredos com o Teste de Carga do Azure, execute as seguintes etapas:

  1. Armazene o valor do segredo no armazenamento de segredos (Azure Key Vault ou no armazenamento de segredos de CI/CD).
  2. Passe uma referência ao segredo para o script de teste do Apache JMeter.
  3. Use o valor do segredo no script de teste do Apache JMeter usando a função personalizada GetSecret.

Importante

Você só pode usar a função personalizada GetSecret quando executar o script de teste do JMeter com o Teste de Carga do Azure. Se você executar o script de teste localmente, precisará atualizá-lo e ler os valores de segredos de uma maneira diferente.

Usar o Azure Key Vault para armazenar segredos de teste de carga

Você pode usar o Azure Key Vault para passar valores de segredos para o script de teste no Teste de Carga do Azure. Adicione uma referência ao segredo na configuração do Teste de Carga do Azure. Em seguida, o Teste de Carga do Azure usa essa referência para recuperar o valor do segredo no script do Apache JMeter.

Você também precisa conceder o Teste de Carga do Azure acesso ao seu cofre de chaves do Azure para recuperar o valor secreto.

Observação

Se você executar um teste de carga como parte do processo de CI/CD, também poderá usar o repositório de segredos relacionado. Pule para Usar o armazenamento de segredos de CI/CD.

Crie um segredo no Azure Key Vault.

  1. Adicione o segredo ao seu cofre de chaves, caso ainda não tenha feito isso.

    Importante

    Se você restringiu o acesso ao cofre de chaves do Azure por um firewall ou rede virtual, siga estas etapas para conceder acesso aos serviços confiáveis do Azure.

  2. Recupere o identificador do segredo do cofre de chaves para seu segredo. Use esse identificador de segredo para configurar seu teste de carga.

    O identificador do segredo é o URI completo do segredo no Azure Key Vault. Opcionalmente, você também pode incluir um número de versão. Por exemplo, https://myvault.vault.azure.net/secrets/mysecret/ ou https://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678.

Adicione o segredo ao seu teste de carga

  1. Referencie o segredo na configuração do teste de carga.

    Você define um parâmetro de segredo de teste de carga para cada segredo referenciado no script Apache JMeter. Esse nome do parâmetro deve corresponder ao nome do segredo que você usa no script do Apache JMeter. O valor do parâmetro de segredo é o identificador de segurança do cofre de chaves.

    Você pode especificar parâmetros secretos seguindo um destes procedimentos:

    • No portal do Azure, selecione o teste de carga, selecione Configurar, selecione a guia Parâmetros e, em seguida, insira os detalhes do parâmetro.

      Captura de tela que mostra onde adicionar segredos a um teste de carga no portal do Azure.

    • Se você estiver configurando um fluxo de trabalho de CI/CD e usar o Azure Key Vault, poderá especificar um segredo no arquivo de configuração YAML usando a propriedade secrets. Para obter mais informações sobre a sintaxe, consulte a referência de YAML de configuração de teste.

  2. Especifique a identidade que o Teste de Carga do Azure usa para acessar seus segredos no Azure Key Vault.

    A identidade pode ser a identidade atribuída pelo sistema do recurso de teste de carga ou uma das identidades atribuídas pelo usuário. Certifique-se de usar a mesma identidade a que concedeu acesso anteriormente.

    Você pode especificar a identidade de referência do cofre de chaves fazendo o seguinte:

    • No portal do Azure, selecione o teste de carga, selecione Configurar, selecione a guia Parâmetros e, em seguida, configure a identidade de referência do Key Vault.

      Captura de tela que mostra como selecionar a identidade de referência do cofre de chaves.

    • Se você estiver configurando um fluxo de trabalho de CI/CD e usar o Azure Key Vault, poderá especificar a identidade de referência no arquivo de configuração YAML usando a propriedade keyVaultReferenceIdentity. Para obter mais informações sobre a sintaxe, consulte a referência de YAML de configuração de teste.

Conceder acesso ao seu cofre de chaves do Azure

Quando você armazena segredos de teste de carga ou certificados no Azure Key Vault, seu recurso de teste de carga usa uma identidade gerenciada para acessar o cofre de chaves. Depois de configurar a identidade de gerenciamento, você precisará conceder a identidade gerenciada das suas permissões de recurso de teste de carga para ler esses valores do cofre de chaves.

Para conceder permissões de recurso de teste de carga do Azure para ler segredos ou certificados do cofre de chaves do Azure:

  1. No portal do Azure, acesse o recurso do cofre de chaves do Azure.

    Se você não tiver um cofre de chaves, siga as instruções no Início Rápido do Azure Key Vault para criar um.

  2. No menu à esquerda, selecione Políticas de Acesso e selecione Criar.

  3. Na guia Permissões, em Permissões secretas, selecione Obter, e selecione Próximo.

    Observação

    O Teste de Carga do Azure recupera certificados como um segredo para garantir que a chave privada do certificado esteja disponível.

  4. Na guia Principal, pesquise e selecione a identidade gerenciada no recurso de teste de carga e selecione Próximo.

    Se você estiver usando uma identidade gerenciada atribuída pelo sistema, o nome da identidade gerenciada corresponderá ao do recurso de teste de carga do Azure.

  5. Selecione novamente Avançar.

    Quando o teste é executado, a identidade gerenciada associada ao recurso de teste de carga já pode ler os segredos ou certificados do teste de carga do cofre de chaves.

Agora que você adicionou um segredo no Azure Key Vault, configurou um segredo para o teste de carga, você já pode mover para Usar segredos no Apache JMeter.

Usar o armazenamento de segredos de CI/CD para salvar segredos de teste de carga

Se você estiver usando o Teste de Carga do Azure em seu fluxo de trabalho de CI/CD, você também poderá usar o armazenamento de segredo associado. Por exemplo, você pode usar GitHub do repositório de segredos ou variáveis secretas no Azure Pipelines.

Observação

Se você já estiver usando um cofre de chaves, você também poderá usá-lo para armazenar os segredos do teste de carga. Pule para Usar Azure Key Vault.

Para usar segredos no repositório de segredos do CI/CD e passá-los para seu teste de carga no CI/CD:

  1. Adicione o valor secreto ao armazenamento de segredos de CI/CD, caso ele ainda não exista.

    No Azure Pipelines, você pode editar o pipeline e adicionar uma variável.

    Captura de tela que mostra como adicionar uma variável ao Azure Pipelines.

    No GitHub, você pode usar os segredos do repositório do GitHub.

    Captura de tela que mostra como adicionar um segredo de repositório do GitHub.

    Observação

    Certifique-se de usar o valor de segredo real e não o identificador secreto do cofre de chaves como o valor.

  2. Passe o segredo como um parâmetro de entrada para a tarefa/ação de Teste de Carga no fluxo de trabalho de CI/CD.

    O snippet YAML a seguir mostra como passar o segredo para a ação GitHub teste de carga:

    - name: 'Azure Load Testing'
      uses: azure/load-testing@v1
      with:
        loadtestConfigFile: 'SampleApp.yaml'
        loadtestResource: 'MyTest'
        resourceGroup: 'loadtests-rg'
        secrets: |
        [
            {
            "name": "appToken",
            "value": "${{ secrets.MY_SECRET }}"
            }
        ]
    

    O snippet YAML a seguir mostra como passar o segredo para a tarefa Azure Pipelines:

    - task: AzureLoadTest@1
      inputs:
        azureSubscription: 'MyAzureLoadTestingRG'
        loadTestConfigFile: 'SampleApp.yaml'
        loadTestResource: 'MyTest'
        resourceGroup: 'loadtests-rg'
        secrets: |
          [
              {
              "name": "appToken",
              "value": "$(mySecret)"
              }
          ]
    

    Importante

    O nome do parâmetro de segredo precisa corresponder ao nome usado no script do Apache JMeter.

Agora você especificou um segredo no armazenamento de segredos de CI/CD e passou uma referência ao Teste de Carga do Azure. Agora você pode usar o segredo no script do Apache JMeter.

Usar segredos no Apache JMeter

Em seguida, atualize o script do Apache JMeter para usar o segredo que você especificou anteriormente.

Primeiro, você criará uma variável definida pelo usuário que recupera o valor do segredo. Em seguida, você pode usar essa variável em seu teste (por exemplo, para passar um token de API em um cabeçalho de solicitação HTTP).

  1. Crie uma variável definida pelo usuário em seu arquivo JMX e atribua o valor secreto a ela usando a GetSecret função personalizada.

    A GetSecret(<my-secret-name>) função assume o nome do segredo como um argumento. Você usa esse mesmo nome ao configurar o teste de carga em uma etapa posterior.

    Você pode criar a variável definida pelo usuário usando o IDE do Apache JMeter, conforme mostrado na imagem a seguir:

    Captura de tela que mostra como adicionar variáveis definidas pelo usuário ao seu script do Apache JMeter.

    Como alternativa, você pode editar diretamente o arquivo JMX, conforme mostrado neste trecho de código de exemplo:

    <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
      <collectionProp name="Arguments.arguments">
        <elementProp name="appToken" elementType="Argument">
          <stringProp name="Argument.name">udv_appToken</stringProp>
          <stringProp name="Argument.value">${__GetSecret(appToken)}</stringProp>
          <stringProp name="Argument.desc">Value for x-secret header </stringProp>
          <stringProp name="Argument.metadata">=</stringProp>
        </elementProp>
      </collectionProp>
    </Arguments>
    
  2. Referencie a variável definida pelo usuário no script de teste.

    Você pode usar a ${} sintaxe para fazer referência à variável no script. No exemplo a seguir, você usa a udv_appToken variável para definir um cabeçalho HTTP.

      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
        <collectionProp name="HeaderManager.headers">
          <elementProp name="" elementType="Header">
            <stringProp name="Header.name">api-key</stringProp>
            <stringProp name="Header.value">${udv_appToken}</stringProp>
          </elementProp>
        </collectionProp>
      </HeaderManager>
    

Configurar testes de carga com variáveis de ambiente

Nesta seção, você usa variáveis de ambiente para passar parâmetros para o teste de carga.

  1. Atualize o script Apache JMeter para usar a variável de ambiente (por exemplo, para configurar o nome do host do ponto de extremidade do aplicativo).

  2. Configure o teste de carga e passe a variável de ambiente para o script de teste.

Usar variáveis de ambiente no Apache JMeter

Nesta seção, você atualizará o script Apache JMeter para usar variáveis de ambiente para controlar o comportamento do script.

Primeiro, você define uma variável definida pelo usuário que lê a variável de ambiente e, em seguida, pode usar essa variável na execução de teste (por exemplo, para atualizar o domínio HTTP).

  1. Crie uma variável definida pelo usuário em seu arquivo JMX e atribua o valor da variável de ambiente a ela usando a função System.getenv.

    A System.getenv("<my-variable-name>") função usa o nome da variável de ambiente como um argumento. Use esse mesmo nome ao configurar o teste de carga.

    Você pode criar uma variável definida pelo usuário usando o IDE do Apache JMeter, conforme mostrado na imagem a seguir:

    Captura de tela que mostra como adicionar variáveis definidas pelo usuário para variáveis de ambiente ao seu script do JMeter.

    Como alternativa, você pode editar diretamente o arquivo JMX, conforme mostrado neste trecho de código de exemplo:

    <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
      <collectionProp name="Arguments.arguments">
        <elementProp name="appToken" elementType="Argument">
          <stringProp name="Argument.name">udv_webapp</stringProp>
          <stringProp name="Argument.value">${__BeanShell( System.getenv("webapp") )}</stringProp>
          <stringProp name="Argument.desc">Web app URL</stringProp>
          <stringProp name="Argument.metadata">=</stringProp>
        </elementProp>
      </collectionProp>
    </Arguments>
    
  2. Referencie a variável definida pelo usuário no script de teste.

    Você pode usar a ${} sintaxe para fazer referência à variável no script. No exemplo a seguir, você usa a variáveludv_webapp para configurar a URL do ponto de extremidade do aplicativo.

    <stringProp name="HTTPSampler.domain">${udv_webapp}</stringProp>
    

Configurar variáveis de ambiente no Teste de Carga do Azure

Para passar variáveis de ambiente para o script Apache JMeter, você pode configurar o teste de carga no portal do Azure, no arquivo de configuração de teste YAML ou diretamente no fluxo de trabalho de CI/CD.

Importante

Quando você define a variável de ambiente para o teste de carga, seu nome deve corresponder ao nome da variável que você usou no script do Apache JMeter.

Para especificar uma variável de ambiente para o teste de carga usando o portal do Azure, faça o seguinte:

  1. Na página configuração de teste, selecione a guia parâmetros.

  2. Na seção Variáveis de ambiente, insira o Nome e o Valorda variável de ambiente e, em seguida, selecione Aplicar.

    Captura de tela que mostra como adicionar uma variável de ambiente a um teste de carga no portal do Azure.

Se você executar o teste de carga em um fluxo de trabalho de CI/CD, poderá definir variáveis de ambiente no arquivo de configuração de teste do YAML. Para obter mais informações sobre a sintaxe, consulte a referência de YAML de configuração de teste.

Como alternativa, você pode especificar diretamente variáveis de ambiente na definição de fluxo de trabalho de CI/CD. Você usa parâmetros de entrada para a ação do Teste de Carga do Azure ou a tarefa Azure Pipelines para passar variáveis de ambiente para o script Apache JMeter.

O trecho de código YAML a seguir mostra um exemplo do GitHub Actions:

- name: 'Azure Load Testing'
  uses: azure/load-testing
  with:
    loadtestConfigFile: 'SampleApp.yaml'
    loadtestResource: 'MyTest'
    resourceGroup: 'loadtests-rg'
    env: |
    [
        {
        "name": "webapp",
        "value": "myapplication.contoso.com"
        }
    ]

O trecho de código YAML a seguir mostra um exemplo do Azure Pipelines:

- task: AzureLoadTest@1
  inputs:
    azureSubscription: 'MyAzureLoadTestingRG'
    loadTestConfigFile: 'SampleApp.yaml'
    loadTestResource: 'MyTest'
    resourceGroup: 'loadtests-rg'
    env: |
      [
          {
          "name": "webapp",
          "value": "myapplication.contoso.com"
          }
      ]

Perguntas frequentes

O serviço de Teste de Carga do Azure armazena meus valores secretos?

Não. O serviço de Teste de Carga do Azure não armazena os valores dos segredos. Quando você usa um URI secreto do cofre de chaves, o serviço armazena apenas o URI secreto e busca o valor do segredo para cada execução de teste. Se você fornecer o valor de segredos em um fluxo de trabalho de CI/CD, os valores secretos não estarão disponíveis após a execução de teste. Você fornece esses valores para cada execução de teste.

O que acontece se eu tiver parâmetros no meu arquivo de configuração do YAML e no fluxo de trabalho de CI/CD?

Se existir um parâmetro no arquivo de configuração YAML e na ação Teste de Carga do Azure ou na tarefa do Azure Pipelines, o valor do fluxo de trabalho de CI/CD será usado para a execução do teste.

Criei e executei um teste do meu fluxo de trabalho de CI/CD passando parâmetros usando a tarefa ou ação de Teste de Carga do Azure. Posso executar esse teste do portal do Azure com os mesmos parâmetros?

Os valores dos parâmetros não são armazenados quando são passados do fluxo de trabalho de CI/CD. Você precisa fornecer os valores de parâmetro novamente ao executar o teste no portal do Azure. Você receberá uma solicitação para inserir os valores ausentes. Quanto aos valores secretos, você deve inserir o URI secreto do cofre de chaves. Os valores que você inserir na página de execução de teste ou executar novamente serão válidos somente para essa execução de teste. Para fazer alterações no nível de teste, vá para Configurar Teste e insira seus valores de parâmetro.