py.test: comment obtenir le nom du test actuel à partir de la méthode de configuration?
j'utilise py.test et me demande si et comment il est possible de récupérer le nom de la cours d'exécution de test au sein de l' setup
méthode qui est invoquée avant d'exécuter chaque test. Considérer ce code:
class TestSomething(object):
def setup(self):
test_name = ...
def teardown(self):
pass
def test_the_power(self):
assert "foo" != "bar"
def test_something_else(self):
assert True
juste avant TestSomething.test_the_power
devient exécuté, je voudrais avoir accès à ce nom dans les setup
comme indiqué dans le code via test_name = ...
alors que test_name
=="TestSomething.test_the_power"
.
en fait, en setup
, j'alloue des ressources pour chaque test. En fin de compte, en regardant les ressources qui ont été créées par divers tests unitaires, je voudrais pouvoir voir lequel a été créé par quel test. La meilleure chose serait d'utiliser le nom de test lors de la création de la ressource.
6 réponses
Vous pouvez également le faire en utilisant le Demande D'Installation comme ceci:
def test_name1(request):
testname = request.node.name
assert testname == 'test_name1'
setup
et teardown
les méthodes semblent être des méthodes anciennes pour supporter des tests écrits pour d'autres cadres, par exemple le nez. Le natif pytest
les méthodes sont appeléessetup_method
ainsi que teardown_method
qui reçoivent la méthode d'essai actuellement exécutée comme argument. Par conséquent, ce que je veux accomplir, peut être écrit comme ceci:
class TestSomething(object):
def setup_method(self, method):
print "\n%s:%s" % (type(self).__name__, method.__name__)
def teardown_method(self, method):
pass
def test_the_power(self):
assert "foo" != "bar"
def test_something_else(self):
assert True
La sortie de py.test -s
alors:
============================= test session starts ==============================
platform linux2 -- Python 2.7.3 -- pytest-2.3.3
plugins: cov
collected 2 items
test_pytest.py
TestSomething:test_the_power
.
TestSomething:test_something_else
.
=========================== 2 passed in 0.03 seconds ===========================
Vous pouvez également utiliser le PYTEST_CURRENT_TEST
variable d'environnement définie par pytest pour chaque cas de test.
PYTEST_CURRENT_TEST environment variable
Pour obtenir juste le nom du test:
os.environ.get('PYTEST_CURRENT_TEST').split(':')[-1].split(' ')[0]
vous pourriez avoir plusieurs tests, dans ce cas...
test_names = [n for n in dir(self) if n.startswith('test_')]
...vous donnera toutes les fonctions et les variables d'instance qui commencent par "test_" dans self
. Tant que vous n'avez pas de variables nommées "test_something" cela va fonctionner.
vous pouvez aussi définir une méthode setup_method(self, method)
au lieu de setup(self)
et cela sera appelé avant chaque invocation de méthode d'essai. En utilisant ceci, vous êtes simplement donné chaque méthode comme paramètre. Voir: http://pytest.org/latest/xunit_setup.html
vous pouvez donner au module d'inspection essayer.
import inspect
def foo():
print "My name is: ", inspect.stack()[0][3]
foo()
Sortie: My name is: foo