如何在unittest中自动生成测试用例编号?

时间:2019-10-05 06:50:16

标签: python python-unittest

如何在unittest中自动生成测试用例的数量?我的意思是类似test_01,test_02,test_ {generate number}。

import unittest 

class TestSum(unittest.TestCase): 
    def test_01_sum(self): 
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6") 

    def test_02_sum_tuple(self): 
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6") 

if name == '__main__': 
   unittest.main()

1 个答案:

答案 0 :(得分:2)

要在运行时实现此目的,您实际上可以为测试类重命名测试方法:

def generate_test_numbers(test_class):
    counter = 1
    for method_name in dir(test_class):
        if not method_name.startswith('test_N_'):
            continue
        method = getattr(test_class, method_name)
        if not callable(method):
            continue
        new_method_name = method_name.replace('_N_', '_{:02d}_'.format(counter))
        counter += 1
        setattr(test_class, new_method_name, method)
        delattr(test_class, method_name)
    return test_class

您可以直接从main调用此函数:

generate_test_numbers(TestSum)

或如@VPfB所建议的那样,将其用作类装饰器:

@generate_test_numbers
class TestSum(unittest.TestCase): 
    def test_N_sum(self): 
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6") 

    def test_N_sum_tuple(self): 
        self.assertEqual(sum((1, 2, 2)), 6, "Should be 6") 

任何一个都将输出(带有-v)

test_01_sum (__main__.TestSum) ... ok
test_02_sum_tuple (__main__.TestSum) ... FAIL

======================================================================
FAIL: test_02_sum_tuple (__main__.TestSum)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "q.py", line 8, in test_N_sum_tuple
    self.assertEqual(sum((1, 2, 2)), 6, "Should be 6")
AssertionError: 5 != 6 : Should be 6

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)