Uso de secretos y variables de entorno en Azure Load Testing

En este artículo, aprenderá a pasar secretos y entornos como parámetros a una prueba de carga en Azure Load Testing. Puede usar parámetros para cambiar el comportamiento de una prueba de carga sin tener que editar el script de Apache JMeter. Por ejemplo, para probar una aplicación web, especifique la dirección URL del punto de conexión como parámetro para reutilizar el script de prueba en varios entornos. También puede usar parámetros para evitar que tenga que codificar de forma rígida información confidencial en el script de prueba de JMeter.

El servicio Azure Load Testing admite dos tipos de parámetros:

  • Secretos: contienen información confidencial y se pasan de forma segura al motor de pruebas de carga. Por ejemplo, los secretos proporcionan las credenciales de un servicio web en lugar de codificarlas de forma rígida en el script de prueba. Para obtener más información, consulte Configuración de pruebas de carga con secretos.

  • Variables de entorno: contienen información no confidencial y están disponibles como variables de entorno en el motor de pruebas de carga. Por ejemplo, las variables de entorno hacen que la dirección URL del punto de conexión de la aplicación pueda configurarse. Para obtener más información, consulte Configuración de pruebas de carga con variables de entorno.

Puede especificar parámetros en la configuración de prueba de carga al crear una nueva prueba o actualizar una prueba existente. Si ejecuta una prueba de carga en el flujo de trabajo de CI/CD, defina los parámetros en el archivo de configuración de pruebas de carga o en la definición de flujo de trabajo de CI/CD.

Requisitos previos

  • Una cuenta de Azure con una suscripción activa. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

  • Un recurso de prueba de carga de Azure. Si necesita crear un recurso de Azure Load Testing, consulte la guía de inicio rápido Creación y ejecución de una prueba de carga.

Configuración de pruebas de carga con secretos

En esta sección, obtendrá información sobre cómo pasar secretos al script de prueba de carga en Azure Load Testing. Por ejemplo, puede usar un secreto para pasar la clave de API a un punto de conexión de servicio web al que esté realizando una prueba de carga. En lugar de almacenar la clave de API en la configuración o codificar de forma rígida en el script, puede guardarla en un almacén de secretos para controlar estrechamente el acceso al secreto.

Azure Load Testing permite almacenar secretos en Azure Key Vault. Como alternativa, al ejecutar la prueba de carga en una canalización de CI/CD, también puede usar el almacén de secretos asociado a la tecnología de CI/CD, como Azure Pipelines o Acciones de GitHub.

Para usar secretos con Azure Load Testing, realice los pasos siguientes:

  1. Almacene el valor del secreto en el almacén de secretos (Azure Key Vault o el almacén de secretos de CI/CD).
  2. Pase una referencia al secreto en el script de prueba de Apache JMeter.
  3. Use el valor de secreto en el script de prueba de Apache JMeter mediante la función personalizada GetSecret.

Importante

Solo puede usar la función personalizada al ejecutar el GetSecret script de prueba de JMeter con Azure Load Testing. Si ejecuta el script de prueba localmente, debe actualizar el script de prueba y leer valores secretos de otra manera.

Uso de Azure Key Vault para almacenar secretos de prueba de carga

Puede usar Azure Key Vault para pasar valores de secretos al script de prueba en Azure Load Testing. Agregue una referencia al secreto en la configuración de Azure Load Testing. Después, Azure Load Testing usa esta referencia para recuperar el valor del secreto en el script de Apache JMeter.

También debe conceder a Azure Load Testing acceso al almacén de claves de Azure para recuperar el valor del secreto.

Nota:

Si ejecuta una prueba de carga como parte del proceso de CI/CD, también puede usar el almacén de secretos relacionado. Vaya a Uso del almacén de secretos de CI/CD.

Creación de un secreto en Azure Key Vault

  1. Agregue el valor del secreto al almacén de claves, si aún no lo ha hecho.

    Importante

    Si ha restringido el acceso al almacén de claves de Azure mediante un firewall o una red virtual, siga estos pasos para conceder acceso a los servicios de Azure de confianza.

  2. Recupere el identificador del secreto del almacén de claves para su secreto. Use este identificador secreto para configurar la prueba de carga.

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

    El identificador del secreto es el identificador URI completo del secreto del almacén de claves de Azure. Opcionalmente, también puede incluir un número de versión. Por ejemplo, https://myvault.vault.azure.net/secrets/mysecret/ o https://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678.

