Saltar al contenido principal
Proton v5

Ambiente de la ejecución

La misma automatización prueba en homologación y opera en producción. Lo que cambia de un lugar a otro (dirección del sistema, usuario, contraseña) queda en el ambiente, registrado en Proton, y no repetido en cada dataset. El script pide el valor por el nombre y recibe el del ambiente con el que corre la ejecución.

La ejecución usa el ambiente elegido al dispararla (pantalla, programación, recurrencia o conector) o, si no se eligió ninguno, el ambiente predeterminado del dataset. Sin ninguno de los dos, se ejecuta sin ambiente.

Leer las variables​

from proton.proton_automation import start_component
from proton.proton_environment import get_environment_name, get_environment_value, is_production
from proton.proton_logs import set_log

start_component() # ya lee el ambiente de la ejecución, una vez

url = get_environment_value("SAP_URL")
usuario = get_environment_value("SAP_USUARIO")
senha = get_environment_value("SAP_SENHA")

set_log(f"Ambiente: {get_environment_name()}")
if is_production():
set_log("Ejecución en producción: sin guardar documento de prueba")
Función (proton.proton_environment)Qué hace
get_environment_value(nome, allow_empty=False)Valor de la variable; error si no existe o está vacía (allow_empty=True acepta "")
get_environment_variables()Copia de todas las variables; vacía sin ambiente o fuera de Proton
get_environment_name()Nombre del ambiente; None sin ambiente o fuera de Proton
is_production()Si el ambiente tiene la marca de producción
mask_environment_values(texto)El texto con los valores del ambiente reemplazados por ••••••
load_environment(force=False)Lee el ambiente; force=True lo vuelve a leer

En los ambientes, usa los mismos nombres de variables (SISTEMA_URL en Homologación y en Producción): el script lee siempre el mismo nombre, y el ambiente decide el valor. Solo lo que cambia de comportamiento en producción usa la marca de producción. El nombre se compara exactamente, distinguiendo mayúsculas y minúsculas.

Una lectura por ejecución​

La SDK le pide el ambiente a Proton una vez por ejecución, en start_component() (Python) o en startComponent() (Java), y guarda todo en memoria. Sin esa llamada, la lectura ocurre en el primer acceso al ambiente. Toda la ejecución usa los mismos valores, aunque alguien modifique el ambiente a mitad de camino.

Los valores nunca van al disco, al log ni a las variables del proceso. La salida de la ejecución recibe solo una línea con el nombre del ambiente y la cantidad de variables.

Proton entrega el ambiente solo mientras la ejecución está en curso. La lectura usa el mismo token y el mismo permiso que las otras rutas de la ejecución (Ejecuciones: ver).

Errores​

La lectura por nombre nunca devuelve un valor vacío en lugar de un error: detiene el script con ProtonEnvironmentError (Python) o ProtonEnvironmentException (Java). El mensaje indica la variable y el ambiente, nunca el valor.

Desde la 5.5.0, el ejecutor de componentes cuenta este error como falla de ambiente. En Java, no lo confundas con ProtonEnvironmentError (5.5.0), que el paso lanza para marcar la falla de ambiente: consulta Estado de la ejecución. En Python, esa excepción del paso se llama ProtonEnvironmentFailure: consulta Estado de la ejecución.

Motivo (reason)Cuándo
environmentVariableNotFoundEl ambiente no tiene la variable
emptyVariableLa variable existe, pero está vacía
runWithoutEnvironmentLa ejecución no tiene ambiente: define el ambiente predeterminado del dataset o elige uno al disparar la ejecución
notProtonExecutionLectura por nombre fuera de una ejecución de Proton
runAlreadyFinishedLa ejecución ya terminó
datasetRunNotFoundLa ejecución no existe en la organización del token
httpErrorSin acceso (HTTP 401 o 403: revisa el token y el permiso), otro estado o sin respuesta

Una falla en la lectura hecha al abrir el paso no derriba el componente: la automatización que no usa el ambiente sigue con normalidad, y el error vuelve en el primer acceso al ambiente, incluso en el nombre y en la marca de producción. Así, una falla de red no se convierte en "no es producción".

Máscara en los logs​

Proton no le dice a la SDK qué variables son secretas, así que la SDK enmascara todos los valores del ambiente en lo que envía al log de la ejecución: cada valor pasa a ser ••••••, del más largo al más corto.

  • Los valores con menos de 4 caracteres no se enmascaran; si no, el log se vuelve ilegible. No guardes secretos con menos de 4 caracteres.
  • Los parámetros de salida se registran tal como vinieron: se escriben a propósito.
  • Lo que el script imprime por su cuenta no pasa por la SDK. Para eso, usa mask_environment_values (Python) o ProtonEnvironment.mask (Java).

De la categoría del dataset al ambiente​

En Proton 4, el script decidía la dirección, el usuario y la contraseña según la categoría del dataset. En Proton 5 el dataset no tiene categoría: las funciones de categoría están obsoletas y avisan en el log. Lee los valores del ambiente:

# Antes (Proton 4)
if get_dataset_category_name() == "PRD":
url = "https://sistema.empresa.com.br"
else:
url = "https://sistema-hml.empresa.com.br"

# Después (Proton 5)
url = get_environment_value("SISTEMA_URL")

No compares el nombre del ambiente con la antigua categoría: es texto libre ("Producción", "PRD", "Homologación 2"). Para lo que cambia de comportamiento en producción, usa la marca de producción.