私はpy.testを使用していて、各テストを実行する前に呼び出されるsetup
メソッド内で現在実行されているテストの名前を取得することができるかどうか、またはどのように可能か疑問に思っています。このコードを考えてみましょう:
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
TestSomething.test_the_power
が実行される直前に、test_name = ...
== test_name
となるように、"TestSomething.test_the_power"
を介してコードで概説されているように、setup
でこの名前にアクセスしたいと思います。
実際、setup
では、テストごとにリソースを割り当てています。結局、さまざまな単体テストで作成されたリソースを見て、どのテストでどのリソースが作成されたかを確認したいと思います。最善の方法は、リソースの作成時にテスト名を使用することです。
次のように Request 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 ===========================
各テストケースに対してpytestによって設定されたPYTEST_CURRENT_TEST
環境変数を使用することもできます。
テスト名のみを取得するには:
os.environ.get('PYTEST_CURRENT_TEST').split(':')[-1].split(' ')[0]
複数のテストがある場合、その場合...
_test_names = [n for n in dir(self) if n.startswith('test_')]
_
...self
の「test_」で始まるすべての関数とインスタンス変数が表示されます。 「test_something」という名前の変数がない限り、これは機能します。
setup_method(self, method)
の代わりにメソッドsetup(self)
を定義することもできます。これは、各テストメソッドの呼び出しの前に呼び出されます。これを使用すると、単純に各メソッドがパラメーターとして与えられます。参照: http://pytest.org/latest/xunit_setup.html
type(self).__name__
を試してみませんか?
あなたはinspectモジュールを試してみることができます。
import inspect
def foo():
print "My name is: ", inspect.stack()[0][3]
foo()
出力:My name is: foo