Django中如何指定起始测试用例?跳过已通过测试
解决Django测试从指定位置开始运行的技巧
针对你遇到的问题,这里有几个实用的技巧可以跳过已通过的测试,直接从上次失败的位置开始验证:
精准指定测试范围
每次修复完失败测试后,直接指定从该测试所在的类或模块开始运行。比如上次失败的是tests.test_checkout.CheckoutTests.test_free_shipping,先单独跑这个测试确认修复:python manage.py test tests.test_checkout.CheckoutTests.test_free_shipping确认通过后,再运行该测试类的剩余测试:
python manage.py test tests.test_checkout.CheckoutTests接着是整个模块,再逐步扩展到后续未验证的模块,完全跳过前面已经确认通过的部分。
排除已通过的测试模块
用Django测试的--exclude参数直接跳过已经验证通过的模块或目录。比如已经确认tests.test_users和tests.test_products全部通过,就可以这样运行:python manage.py test --exclude=tests.test_users --exclude=tests.test_products --failfast这样只会运行剩下的未验证测试,节省大量等待时间。
给测试打标签并排除已通过项
给已经通过的测试类或方法添加自定义标签,比如在测试代码里加上:from django.test import tag @tag('passed') class UserCreationTests(TestCase): # 已通过的测试方法之后运行测试时排除这个标签,只跑未标记的测试:
python manage.py test --exclude-tag passed --failfast这个方法适合长期维护测试集,每次验证通过的测试都打上标签,逐步缩小需要运行的范围。
换用pytest工具(可选)
如果愿意切换测试工具,pytest对Django的支持很完善,而且自带更灵活的测试选择功能:- 只跑上次失败的测试:
pytest --last-failed -x - 先跑失败测试再跑其他:
pytest --failed-first -x
还能精准指定测试路径,完全满足从指定位置开始运行的需求。
- 只跑上次失败的测试:
另外,记得搭配--keepdb参数,避免每次运行测试都重新创建数据库,能大幅减少初始化时间,进一步提升效率:
python manage.py test --keepdb --exclude=tests.test_users --failfast
内容的提问来源于stack exchange,提问作者hepcat72
相关产品推荐
相关产品推荐

