python unittest中测试的顺序



我在看类似的问题,我找不到我的问题的答案。

我在一个python类中编写了测试,该类派生自unittest。TestCase

class TestEffortFormula(unittest.TestCase)

我需要给测试一个命令(请让而不是告诉我我不应该依赖测试的命令,我只是这样做)。

在我需要命令测试之前,我用来运行测试的命令是:

unittest.main(testRunner=TeamcityTestRunner())

然后我想让订单消失,所以我尝试了以下操作:

loader = unittest.TestLoader()
loader.sortTestMethodsUsing(None)
loader.loadTestsFromTestCase(TestEffortFormula)
suite = loader.suiteClass()

但从这里我不知道如何运行测试,特别是与testRunner=TeamcityTestRunner()

感谢您的帮助

选项1

这里给出了一种解决方案(作为变通方法)-建议以编号方法step1, step2等编写测试,然后通过dir(self)收集和存储它们,并将它们生成一个test_方法,try每个方法。

不理想,但能达到你的期望。每个测试序列必须是一个单独的TestClass(或者调整那里给出的方法,使其具有多个序列生成方法)。

2 .

选项

另一个解决方案,也在链接的问题中,是你命名你的测试按字母顺序+数字排序,这样它们就会按这个顺序执行。

但是在这两种情况下,都应该编写整体测试,每个测试都在自己的测试类中。

注:我同意所有关于单元测试不应该这样做的评论;但在某些情况下,单元测试框架(如unittestpytest)被用来做集成测试,这些测试需要模块化独立的步骤才能发挥作用。此外,如果QA不能影响Dev编写模块化代码,那么这些事情就必须完成。

为了自己解决这个问题,我已经寻找了很长时间。
这个问题的一个答案正是你所需要的。

应用于你的代码:

ln = lambda f: getattr(TestEffortFormula, f).im_func.func_code.co_firstlineno
lncmp = lambda _, a, b: cmp(ln(a), ln(b))
unittest.TestLoader.sortTestMethodsUsing = lncmp
suite = unittest.TestLoader().loadTestsFromTestCase(TestEffortFormula)
unittest.TextTestRunner(failfast=True).run(suite)

不幸的是,设置unittest.TestLoader.sortTestMethodsUsing=None不起作用,尽管文档中说明这应该避免按字母顺序对测试进行排序。

最新更新