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 ter que editar o script Apache JMeter. Por exemplo, para testar um aplicativo Web, especifique a URL do ponto de extremidade como um parâmetro para reutilizar seu script de teste em vários ambientes. Você também pode usar parâmetros para evitar que você tenha que codificar informações confidenciais no script de teste 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 passados com segurança para o motor de teste de carga. Por exemplo, os segredos fornecem credenciais de serviço Web em vez de codificá-las no script de teste. Para obter mais informações, consulte 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, consulte Configurar testes de carga com variáveis de ambiente.

Você pode especificar parâmetros na configuração de 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á parâmetros no arquivo de configuração de teste de carga ou na definição de fluxo de trabalho de CI/CD.

Pré-requisitos

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

  • Um recurso de teste de carga do Azure. Se você precisar criar um recurso de teste de carga do Azure, consulte o guia de 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 seu script de teste de carga no Teste de Carga do Azure. Por exemplo, você pode usar um segredo para passar a chave da API para um ponto de extremidade de serviço Web que está carregando o teste. Em vez de armazenar a chave da API na configuração ou codificá-la no script, você pode salvá-la em um armazenamento secreto para controlar rigorosamente o acesso ao segredo.

O Teste de Carga do Azure permite armazenar segredos no Cofre de Chaves do Azure. Como alternativa, ao executar o teste de carga em um pipeline de CI/CD, você também pode usar o armazenamento secreto associado à sua tecnologia de CI/CD, como Pipelines do Azure ou Ações do GitHub.

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

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

Importante

Você só pode usar a função personalizada quando executa seu script de teste JMeter com o GetSecret Teste de Carga do Azure. Se você executar o script de teste localmente, precisará atualizar o script de teste e ler valores secretos 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 secretos para seu script de teste no Teste de Carga do Azure. Você adiciona 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 secreto no script Apache JMeter.

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

Nota

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

Criar um segredo no Cofre da Chave do Azure

  1. Adicione o valor secreto ao seu cofre de chaves, se ainda não o tiver feito.

    Importante

    Se você restringiu o acesso ao seu 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 secreto do cofre de chaves para o seu segredo. Você usa esse identificador secreto para configurar seu teste de carga.

    Screenshot that shows the details of a secret in an Azure key vault.

    O identificador secreto é o URI completo do segredo no cofre de chaves do Azure. 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. Faça referência ao segredo na configuração do teste de carga.

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

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

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

      Screenshot that shows where to add secret details to a load test in the Azure portal.

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

  2. Especifique a identidade que o Teste de Carga do Azure usa para acessar seus segredos no Cofre da Chave do Azure.

    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 que concedeu acesso anteriormente.

    Você pode especificar a identidade de referência do cofre de chaves seguindo um destes procedimentos:

    • No portal do Azure, selecione seu teste de carga, selecione Configurar, selecione a guia Parâmetros e configure a identidade de referência do Cofre da Chave.

      Screenshot that shows how to select key vault reference identity.

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

Conceder acesso ao seu cofre de chaves do Azure

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

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

  1. No portal do Azure, vá para 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 Cofre de Chaves do Azure para criar um.

  2. No painel esquerdo, selecione Políticas de Acesso e, em seguida, selecione + Criar.

  3. No separador Permissões, em Permissões secretas, selecione Obter e, em seguida, selecione Seguinte.

    Nota

    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, procure e selecione a identidade gerenciada para o recurso de teste de carga e selecione Avançar.

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

  5. Selecione Avançar novamente.

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

Agora que você adicionou um segredo no Cofre de Chaves do Azure, configurou um segredo para seu teste de carga, agora você pode mover para Usar segredos no Apache JMeter.

Use o armazenamento secreto 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, também poderá usar o repositório secreto associado. Por exemplo, você pode usar segredos de repositório do GitHub ou variáveis secretas no Azure Pipelines.

Nota

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

Para usar segredos no armazenamento secreto de CI/CD e passá-los para o teste de carga em CI/CD:

  1. Adicione o valor secreto ao armazenamento secreto de CI/CD, se ele ainda não existir.

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

    Screenshot that shows how to add a variable to Azure Pipelines.

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

    Screenshot that shows how to add a GitHub repository secret.

    Nota

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

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

    O trecho YAML a seguir mostra como passar o segredo para a ação Teste de carga do GitHub:

    - 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 seguinte trecho de YAML 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 entrada secreto precisa corresponder ao nome usado no script Apache JMeter.

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

Usar segredos no Apache JMeter

Em seguida, atualize o script Apache JMeter para usar o segredo especificado anteriormente.

Primeiro, você cria uma variável definida pelo usuário que recupera o valor secreto. 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 usa o nome secreto como um argumento. Use 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 Apache JMeter IDE, conforme mostrado na imagem a seguir:

    Screenshot that shows how to add user-defined variables to your Apache JMeter script.

    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. Faça referência à 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 de 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ê atualiza 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 do 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 System.getenv função.

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

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

    Screenshot that shows how to add user-defined variables for environment variables to your JMeter script.

    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. Faça referência à 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ável para configurar a udv_webapp 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 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 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 de configuração de teste, selecione a guia Parâmetros .

  2. Na seção Variáveis de Ambiente, insira a variável de ambiente Nome e Valor e selecione Aplicar.

    Screenshot that shows how to add an environment variable to a load test in the Azure portal.

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 YAML. Para obter mais informações sobre a sintaxe, consulte a referência YAML de configuração de teste.

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

O trecho YAML a seguir mostra um exemplo de Ações do GitHub:

- 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 seguinte trecho do YAML 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"
          }
      ]

FAQ

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 de 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 dos segredos em um fluxo de trabalho de CI/CD, os valores secretos não estarão disponíveis após a execução do 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 YAML e no fluxo de trabalho CI/CD?

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

Criei e executei um teste a partir 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 este teste a partir 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 quando executar o teste do portal do Azure. Você recebe um prompt para inserir os valores ausentes. Para valores secretos, insira o URI secreto do cofre de chaves. Os valores inseridos na página de execução ou reexecução de teste sã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 os valores dos parâmetros.