如何排序python unittest发现测试?

Did*_*set 5 python unit-testing multiplatform python-unittest

我使用Python unittest格式创建了一堆Python测试.

现在我可以运行它们了

python -m unittest discover -s TestDirectory -p '*.py' -v
Run Code Online (Sandbox Code Playgroud)

我找到了所有,然后运行它们.

现在,无论是在Windows上还是在Linux上运行测试,都会有细微差别.实际上,在Windows上,测试按字母顺序运行,而在Linux上,测试运行时没有明显的人类特定的可发现顺序,即使总是相同.

麻烦的是我依靠测试文件的前两个字母来排序测试的执行顺序.并不是说它们必须以特定的顺序运行,而是要进行某种信息测试,在其输出中显示版本数据首先出现在测试运行日志中.

在Linux上,我是否可以按字母顺序运行测试?

tst*_*077 0

我还没有尝试过这个,但我想你可以做的一件事是重写 TestSuite 类以添加排序函数。然后你可以在调用unittest run函数之前调用sort函数。因此,在“AllTests.py”脚本中,您可以添加如下内容:

class SortableSuite(unittest.TestSuite):
    def sort(self):
        self._tests.sort(cmp=lambda x,y: x._testMethodName < y._testMethodName)
    def run(self,testResult):
        #or if you don't want to run a sort() function, you can override the run
        #function to automatically sort.
        self._tests.sort(cmp=lambda x,y: x._testMethodName < y._testMethodName)
        return unittest.TestSuite.run(self,testResult)

loader = unittest.TestLoader()
loader.suiteClass = SortableSuite
suite = loader.loadTestFromTestCases(collectedTests)
suite.sort()
suite.run(defaultTestResult())
Run Code Online (Sandbox Code Playgroud)