pre-commit配置:pytest-check失败仍可提交并指定测试文件
.pre-commit-config.yaml 配置修改方案
两个需求都可以通过单钩子配置项实现,不需要全局跳过pre-commit,也不影响其他钩子的原有拦截逻辑:
1. pytest执行失败不阻断提交
给pytest-check钩子单独添加fail: false参数即可。
该参数仅作用于当前钩子:钩子执行时会正常输出测试结果,如果测试失败只会打印错误提示,不会返回非零状态码阻断提交流程。其余没有配置该参数的钩子,仍然保持「校验失败即阻止提交」的默认规则,和原有逻辑完全一致。
2. 仅执行指定测试用例文件
修改pytest-check的entry配置,在pytest命令后追加需要执行的测试文件路径即可,支持同时指定多个文件,执行时不会再运行全量测试套件。
修改完成的完整配置参考
# 更多钩子规则可参考pre-commit官方说明 fail_fast: true repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.2.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - id: check-added-large-files - repo: local hooks: - id: isort name: isort entry: isort language: python types: [python] - repo: local hooks: - id: black name: black entry: black language: python types: [python] - repo: local hooks: - id: pytest-check name: pytest-check # 替换为实际需要执行的测试文件路径,多个文件用空格分隔 entry: pytest tests/test_demo1.py tests/test_demo2.py language: python pass_filenames: false always_run: false # 单独配置当前钩子失败不拦截提交 fail: false
效果说明
- 代码格式类钩子(isort、black、末尾空格检查、yaml格式校验等)如果校验不通过,仍然会直接终止提交流程,符合原有规则
- pytest执行时只会运行配置中指定的测试文件,不会扫描全量测试用例
- 即使指定的测试用例执行失败,提交也会正常完成,终端会同步打印测试失败详情方便后续修复,不会出现本地代码被拦截无法提交导致丢失的问题
内容的提问来源于stack exchange,提问作者Manoj Dhake
相关产品推荐
相关产品推荐

