1. 使用 unittest.TestLoader 自定义加载器:
你可以创建一个自定义的测试加载器,覆盖 loadTestsFromTestCase 方法,并在其中对测试类进行排序。
import unittest
from django.test import TestCase
class MyOrderedTests(TestCase):
def test_one(self):
self.assertEqual(1, 1)
def test_two(self):
self.assertEqual(2, 2)
class MyOrderedTests2(TestCase):
def test_three(self):
self.assertEqual(3, 3)
def test_four(self):
self.assertEqual(4, 4)
class OrderedTestLoader(unittest.TestLoader):
def getTestCaseNames(self, testCaseClass):
"""Override to return test case names in desired order."""
test_names = super().getTestCaseNames(testCaseClass)
return sorted(test_names)
class MyTestSuite(unittest.TestSuite):
"""Custom test suite that enforces order."""
def __init__(self):
loader = OrderedTestLoader()
tests = loader.loadTestsFromTestCase(MyOrderedTests)
self.addTests(tests)
tests = loader.loadTestsFromTestCase(MyOrderedTests2)
self.addTests(tests)
if __name__ == '__main__':
unittest.TextTestRunner().run(MyTestSuite())
在这个例子中,OrderedTestLoader 会按照测试方法名的字母顺序对测试方法进行排序。你可以自定义排序逻辑以满足你的需求。
2. 使用 django.test.runner.DiscoverRunner:
Django 提供了 django.test.runner.DiscoverRunner,它是 Django 默认的测试运行器。你可以自定义测试运行器,覆盖 get_test 方法来按顺序加载测试。
from django.test import TestCase, SimpleTestCase, override_settings
class OrderedDiscoverRunnerMixin:
def build_suite(self, test_labels, extra_tests=None, **kwargs):
suite = super().build_suite(test_labels, extra_tests, **kwargs)
return self.sort_suite(suite)
def sort_suite(self, suite):
ordered_suite = []
for test in suite:
if isinstance(test, SimpleTestCase):
ordered_suite.append(test)
return ordered_suite
@override_settings(TEST_RUNNER='path.to.YourCustomDiscoverRunner')
class MyOrderedTests(TestCase):
def test_one(self):
self.assertEqual(1, 1)
def test_two(self):
self.assertEqual(2, 2)
@override_settings(TEST_RUNNER='path.to.YourCustomDiscoverRunner')
class MyOrderedTests2(TestCase):
def test_three(self):
self.assertEqual(3, 3)
def test_four(self):
self.assertEqual(4, 4)
在这个例子中,你需要替换 'path.to.YourCustomDiscoverRunner' 为包含你的自定义排序逻辑的测试运行器。
这些方法允许你自定义测试的加载顺序。请注意,依赖于测试类的执行顺序可能是不推荐的,因为测试应该是独立和可重复的。如果可能,尽量编写独立的测试,以便它们可以在任何顺序下运行。
转载请注明出处:http://www.pingtaimeng.com/article/detail/7287/Django