web-dev-qa-db-fra.com

Comment passer des variables d'environnement à pytest

Avant de commencer à exécuter les tests de mon projet python, je lis des variables d’environnement et les définit avec des valeurs lues. Mes tests seront exécutés sur l'environnement souhaité en fonction de ces valeurs lues.

par exemple: supposons que les variables d'environnement s'appellent "ENV_NAME" et "ENV_NUMBER"

Maintenant, je voudrais exécuter les tests en utilisant py.test

Si je code en dur ces variables d’environnement, par exemple: ENV_NAME = 'staging', ENV_NUMBER = '5' dans mon code puis exécutez les tests en exécutant la commande py.test à la racine du répertoire du projet, tous les tests sont exécutés avec succès .

Mais, je ne veux pas coder en dur ces valeurs. Existe-t-il un moyen d'envoyer des variables d'environnement en tant qu'arguments de ligne de commande pour py.test?

Je pensais plus dans les lignes de 

py.test -ENV_NAME = 'staging' -ENV_NUMBER = '5'. Mais ça ne fonctionne pas.

S'il vous plaît aider! Je vous remercie!

26
sridhar249

J'ai finalement trouvé la réponse que je cherchais.

nous pouvons définir les variables d'environnement comme ceci avant d'exécuter des tests à l'aide de py.test

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

8
sridhar249

Une autre alternative consiste à utiliser le plugin pytest-env . Il peut être configuré comme suit:

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

le préfixe D: permet de définir une valeur par défaut et de ne pas remplacer les variables existantes transmises à py.test.

Note: vous pouvez exécuter explicitement pytest avec une configuration personnalisée, si vous n'avez parfois besoin que d'exécuter un environnement spécialisé configuré:

pytest -c custom_pytest.ini
33
tutuDajuju

Vous pouvez y parvenir de plusieurs manières. 

1) Si vous ne voulez pas utiliser la variable d'environnement, vous pouvez utiliser pytest addoptions en tant que https://pytest.org/latest/example/simple.html

2) Vous pouvez écrire un script comme celui-ci pour appeler des variables d’environnement. 

   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) 

dans test_fichier.py vous pouvez utiliser

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

3) Autre méthode si vous voulez juste passer la variable d’environnement de la date non définie 

en ligne de commande, vous pouvez l'utiliser comme

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

Vous pouvez utiliser dans votre fichier de test

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"]
10
Macintosh_89

En plus d'autres réponses. Il existe une option pour remplacer pytest_generate_tests dans conftest.py et y définir des variables ENV.

Par exemple, ajoutez ce qui suit dans conftest.py:

import os

def pytest_generate_tests(metafunc):
        os.environ['TEST_NAME'] = 'My super test name| Python version {}'.format(python_version)

Ce code vous permettra de saisir la variable TEST_NAME ENV dans votre application de test. Aussi, vous faites un montage froid:

import os
import pytest

@pytest.fucture
def the_name():
    return os.environ.get('TEST_NAME')

En outre, cette variable ENV sera disponible dans votre application.

0
Infernion

1 . J'utilise singe patch lorsque je ne charge pas de variable d'environnement en dehors de la fonction.

import os

# success.py
def hello_world():
    return os.environ["HELLO"]

# fail.py
global_ref = os.environ["HELLO"] # KeyError occurs this line because getting environment variable before monkeypatching

def hello_world():
    return global_ref

# test.py
def test_hello_world(monkeypatch):
    # Setup
    envs = {
        'HELLO': 'world'
    }
    monkeypatch.setattr(os, 'environ', envs)

    # Test
    result = hello_world()

    # Verify
    assert(result == 'world')
  1. Si vous utilisez PyCharm, vous pouvez définir différentes variantes d'environnement, [Exécuter] -> [Modifier la configuration] -> [Par défaut] -> [py.tests] -> [Variables d'environnement].

 enter image description here

0
MiaeKim