如何从设置方法中获取当前测试的名称?

2024-06-26 18:04:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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 = ...访问setup中的该名称,以便test_name="TestSomething.test_the_power"

实际上,在setup中,我为每个测试分配一些资源。最后,查看由各种单元测试创建的资源,我希望能够看到哪个是由哪个测试创建的。最好是在创建资源时使用测试名称。


Tags: the方法代码namepytestself名称
3条回答

setupteardown方法似乎是支持为其他框架(例如nose)编写的测试的遗留方法。本地的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 ===========================

您还可以使用Request Fixture这样做:

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

您还可以为每个测试用例使用pytest设置的PYTEST_CURRENT_TEST环境变量。

PYTEST_CURRENT_TEST environment variable

要获取测试名称:

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

相关问题 更多 >