5

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

例如,我有一个名为的单元测试脚本Test_MyHardware,其中包含几个测试用例test_customHardware1test_customHardware2.

有没有办法用 Python 的 unittest 模块重复执行test_customHardware1200 次和500 次?test_customHardware2

注意:上述案例是简化的。实际上,我们将有 1000 个测试用例。

4

2 回答 2

2

虽然unittest 模块对此没有任何选择,但有几种方法可以实现这一点:

  • 您可以(ab)使用timeit 模块重复调用测试方法。请记住:测试方法就像普通方法一样,您可以自己调用它们。不需要特殊的魔法。
  • 您可以使用装饰器来实现此目的:

    #!/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()
    
于 2012-11-28T13:21:09.720 回答
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
于 2016-10-20T09:54:32.860 回答