python unittest中的测试顺序

时间:2015-05-17 11:14:21

标签: python python-unittest unittest2

我正在查看类似的问题,但我无法找到问题的答案。

我在一个派生自unittest.TestCase

的python类中编写了测试
class TestEffortFormula(unittest.TestCase)

我需要对测试下订单(请告诉我我不应该依赖测试的订单,我只是这样做。)

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

unittest.main(testRunner=TeamcityTestRunner())

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

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

但是从这里我不知道如何运行测试,特别是testRunner=TeamcityTestRunner() 就像我之前做的那样。

感谢您的帮助

2 个答案:

答案 0 :(得分:5)

选项1。

对此的一个解决方案(作为解决方法)是given here - 这建议用编号方法step1step2等编写测试,然后通过{{收集和存储它们1}}并将它们生成一个dir(self)方法test_

不理想,但做到了你的期望。每个测试序列必须是一个TestClass(或者使那里给出的方法适应多个序列生成方法)。

选项2。

另一个解决方案,也是在链接问题中,您将测试命名为按字母顺序+数字排序,以便它们按此顺序执行。

但是在这两种情况下,都要编写单片测试,每个测试都在自己的测试类中。

P.S。我同意所有评论说单元测试不应该这样做;但有些情况下,单元测试框架(如trypytest)被用于进行集成测试,这需要模块化的独立步骤才能有用。此外,如果QA无法影响Dev编写模块化代码,则必须完成这些事情。

答案 1 :(得分:1)

我已经搜索了很长时间来自己解决这个问题 this question中的一个答案正是您所需要的。

应用于您的代码:

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不起作用,尽管documented这应该避免按字母顺序排序测试。