Django允许从testrunner类添加自定义命令行选项。您可以创建默认testrunner类的子类并添加自己的选项,然后让Django使用您的自定义testrunner,如下所示。
例如,在您的Django项目目录中创建一个testrunner.py文件,其中包含以下内容:
from django.test.runner import DiscoverRunner
class TestRunner(DiscoverRunner):
def __init__(self, option=None, **kwargs):
super().__init__(**kwargs)
print("Passed option: {}".format(option))
@classmethod
def add_arguments(cls, parser):
DiscoverRunner.add_arguments(parser)
parser.add_argument('-o', '--option', help='Example option')
这是一个测试运行程序,它派生自默认的运行程序(因此它的工作方式与默认值相同),但它会告诉Django添加一个额外的命令行选项(在add_arguments()
类方法中),并在构造函数中处理这个额外选项的值。要使用这个新运行程序运行,请按以下方式传递它的名称:
./manage.py test --testrunner=testrunner.TestRunner -o foo
当然,您可以将此类放在任何其他位置,只要在命令行上传递完整的导入名称即可。
请注意,您必须使用
--testrunner=foo
,不能使用两个单独的参数(
--testrunner foo
),因为那样额外的参数不起作用。修复正在进行中:
https://github.com/django/django/pull/10307
此示例仅打印选项值,但您可能需要以某种方式将其传递给测试用例。我找不到有关如何将选项传递给unittest测试用例的快速信息,但是您可以使用全局(模块级)变量或类变量来实现这一点(这不太可重入和优雅,但很容易且有效)。
manage.py test myapp.mytestcase
一样单独调用它们。 - Martin B.testBasic
、testCrazy
等函数,并在每次提交时运行您需要的测试。我完全同意,在每次提交时运行一个大项目的整个测试套件可能会很烦人 - 这就是为什么您应该为每个提交创建一个新的测试,或者只选择与提交相关的测试。 - Martin B.