我希望将 Nose 用于在线集成测试套件。但是,其中一些测试的执行顺序很重要。
也就是说,我想我会折腾一个快速插件来按照我希望它执行的顺序来装饰测试:https ://gist.github.com/Redsz/5736166
def Foo(unittest.TestCase):
@step(number=1)
def test_foo(self):
pass
@step(number=2)
def test_boo(self):
pass
通过查看我认为的内置插件,我可以简单地loadTestsFromTestCase
通过修饰的“步骤号”覆盖和排序测试。:
def loadTestsFromTestCase(self, cls):
"""
Return tests in this test case class. Ordered by the step definitions.
"""
l = loader.TestLoader()
tmp = l.loadTestsFromTestCase(cls)
test_order = []
for test in tmp._tests:
order = test.test._testMethodName
func = getattr(cls, test.test._testMethodName)
if hasattr(func, 'number'):
order = getattr(func, 'number')
test_order.append((test, order))
test_order.sort(key=lambda tup: tup[1])
tmp._tests = (t[0] for t in test_order)
return tmp
此方法按我想要的顺序返回测试,但是当测试由鼻子执行时,它们不是按此顺序执行的吗?
也许我需要将这种订购概念转移到不同的位置?
更新:根据我的评论,该插件实际上按预期工作。我错误地相信了 pycharm 测试报告者。测试按预期运行。而不是删除我认为我会留下它的问题。