继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Pre-commit 自动化测试项目实战入门教程

慕沐林林
关注TA
已关注
手记 218
粉丝 29
获赞 116
概述

本文介绍了如何在项目中引入和配置Pre-commit工具,通过自动化测试项目实战来提高代码质量和开发效率。文章详细讲解了Pre-commit的核心功能、作用与优势,并通过具体示例展示了如何安装和配置Pre-commit,以及如何结合Pre-commit进行代码规范检查。此外,还探讨了Pre-commit在团队协作中的应用和与CI/CD流水线的集成方法。关键词:pre-commit 自动化测试项目实战。

引入Pre-commit工具
Pre-commit简介

Pre-commit是一个用于在代码提交前执行一系列预定义检查的自动化工具。它可以帮助开发人员在代码提交之前自动执行代码格式化、代码风格检查、复杂度检查等任务,从而确保代码质量。

Pre-commit的核心功能包括:

  • 支持各种钩子,可以自定义在提交前执行的任务。
  • 支持多种语言和框架,如Python、JavaScript、Java等。
  • 可以与大部分版本控制系统如Git配合使用。
Pre-commit的作用与优势

作用

  1. 自动代码格式化:执行代码格式化工具,如Blackisort,以保持代码风格一致。
  2. 代码风格检查:通过Flake8等工具进行代码风格检查,确保代码符合项目规范。
  3. 复杂度检查:使用工具检查代码复杂度,确保代码可维护性。
  4. 自动化单元测试:自动运行单元测试,确保代码在提交前通过所有测试。

优势

  1. 提高代码质量:通过自动执行一系列检查,确保代码符合项目规范,提高代码质量。
  2. 减少人工干预:自动化执行代码检查任务,减少人工干预,提高开发效率。
  3. 团队协作:统一代码风格和规范,减少因代码风格差异引起的合并冲突。
  4. 及时反馈:在提交前即可获取代码检查结果,提高开发者的工作效率。
安装Pre-commit

安装Pre-commit工具有多种方式,最常见的是通过Python的pip工具安装。以下是安装指南:

  1. 安装Python环境:确保安装了Python环境。推荐使用Python 3.6或更高版本。
  2. 安装pip:如果尚未安装pip,可以通过官方文档安装。
  3. 安装Pre-commit:使用pip安装Pre-commit。
    pip install pre-commit
安装与配置Pre-commit

本部分介绍如何安装并配置仓库以支持Pre-commit。

安装指导

安装Pre-commit后,接下来需要配置仓库来支持Pre-commit。以下是安装步骤:

  1. 安装pre-commit工具。
  2. 在项目根目录下创建.pre-commit-config.yaml文件。
  3. .pre-commit-config.yaml文件中配置需要执行的钩子。
配置仓库以支持Pre-commit

在项目根目录下创建.pre-commit-config.yaml文件,配置需要执行的钩子。例如,以下是配置一个使用Python的项目示例:

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
  rev: v3.2.0
  hooks:
    - id: trailing-whitespace
    - id: end-of-file-whitespace
    - id: debug-statements
    - id: check-yaml
    - id: check-toml
    - id: check-docstring-first
    - id: check-added-large-files
    - id: check-merge-conflict
    - id: check-useless-else-after-return
    - id: check-yaml
    - id: check-toml
    - id: check-added-large-files
    - id: check-merge-conflict

  - repo: https://github.com/pycqa/flake8
  rev: v3.7.9
  hooks:
    - id: flake8
      additional_dependencies: [pycodestyle, pyflakes]
创建第一个Pre-commit钩子

创建一个简单的钩子来检查文件是否包含特定字符串。例如,创建一个钩子来检查文件是否包含TODO字符串。

  1. 创建钩子脚本:创建一个Python脚本来检查文件是否包含TODO字符串。

    # hook.py
    import sys
    
    def check_todo(file):
       with open(file, 'r') as f:
           content = f.read()
           if 'TODO' in content:
               print(f"Found TODO in {file}")
               return 1
           else:
               return 0
    
    if __name__ == '__main__':
       file = sys.argv[1]
       sys.exit(check_todo(file))
  2. 配置Pre-commit钩子:在.pre-commit-config.yaml中添加钩子配置。
    - repo: local
     hooks:
     - id: check-todo
       name: Check for TODO
       language: python
       entry: hook.py
       files: .*\.py$
常用钩子介绍与使用

本部分介绍常用钩子的使用方法,包括代码格式化、代码风格检查、复杂度检查等。

代码格式化工具集成(如Black、isort等)

Black

Black是一个用于Python代码自动格式化的工具,可以确保代码风格的一致性。

  1. 安装Black
    pip install black
  2. 配置Pre-commit
    - repo: https://github.com/psf/black
     rev: 21.6b0
     hooks:
     - id: black
       language_version: python3

isort

isort是一个用于Python代码导入排序的工具,可以自动整理导入声明。

  1. 安装isort
    pip install isort
  2. 配置Pre-commit
    - repo: https://github.com/PyCQA/isort
     rev: 5.8.0
     hooks:
     - id: isort
       language: python
