我在看类似的问题,我找不到我的问题的答案。
我在一个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 .选项
另一个解决方案,也在链接的问题中,是你命名你的测试按字母顺序+数字排序,这样它们就会按这个顺序执行。
但是在这两种情况下,都应该编写整体测试,每个测试都在自己的测试类中。
注:我同意所有关于单元测试不应该这样做的评论;但在某些情况下,单元测试框架(如unittest
和pytest
)被用来做集成测试,这些测试需要模块化独立的步骤才能发挥作用。此外,如果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
不起作用,尽管文档中说明这应该避免按字母顺序对测试进行排序。