小编典典

Python unittest:如何仅运行测试文件的一部分?

python

我有一个测试文件,其中包含花费大量时间的测试(它们将计算结果发送到集群并等待结果)。所有这些都在特定的TestCase类中。

由于它们需要时间,而且不太可能中断,因此我希望能够选择测试的该子集是否运行(最好的方法是使用命令行参数,即“ ./tests.py --offline”或其他内容)这样),因此我可以在需要的时候经常且快速地运行大多数测试,并偶尔进行整套测试。

现在,我只是unittest.main()用来开始测试。

谢谢。


阅读 237

收藏
2021-01-20

共1个答案

小编典典

默认值unittest.main()使用默认的测试加载程序从运行main的模块中制作出TestSuite。

您不必使用此默认行为。

例如,您可以制作三个unittest.TestSuite实例。

  1. “快速”子集。

    fast = TestSuite()
    

    fast.addTests( TestFastThis )
    fast.addTests( TestFastThat )

  2. “慢”子集。

    slow = TestSuite()
    

    slow.addTests( TestSlowAnother )
    slow.addTests( TestSlowSomeMore )

  3. “整个”设置。

    alltests = unittest.TestSuite([fast, slow])
    

请注意,我已经调整了TestCase名称以指示“快速”与“慢”。您可以将unittest.TestLoader子类化以解析类的名称并创建多个加载器。

然后,您的主程序可以使用optparseargparse(从2.7或3.2开始提供)来解析命令行参数,以选择要运行,快速,慢速或全部运行的套件。

或者,您可以信任这sys.argv[1]是三个值之一,并使用像这样简单的值

if __name__ == "__main__":
    suite = eval(sys.argv[1])  # Be careful with this line!
    unittest.TextTestRunner().run(suite)
2021-01-20