代码风格检查工具集成(如Flake8等)

Flake8

Flake8是一个用于检查代码风格和错误的工具,可以检查代码是否符合PEP8规范。

  1. 安装Flake8
    pip install flake8
  2. 配置Pre-commit
    - repo: https://github.com/pycqa/flake8
     rev: 3.7.9
     hooks:
     - id: flake8
       language: python
代码复杂度检查

McCabe

McCabe是一个用于检查代码复杂度的工具,可以计算代码的圈复杂度。

  1. 安装McCabe
    pip install flake8-mccabe
  2. 配置Pre-commit
    - repo: https://github.com/pycqa/flake8
     rev: 3.7.9
     hooks:
     - id: flake8-mccabe
       language: python
       additional_dependencies: [flake8-mccabe]
实战演练

本部分将通过一个简单的自动化测试项目来介绍如何结合Pre-commit进行代码规范检查。

创建自动化测试项目

创建一个简单的Flask应用,并使用pytest进行单元测试。

  1. 安装Flask与pytest
    pip install Flask pytest
  2. 创建简单的Flask应用

    # app.py
    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
       return 'Hello, World!'
  3. 创建pytest测试文件

    # test_app.py
    from app import app
    
    def test_hello_world():
       with app.test_client() as client:
           response = client.get('/')
           assert response.status_code == 200
           assert response.data.decode('utf-8') == 'Hello, World!'
结合Pre-commit进行代码规范检查
  1. 安装并配置Pre-commit

    repos:
    - repo: https://github.com/psf/black
     rev: 21.6b0
     hooks:
     - id: black
       language_version: python3
    
    - repo: https://github.com/PyCQA/isort
     rev: 5.8.0
     hooks:
     - id: isort
       language: python
    
    - repo: https://github.com/pycqa/flake8
     rev: 3.7.9
     hooks:
     - id: flake8
       language: python
  2. 运行Pre-commit
    pre-commit run --all-files
解决实战过程中遇到的问题

在实战过程中,可能会遇到一些问题,比如钩子执行失败、依赖安装失败等。

问题:钩子执行失败

原因:可能存在代码不符合钩子检查标准的情况。

解决方案:根据钩子输出的错误信息,修改代码并重新运行Pre-commit。

问题:依赖安装失败

原因:可能是因为缺少某些依赖库。

解决方案:确保所有依赖库都已正确安装,并检查.pre-commit-config.yaml文件中的依赖配置。

Pre-commit在团队协作中的应用

本部分介绍如何在团队协作中推广和维护Pre-commit,以及如何与CI/CD流水线集成。

如何在团队中推广Pre-commit
  1. 向团队成员介绍Pre-commit:组织培训或会议,介绍Pre-commit的作用和优势。
  2. 设置团队规则:制定团队规范,确保所有成员都使用Pre-commit进行代码提交。
  3. 维护Pre-commit配置文件:定期更新.pre-commit-config.yaml文件,确保所有钩子都符合项目需求。
  4. 使用Git钩子:在仓库根目录下添加.git/hooks文件,确保所有提交都通过Pre-commit检查。
    # .git/hooks/pre-commit
    #!/bin/sh
    pre-commit run --all-files
Pre-commit配置文件的维护与更新
  1. 定期更新配置文件:根据项目需求,定期更新.pre-commit-config.yaml文件。

    repos:
    - repo: https://github.com/psf/black
     rev: 21.6b0
     hooks:
     - id: black
       language_version: python3
    
    - repo: https://github.com/PyCQA/isort
     rev: 5.8.0
     hooks:
     - id: isort
       language: python
    
    - repo: https://github.com/pycqa/flake8
     rev: 3.7.9
     hooks:
     - id: flake8
       language: python
  2. 使用Git钩子:在仓库根目录下添加.git/hooks/pre-commit文件,确保所有提交都通过Pre-commit检查。
    # .git/hooks/pre-commit
    #!/bin/sh
    pre-commit run --all-files
  3. 自动化更新配置文件:使用脚本或工具自动更新配置文件。
与CI/CD流水线集成
  1. 集成CI/CD流水线:在CI/CD流水线中添加Pre-commit步骤,确保所有提交都通过Pre-commit检查。
  2. 使用GitHub Actions:在.github/workflows/ci.yml文件中添加Pre-commit步骤。

    name: CI
    on: [push, pull_request]
    
    jobs:
     build:
       runs-on: ubuntu-latest
       steps:
       - uses: actions/checkout@v2
       - name: Set up Python
         uses: actions/setup-python@v2
         with:
           python-version: '3.8'
       - name: Install pre-commit
         run: pip install pre-commit
       - name: Run pre-commit
         run: pre-commit run --all-files

    通过以上步骤,可以在团队协作中推广和维护Pre-commit,并与CI/CD流水线集成,确保所有代码提交都符合项目规范,提高代码质量。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP