如何在unittest中从testsuite获取当前运行的测试用例名称

时间:2011-10-17 17:40:05

标签: python unit-testing selenium

如何获得当前运行的测试用例名称,而在testsuite集合中有16个测试用例。测试按顺序执行(按testSuite集合添加测试的顺序)。当我将所有测试添加到testSuite集合时,我可以预览此对象但是如何在测试运行时获得当前正在执行的测试。也许某些变量包含这些信息?

示例:

def suite():
    testSuite= unittest.TestSuite()
    testSuite.addTest(FlightsTestCases('test_sel__reservation_one_way_wizzair_transfer'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_wizzair_transfer'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_round_wizzair_transfer'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_tair_transfer'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_round_tair_transfer'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_wizzair_credit_card'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_tair_credit_card'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_round_wizzair_transfer'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_wizzair_transfer'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_easyjet_transfer'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_ryanair_transfer'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_round_ryanair_credit_card'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_tair_duplicated'))
    testSuite.addTest(FlightsTestCases('test_reservation_wrong_card_lowcost'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_tair_credit_card'))
    testSuite.addTest(FlightsTestCases('test_sel_reservation_one_way_tair_wrong_credit_card'))

    return testSuite

if __name__ == "__main__":
    result = unittest.TextTestRunner(verbosity=2).run(suite())
    sys.exit(not result.wasSuccessful())

使用Selenium-RC框架执行测试。

3 个答案:

答案 0 :(得分:52)

unittest.TestCase.shortDescription()

  

返回测试的描述,如果没有提供描述,则返回None。此方法的默认实现返回测试方法的docstring的第一行(如果可用)或None。

unittest.TestCase.id()

  

返回标识特定测试用例的字符串。这通常是测试方法的全名,包括模块和类名。

希望其中一个对您的需求有用。

答案 1 :(得分:2)

unittest.TestCase._testMethodName

示例代码:

import unittest


class BasicTests(unittest.TestCase):

    def test_print(self):
        print(self._testMethodName)

答案 2 :(得分:0)

我有一个类似的问题,但是测试是可重用的测试,并使用验证功能。当发生故障时,我可以使用验证功能进行所需的工作。例如将失败的测试名称写入日志。这些示例说调用id()或_testMethodName(unittest.TestCase.id()),但在python 2.7中都不适合我。在python中,我不知道如何动态获取活动的unittest运行程序。

import unittest

def verify( expected, actual ):
    assert expected == actual, 'Failed: ' + str(unittest.TestCase.id())

# Reusable Test
def theTest( exp ):
    verify( exp, 'keith2' )

class SomeTests(unittest.TestCase):
        def test_one(self):
            theTest( 'keith' )

        def test_two(self):
            theTest( 'keith2')

if __name__ == '__main__':
    unittest.main( argv=sys.argv, testRunner = unittest.TextTestRunner(verbosity=2))