2017-05-31 6 views
1

je les scripts suivants:variable de retour de conftest pour tester la classe

conftest.py:

import pytest 
@pytest.fixture(scope="session") 
def setup_env(request): 
    # run some setup 
    return("result") 

test.py:

import pytest 
@pytest.mark.usefixtures("setup_env") 
class TestDirectoryInit(object): 
    def setup(cls): 
     print("this is setup") 
     ret=setup_env() 
     print(ret) 

    def test1(): 
     print("test1") 

    def teardown(cls): 
     print("this teardown") 

j'obtiens l'erreur :

def setup(cls): 
     print("this is setup") 
>  ret=setup_env() 
E  NameError: name 'setup_env' is not defined 

Dans setup(), je veux obtenir la valeur de retour "résultat" de setup_env() dans conftest.py.

Est-ce que n'importe quel expert m'a guidé comment faire?

Répondre

1

Je crois que @pytest.mark.usefixtures est plus destiné à l'altération de l'état avant l'exécution de chaque test. De la docs:

"Parfois, les fonctions de test n'ont pas directement besoin d'accéder à un objet fixture."

https://docs.pytest.org/en/latest/fixture.html#using-fixtures-from-classes-modules-or-projects

Ce qui signifie que votre appareil est en cours d'exécution au début de chaque test, mais vos fonctions n'ont pas accès. Lorsque vos tests ont besoin d'accéder à l'objet renvoyé par votre appareil, il doit déjà être renseigné par nom lorsqu'il est placé dans conftest.py et marqué @pytest.fixture. Tout ce que vous devez faire est delcare alors le nom de l'appareil comme un argument à votre fonction de test, comme ceci:

https://docs.pytest.org/en/latest/fixture.html#using-fixtures-from-classes-modules-or-projects

Si vous préférez le faire à un niveau de classe ou d'un module, vous voulez changer la scope de votre déclaration @pytest.fixture, comme ceci: à la documentation, mais je pense qu'ils ont de bons exemples

https://docs.pytest.org/en/latest/fixture.html#sharing-a-fixture-across-tests-in-a-module-or-class-session

Désolé pour tant de liens. J'espère que cela éclaircira les choses.