Adición del secreto a la prueba de carga

  1. Haga referencia al secreto en la configuración de la prueba de carga.

    Defina un parámetro de secreto de prueba de carga para cada secreto al que haga referencia en el script de Apache JMeter. El nombre del parámetro debe coincidir con el nombre del secreto que se usa en el script de prueba de Apache JMeter. El valor del parámetro es el identificador de seguridad del almacén de claves.

    Puede especificar parámetros de secreto mediante cualquiera de las acciones siguientes:

    • En Azure Portal, seleccione la prueba de carga, elija Configurar, seleccione la pestaña Parámetros y, a continuación, especifique los detalles del parámetro.

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

    • Si va a configurar un flujo de trabajo de CI/CD y usa Azure Key Vault, puede especificar un secreto en el archivo de configuración de YAML mediante la propiedad secrets. Para obtener más información sobre la sintaxis, vea la referencia de YAML de configuración de prueba.

  2. Especifique la identidad que Azure Load Testing usa para acceder a los secretos en Azure Key Vault.

    La identidad puede ser la identidad asignada por el sistema del recurso de prueba de carga o una de las identidades asignadas por el usuario. Asegúrese de usar la misma identidad a la que ha concedido acceso anteriormente.

    Puede especificar la identidad de referencia del almacén de claves mediante una de las acciones siguientes:

    • En Azure Portal, seleccione la prueba de carga, luego Configurar y la pestaña Parámetros. Después, configure la identidad de referencia de Key Vault.

      Screenshot that shows how to select key vault reference identity.

    • Si va a configurar un flujo de trabajo de CI/CD y usa Azure Key Vault, puede especificar la identidad de referencia en el archivo de configuración de YAML mediante la propiedad keyVaultReferenceIdentity. Para obtener más información sobre la sintaxis, vea la referencia de YAML de configuración de prueba.

Concesión de acceso al almacén de claves de Azure

Al almacenar secretos o certificados de prueba de carga en Azure Key Vault, el recurso de prueba de carga usa una identidad administrada para acceder al almacén de claves. Después de configurar la identidad de administración, debe conceder a la identidad administrada de los permisos de recursos de prueba de carga para leer estos valores desde el almacén de claves.

Para conceder permisos de recursos de prueba de carga de Azure para leer secretos o certificados desde el almacén de claves de Azure:

  1. En Azure Portal, vaya al recurso del almacén de claves de Azure.

    Si no tiene un almacén de claves, siga las instrucciones de Inicio rápido de Azure Key Vault para crear uno.

  2. En el panel izquierdo, seleccione Directivas de acceso y, a continuación, seleccione + Crear.

  3. En la pestaña Permisos, en Permisos secretos, seleccione Obtener y, a continuación, seleccione Siguiente.

    Nota:

    Azure Load Testing recupera certificados como secreto para asegurarse de que la clave privada del certificado está disponible.

  4. En la pestaña Entidad de seguridad, busque y seleccione la identidad administrada para el recurso de prueba de carga y, a continuación, seleccione Siguiente.

    Si usa una identidad administrada asignada por el sistema, el nombre de la identidad administrada coincide con el del recurso de prueba de carga de Azure.

  5. Seleccione Siguiente de nuevo.

    Cuando se ejecuta la prueba, la identidad administrada asociada al recurso de prueba de carga ahora puede leer los secretos o certificados de la prueba de carga desde el almacén de claves.

Ahora que ha agregado un secreto en Azure Key Vault, ha configurado un secreto para la prueba de carga, ahora puede pasar a Uso de secretos en Apache JMeter.

Uso del almacén de secretos de CI/CD para guardar secretos de prueba de carga

Si usa Azure Load Testing en el flujo de trabajo de CI/CD, también puede usar el almacén de secretos asociado. Por ejemplo, puede usar secretos del repositorio de GitHub o variables secretas en Azure Pipelines.

Nota:

Si ya usa un almacén de claves, también puede usarlo para almacenar los secretos de la prueba de carga. Vaya a Uso de Azure Key Vault.

Para usar secretos en el almacén de secretos de CI/CD y pasarlos a la prueba de carga en CI/CD:

  1. Agregue el valor del secreto al almacén de secretos de CI/CD, en caso de que no exista.

    En Azure Pipelines, puede editar la canalización y agregar una variable.

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

    En GitHub, puede usar los secretos del repositorio de GitHub.

    Screenshot that shows how to add a GitHub repository secret.

    Nota:

    Asegúrese de usar el valor del secreto real y no el identificador del secreto del almacén de claves como valor.

  2. Pase el secreto como parámetro de entrada a la tarea o acción de Load Testing en el flujo de trabajo de CI/CD.

    En el siguiente fragmento de código de YAML se muestra cómo pasar el secreto a la acción de GitHub Load Testing:

    - 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 }}"
            }
        ]
    

    En el siguiente fragmento de código de YAML se muestra cómo pasar el secreto a la tarea de Azure Pipelines:

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

    Importante

    El nombre del parámetro de entrada del secreto debe coincidir con el nombre que se usó en el script de Apache JMeter.

Ahora ha especificado un secreto en el almacén de secretos de CI/CD y ha pasado una referencia a Azure Load Testing. Ya puede usar el secreto en el script de Apache JMeter.

Uso de secretos en Apache JMeter

A continuación, actualice el script de Apache JMeter para usar el secreto que especificó anteriormente.

