with tutorial framework español djangoproject desde con cero applications python pytest

python - framework - tutorial django



py.test: ¿cómo obtener el nombre de la prueba actual del método de configuración? (6)

Estoy usando py.test y me pregunto si / cómo es posible recuperar el nombre de la prueba actualmente ejecutada dentro del método de setup que se invoca antes de ejecutar cada prueba. Considere este código:

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

Justo antes de que se ejecute TestSomething.test_the_power , me gustaría tener acceso a este nombre en la setup como se describe en el código a través de test_name = ... así que test_name == "TestSomething.test_the_power" .

En realidad, en la setup , asigno algunos recursos para cada prueba. Al final, mirando los recursos que han sido creados por varias pruebas de unidad, me gustaría poder ver cuál fue creado por qué prueba. Lo mejor sería usar el nombre de la prueba al crear el recurso.


Es posible que tenga múltiples pruebas, en cuyo caso ...

test_names = [n for n in dir(self) if n.startswith(''test_'')]

... le dará todas las funciones y variables de instancia que comienzan con "test_" en self . Mientras no tengas ninguna variable llamada "test_something" esto funcionará.

También puede definir un método setup_method(self, method) lugar de setup(self) y se llamará antes de cada invocación del método de prueba. Usando esto, simplemente te dan cada método como un parámetro. Consulte: http://pytest.org/latest/xunit_setup.html


Los métodos de setup y teardown parecen ser métodos heredados para respaldar las pruebas escritas para otros marcos, por ejemplo, la nariz. Los métodos nativos de pytest se denominan setup_method , así como teardown_method que reciben el método de prueba ejecutado actualmente como un argumento. Por lo tanto, lo que quiero lograr, se puede escribir así:

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 salida de py.test -s entonces es:

============================= 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 ===========================


También puede usar la variable de entorno PYTEST_CURRENT_TEST establecida por pytest para cada caso de prueba.

Variable de entorno PYTEST_CURRENT_TEST

Para obtener sólo el nombre de la prueba:

os.environ.get(''PYTEST_CURRENT_TEST'').split('':'')[-1].split('' '')[0]


También puedes hacer esto usando el accesorio de solicitud de esta manera:

def test_name1(request): testname = request.node.name assert testname == ''test_name1''


Trate de type(self).__name__ tal vez?


Usted podría dar el módulo de inspección son intentar.

import inspect def foo(): print "My name is: ", inspect.stack()[0][3] foo()

Salida: My name is: foo