You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:06:23