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