t = timeit.Timer("foo()", "from __main__ import foo")
Поскольку timeit не имеет ваших данных в области видимости.
Вы также можете сделать это, используя Запрос Fixture , например:
def test_name1(request):
testname = request.node.name
assert testname == 'test_name1'
Методы setup
и teardown
кажутся устаревшими методами для поддержки тестов, написанных для других платформ, например, нос. Нативные pytest
методы называются setup_method
, а также teardown_method
, которые получают в качестве аргумента текущий выполняемый метод тестирования. Следовательно, то, что я хочу достичь, можно записать так:
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
Выходные данные py.test -s
тогда:
============================= 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 ===========================
У вас может быть несколько тестов, в этом случае ...
test_names = [n for n in dir(self) if n.startswith('test_')]
... даст вам все функции и переменные экземпляра, которые начинаются с "test_" в self
. Пока у вас нет переменных с именем «test_something», это будет работать.
Вы также можете определить метод setup_method(self, method)
вместо setup(self)
, и он будет вызываться перед каждым вызовом метода тестирования. Используя это, вы просто даете каждый метод в качестве параметра. См. http://pytest.org/latest/xunit_setup.html