使用nosetests随机执行测试的顺序

3

我有一套测试,最近发现它们存在(错误的)顺序关系。它们都应该是独立的。

Nose似乎每次以相同的顺序运行测试,这本身不会发现这些依赖关系,除非“魔法”发生并且我成功地注入了某些东西来导致失败(这不是我编程的首选方法)。

我如何指示nose随机执行测试的顺序?

2个回答

3
没有内置的方法可以实现这个功能。我找了一下,发现有一个鼻子插件声称可以随机测试顺序:https://github.com/my8bird/nose-randomize。从源代码来看,它似乎只适用于继承自unittest.TestCase的测试。如果这对你不起作用,你肯定可以将其用作编写自己的代码的起点。
如果你只想暴露依赖关系,可以将测试列表传递给鼻子。懒惰的方法是获取测试列表,并逐个传递所有排列组合:
nosetests /path/to/testA.py /path/to/testB.py /path/to/testC.py
nosetests /path/to/testA.py /path/to/testC.py /path/to/testB.py
nosetests /path/to/testB.py /path/to/testA.py /path/to/testC.py
nosetests /path/to/testB.py /path/to/testC.py /path/to/testA.py
nosetests /path/to/testC.py /path/to/testA.py /path/to/testB.py
nosetests /path/to/testC.py /path/to/testB.py /path/to/testA.py

虽然可能需要整晚才能运行完,但至少你会知道问题出在哪里。

希望这可以帮助你开始。


1
无论如何,这种做法可能更好。如果您确实发现测试顺序依赖性,如果每次顺序不同,则将非常难以解决它们。我还建议检查--with-id选项;按测试ID排列可能比按完整测试描述符(路径:类:方法)排列更简单。 - dbn
我认为这个插件更好一些——它允许你设置一个种子,并且还会告诉你每次运行使用的种子。 - Matt

-1

您可以通过指定测试用例的完全限定路径和类名按顺序运行它们。

./nose <<testcasename>>:<<classname>>.testcase_name1 <<testcasename>>:<<classname>>.testcase_name2
        <<testcasename>>:<<classname>>.testcase_name4

将这些路径复制到bat.cfg文件中,并使用./nose -c bat.cfg运行


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接