Python unittest:我们可以重复单元测试用例执行可配置的次数吗?

时间:2012-11-28 13:01:41

标签: python unit-testing

我们可以重复单元测试用例执行可配置的次数吗?

例如,我有一个名为“Test_MyHardware”的单元测试脚本,其中包含几个测试用例test_customHardware1和test_customHardware2。

现在如果我想重复执行test_customHardware1 200次和test_customHardware2 500次,是否有一个在Python unittest模块中实现相同的目标?

注意:上面提到的案例是简化的。在实践中,我们将有1000个测试用例。

2 个答案:

答案 0 :(得分:2)

更好的选择是使用unittest.main()多次致电exit=False。此示例将重复次数作为参数并调用unittest.main次数:

parser = argparse.ArgumentParser()
parser.add_argument("-r", "--repeat", dest="repeat", help="repeat tests")
(args, unitargs) = parser.parse_known_args()
unitargs.insert(0, "placeholder") # unittest ignores first arg
# add more arguments to unitargs here
repeat = vars(args)["repeat"]
if repeat == None:
    repeat = 1
else:
    repeat = int(repeat)
for iteration in range(repeat):
    wasSuccessful = unittest.main(exit=False, argv=unitargs).result.wasSuccessful()
    if not wasSuccessful:
        sys.exit(1)

这允许更大的灵活性,因为它将运行用户请求指定次数的所有测试。

您需要导入:

import unittest
import argparse

答案 1 :(得分:1)

虽然unittest module没有选项,但有几种方法可以做到这一点:

  • 您可以(ab)使用timeit module重复调用测试方法。请记住:测试方法就像普通方法一样,您可以自己调用它们。没有特别的魔力。
  • 您可以使用decorators来实现此目的:

    #!/usr/bin/env python
    
    import unittest
    
    def repeat(times):
        def repeatHelper(f):
            def callHelper(*args):
                for i in range(0, times):
                    f(*args)
    
            return callHelper
    
        return repeatHelper
    
    
    class SomeTests(unittest.TestCase):
        @repeat(10)
        def test_me(self):
            print "You will see me 10 times"
    
    if __name__ == '__main__':
        unittest.main()