unittest setup mock example cov pytest

setup - pytest vs unittest



Cómo pasar las variables de entorno a pytest (3)

Antes de comenzar a ejecutar las pruebas en mi proyecto python, leo algunas variables de entorno y configuro algunas variables con estos valores leídos. Mis pruebas se ejecutarán en el entorno deseado en base a estos valores leídos.

por ejemplo: digamos que las variables de entorno se llaman "ENV_NAME" y "ENV_NUMBER"

Ahora, me gustaría ejecutar las pruebas usando py.test

Si codifico estas variables de entorno, por ejemplo: ENV_NAME = ''staging'', ENV_NUMBER = ''5'' en mi código y luego ejecuto las pruebas ejecutando el comando py.test en la raíz del directorio del proyecto, todas las pruebas se ejecutan con éxito .

Pero, no quiero codificar estos valores. ¿Hay alguna manera de que pueda enviar estas variables de entorno como argumentos de línea de comando para py.test?

Estaba pensando más en las líneas de

py.test -ENV_NAME = ''staging'' -ENV_NUMBER = ''5''. Pero esto no está funcionando.

¡Por favor ayuda! ¡Gracias!


Finalmente encontré la respuesta que estaba buscando.

podemos establecer las variables de entorno como esta antes de ejecutar pruebas usando py.test

ENV_NAME = ''staging'' ENV_NUMBER = ''5'' py.test


Hay algunas maneras en que puedes lograr esto

1) Si no desea utilizar la variable de entorno, puede usar opciones optativas de pytest como https://pytest.org/latest/example/simple.html

2) Puede escribir un script de envoltura como este para llamar a las variables de entorno

import os import py env_name = os.environ["ENV_NAME"] env_no = os.environ["ENV_NUMBER"] pytest_args=(env_name,env_no) pytest.main(''-s'' ,pytest_args,test_file.py)

en test_file.py puedes usar

env_n, env_n = pytest.config.getoption(''pytest_args'')

3) Método alternativo si solo desea pasar la fecha sin establecer la variable de entorno

En la línea de comandos puedes usarlo como

py.test --testdata ="ENV_NAME:staging,ENV_NUMBER:5"

Puede utilizar en su archivo de prueba

pytest_params = pytest.config.getoption(''testdata'') params = pytest_params.split(":") param_dict = dict(params[i:i+2] for i in range(0,len(params),2)) env_name = param_dict["ENV_Name"]


Otra alternativa es usar el pytest-env . Se puede configurar así:

[pytest] env = HOME=~/tmp D:RUN_ENV=test

el prefijo D: permite establecer un valor predeterminado y no anular las variables existentes pasadas a py.test .

Nota : puede ejecutar pytest explícitamente con una configuración personalizada, si solo a veces necesita ejecutar una configuración de entorno especializada:

pytest -c custom_pytest.ini