En primer lugar, cree una variable definida por el usuario que recupere el valor del secreto. Después, puede usar esta variable en la prueba (por ejemplo, para pasar un token de API en un encabezado de solicitud HTTP).

  1. Cree una variable definida por el usuario en el archivo JMX y asígnele el valor del secreto mediante la función personalizada GetSecret.

    La función GetSecret(<my-secret-name>) toma el nombre del secreto como argumento. Debe usar este mismo nombre al configurar la prueba de carga en un paso posterior.

    Puede crear la variable definida por el usuario con el IDE de Apache JMeter, como se muestra en la imagen siguiente:

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

    De forma alternativa, puede editar directamente el archivo JMX, como se muestra en este fragmento de código de ejemplo:

    <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. Haga referencia a la variable definida por el usuario en el script de prueba.

    Puede usar la sintaxis ${} para hacer referencia a la variable en el script. En el ejemplo siguiente, se usa la variable udv_appToken para establecer un encabezado 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>
    

Configuración de pruebas de carga con variables de entorno

En esta sección, se usarán variables de entorno para pasar parámetros a la prueba de carga.

  1. Actualice el script de Apache JMeter para usar la variable de entorno (por ejemplo, para configurar el nombre de host del punto de conexión de la aplicación).

  2. Configure la prueba de carga y pase la variable de entorno al script de prueba.

Uso de variables de entorno en Apache JMeter

En esta sección, se actualizará el script de Apache JMeter para usar variables de entorno a fin de controlar el comportamiento del script.

Primero, se establece una variable definida por el usuario que lee la variable de entorno y, después, esta variable se puede usar en la ejecución de pruebas (por ejemplo, para actualizar el dominio HTTP).

  1. Cree una variable definida por el usuario en el archivo JMX y asígnele el valor de la variable de entorno mediante la función System.getenv.

    La función System.getenv("<my-variable-name>") toma el nombre de la variable de entorno como argumento. Use este mismo nombre al configurar la prueba de carga.

    Puede crear una variable definida por el usuario con el IDE de Apache JMeter, como se muestra en la imagen siguiente:

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

    De forma alternativa, puede editar directamente el archivo JMX, como se muestra en este fragmento de código de ejemplo:

    <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. Haga referencia a la variable definida por el usuario en el script de prueba.

    Puede usar la sintaxis ${} para hacer referencia a la variable en el script. En el ejemplo siguiente, se usa la variable udv_webapp para configurar la dirección URL del punto de conexión de la aplicación.

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

Configuración de variables de entorno en Azure Load Testing

Para pasar variables de entorno al script de Apache JMeter, puede configurar la prueba de carga en Azure Portal, en el archivo de configuración de prueba de YAML o directamente en el flujo de trabajo de CI/CD.

Importante

Al definir la variable de entorno para la prueba de carga, su nombre debe coincidir con el nombre de la variable que se usó en el script de Apache JMeter.

Para especificar una variable de entorno para la prueba de carga mediante Azure Portal, haga lo siguiente:

  1. En la página de configuración de prueba, seleccione la pestaña Parámetros.

  2. En la sección Variables de entorno, especifique los valores Nombre y Valor de la variable de entorno y, a continuación, seleccione Aplicar.

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

Si ejecuta la prueba de carga en un flujo de trabajo de CI/CD, puede definir variables de entorno en el archivo de configuración de prueba de YAML. Para obtener más información sobre la sintaxis, vea la referencia de YAML de configuración de prueba.

Como alternativa, puede especificar las variables de entorno directamente en la definición del flujo de trabajo de CI/CD. Se usan parámetros de entrada para la acción de Azure Load Testing o la tarea de Azure Pipelines a fin de pasar variables de entorno al script de Apache JMeter.

El fragmento de código YAML siguiente muestra un ejemplo de Acciones de 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"
        }
    ]

El fragmento de código YAML siguiente muestra un ejemplo de Azure Pipelines:

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

Preguntas más frecuentes

¿Almacena el servicio Azure Load Testing los valores de los secretos?

No. El servicio Azure Load Testing no almacena los valores de los secretos. Cuando se usa un URI de secreto del almacén de claves, el servicio solo almacena el URI del secreto y captura el valor del secreto en cada serie de pruebas. Si proporciona el valor de los secretos en un flujo de trabajo de CI/CD, los valores no estarán disponibles después de la serie de pruebas. Estos valores se proporcionan para cada ejecución de prueba.

¿Qué ocurre si tengo parámetros tanto en el archivo de configuración de YAML como en el flujo de trabajo de CI/CD?

Si existe un parámetro en el archivo de configuración de YAML y en la acción Azure Load Testing o en la tarea Azure Pipelines, el valor del flujo de trabajo de CI/CD se usa para la ejecución de pruebas.

He creado y ejecutado una prueba desde mi flujo de trabajo de CI/CD para la que he pasado parámetros mediante la tarea o acción de Azure Load Testing. ¿Puedo ejecutar esta prueba desde Azure Portal con los mismos parámetros?

Los valores de los parámetros no se almacenan cuando se pasan desde el flujo de trabajo de CI/CD. Debe volver a proporcionar los valores de parámetro al ejecutar la prueba desde Azure Portal. Recibirá un mensaje para escribir los valores que faltan. En el caso de los valores secretos, escriba el URI del secreto del almacén de claves. Los valores que especifique en la página de repetición de la ejecución o serie de pruebas solo son válidos para esa serie de pruebas. Para realizar cambios en el nivel de prueba, vaya a Configure Test (Configurar prueba) y escriba los valores de los parámetros.