2017-10-20 4 views
2

Le problème est que ma fonction d'appareil donné a une dépendance externe et qu'elle cause une "erreur" (comme un réseau inaccessible/une ressource insuffisante, etc.).Existe-t-il un moyen de sauter un luminaire pytest?

Je souhaite ignorer le projecteur et sauter tout test qui dépend de ce projecteur.

Faire quelque chose comme cela ne marchera pas:

import pytest 

@pytest.mark.skip(reason="Something.") 
@pytest.fixture(scope="module") 
def parametrized_username(): 
    raise Exception("foobar") 
    return 'overridden-username' 

cela se traduira par

_______________________________ ERROR at setup of test_username _______________________________ 

    @pytest.mark.skip(reason="Something.") 
    @pytest.fixture(scope="module") 
    def parametrized_username(): 
>  raise Exception("foobar") 
E  Exception: foobar 

a2.py:6: Exception 

Quel est le tout de suite sauter un appareil de pytest?

+0

pourriez-vous bourrer la définition dans un bloc 'try/except'? –

+0

@PaulH - les tests échoueront. Comment puis-je passer les tests alors? –

+0

Je pense que vous allez devoir marquer les tests individuellement, ou des choses à l'intérieur d'une classe de test et ignorer cela d'un seul coup –

Répondre

1

Oui, vous pouvez le faire facilement:

import pytest 

@pytest.fixture 
def myfixture(): 
    pytest.skip('Because I want so') 

def test_me(myfixture): 
    pass 

$ pytest -v -s -ra r.py 
r.py::test_me SKIPPED 
=========== short test summary info =========== 
SKIP [1] .../r.py:6: Because I want so 

=========== 1 skipped in 0.01 seconds =========== 

En interne, la fonction pytest.skip() déclenche une exception Skipped, qui est héritée de OutcomeException. Ces exceptions sont spécialement traitées pour simuler le résultat du test, mais pour ne pas échouer le test (similaire à pytest.fail()).

+1

Merci de m'avoir éduqué, @Sergey. –