如何通过Django的load_tests()钩子设置doctest测试选项?
我刚好也碰到过这两个痛点,通过Django的load_tests()钩子完全可以搞定,给你一步步拆解:
核心解决方案:自定义load_tests()函数
在你目标Django应用的tests.py文件里,添加下面这段代码,就能同时启用你要的两个选项:
import doctest from django.test import TestLoader def load_tests(loader, tests, pattern): # 配置doctest的选项:启用ELLIPSIS + 首次失败即停止 doctest_options = doctest.ELLIPSIS | doctest.REPORT_ONLY_FIRST_FAILURE # 扫描指定文件中的doctest(可以按需调整扫描范围) doctest_suite = TestLoader().discover( '.', pattern='*.py', # 比如只扫utils.py就改成'utils.py',缩小扫描范围 loader_class=doctest.DocTestLoader, options=doctest_options, ) # 将doctest测试套件合并到Django的测试集合中 tests.addTests(doctest_suite) return tests
选项对应说明
doctest.REPORT_ONLY_FIRST_FAILURE:这就是你要的-x参数的等价配置,测试遇到第一个失败就会立刻停止,不用再跑后续用例,帮你快速定位首个问题。doctest.ELLIPSIS:对应+ELLIPSIS选项,默认启用后,你在doctest里写的...可以匹配任意中间内容,不用严格完全一致。
额外小技巧
如果你的doctest集中在某几个文件(比如工具类文件utils.py),把pattern改成具体文件名就能减少扫描时间,比如pattern='utils.py';要是有多个文件,也可以用通配符,比如pattern='*utils*.py'。
之后直接运行python manage.py test,Django就会自动加载这些doctest,并且应用你设置的所有选项啦~
内容的提问来源于stack exchange,提问作者iago-lito
相关产品推荐
相关产品推荐

