>백엔드 개발 >파이썬 튜토리얼 >Poetry, Tox, Nox 및 CI/CD를 사용하여 전문가처럼 Python 코드 테스트

Poetry, Tox, Nox 및 CI/CD를 사용하여 전문가처럼 Python 코드 테스트

Patricia Arquette
Patricia Arquette원래의
2025-01-07 07:07:40569검색

안녕하세요!

Python 프로젝트가 있고 모든 버전의 Python에서 작동하는지 확인해야 합니까? 저를 믿으십시오. 그것은 엄청난 두통이 될 수 있습니다. 하지만 걱정하지 마세요. 제가 도와드리겠습니다. 이 가이드에서는 멋진 도구인 Tox, NoxCI/CD를 사용하여 여러 Python 버전에서 코드를 테스트하는 방법을 보여 드리겠습니다.

그러면 어떨까요? 생각보다 쉽습니다.

이 글을 다 읽고 나면 Python 3.8부터 3.13까지 전문가처럼 테스트를 실행하게 될 것입니다. 우리는 모든 것을 단순하고, 재미있고, 완전히 실행 가능한 상태로 유지하겠습니다. 좋은가요? 뛰어들어 보세요.


다중 버전 테스트에 관심을 가져야 하는 이유는 무엇입니까?

이것을 생각해 보세요. 멋진 Python 코드를 작성하면 컴퓨터에서 작동합니다. 그런데, BAM! 사용자가 Python 3.9에서 작동하지 않는다는 이메일을 보냈습니다. 시도해 보면 확실히 뭔가 이상합니다.

왜요?

Python에는 이러한 모든 버전이 있고 각 버전에는 고유한 특징이 있기 때문입니다. 여러 버전에서 코드를 테스트하지 않으면 맹목적인 것입니다.

하지만 좋은 소식은 여러 Python 버전을 수동으로 설치하고 각각에 대해 테스트를 실행할 필요가 없다는 것입니다. 그곳에서 Tox와 Nox가 슈퍼 히어로처럼 습격합니다.


독소와 녹스는 무엇입니까?

분석해 보겠습니다.

  • Tox: 다양한 Python 환경에서 코드를 테스트하는 로봇이라고 생각하세요. 매우 체계적이며 간단한 tox.ini 파일의 지침을 따릅니다. Tox에게 무엇을 해야 할지 지시하면 Tox는 그대로 실행합니다.

  • 녹스: 톡스와 비슷하지만 어떤 면에서는 더 멋있습니다. 왜? 구성 파일 대신 Python 스크립트(noxfile.py)를 작성하게 되기 때문입니다. 사용자 정의 논리나 조건을 추가하고 싶으십니까? Nox가 여러분을 도와드립니다.

그럼 어느게 좋을까요? 솔직히 상황에 따라 다릅니다. 깔끔하고 간단한 것을 좋아한다면 Tox를 선택하세요. 창의적인 유형이고 유연성을 좋아한다면 Nox가 제격입니다.


멋진 것을 만들어 봅시다

특가는 다음과 같습니다.

두 가지 간단한 기능을 갖춘 미니 프로젝트를 만들어 보겠습니다.

  • 두 개의 숫자를 추가하세요.
  • 한 숫자에서 다른 숫자를 뺍니다.

작동하는지 확인하기 위해 몇 가지 테스트를 작성한 다음 Tox와 Nox를 사용하여 Python 버전 3.8부터 3.13까지 테스트하겠습니다.

재미있죠?

우리가 작업 중인 파일 구조는 다음과 같습니다.

tox-nox-python-test-automation/
├── tox_nox_python_test_automation/
│   ├── __init__.py
│   ├── main.py
│   └── calculator.py
├── tests/
│   ├── __init__.py
│   └── test_calculator.py
├── pyproject.toml
├── tox.ini
├── noxfile.py
├── README.md

1단계: 코드 작성

calculator.py는 다음과 같습니다.

def add(a, b):
    """Returns the sum of two numbers."""
    return a + b

def subtract(a, b):
    """Returns the difference of two numbers."""
    return a - b

간단하죠? 그대로 유지하자.


2단계: 일부 테스트 작성

코드가 작동하는지 확인할 시간입니다. test_calculator.py는 다음과 같습니다.

tox-nox-python-test-automation/
├── tox_nox_python_test_automation/
│   ├── __init__.py
│   ├── main.py
│   └── calculator.py
├── tests/
│   ├── __init__.py
│   └── test_calculator.py
├── pyproject.toml
├── tox.ini
├── noxfile.py
├── README.md

우리는 기본적으로 Python 테스트의 MVP인 테스트 도구인 pytest를 사용하고 있습니다. 한 번도 사용해 본 적이 없더라도 걱정하지 마세요. 매우 쉽게 집어들 수 있습니다.


3단계: 시를 사용하여 종속성 관리

그럼 이 프로젝트에 참여하는 모든 사람이 동일한 종속성을 사용하도록 하려면 어떻게 해야 할까요? 우리는 강력한 요구사항.txt 파일과 같은 Poetry를 사용합니다.

pyproject.toml은 다음과 같습니다.

def add(a, b):
    """Returns the sum of two numbers."""
    return a + b

def subtract(a, b):
    """Returns the difference of two numbers."""
    return a - b

모든 항목을 설치하려면 다음을 실행하세요.

import pytest
from tox_nox_python_test_automation.calculator import add, subtract

@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),
    (-1, 1, 0),
    (0, 0, 0),
])
def test_add(a, b, expected):
    assert add(a, b) == expected

@pytest.mark.parametrize("a, b, expected", [
    (5, 3, 2),
    (10, 5, 5),
    (-1, -1, 0),
])

def test_subtract(a, b, expected):
    assert subtract(a, b) == expected

4단계: Pytest로 단위 테스트 실행

다음 방법으로 기본 단위 테스트를 실행할 수 있습니다.

[tool.poetry]
name = "tox_nox_python_tests"
version = "0.1.0"
description = "Testing with multiple Python versions using Tox and Nox."
authors = ["Wallace Espindola <wallace.espindola@gmail.com>"]
license = "MIT"

[tool.poetry.dependencies]
python = "^3.8"
pytest = "^8.3"
nox = "^2024.10.9"
tox = "^4.23.2"

표준 단위 테스트 실행 출력이 표시됩니다.


5단계: Tox로 테스트

Tox의 핵심은 자동화입니다. tox.ini는 다음과 같습니다.

poetry install

하나의 명령으로 Tox를 실행하세요:

poetry run pytest --verbose

그리고 붐! Tox는 나열된 모든 Python 버전에서 코드를 테스트합니다. 여기에서 출력 예를 확인하세요.

Test Python Code Like a Pro with Poetry, Tox, Nox and CI/CD


6단계: Nox로 테스트

더 많은 제어를 원하시나요? Nox를 사용하면 창의력을 발휘할 수 있습니다. noxfile.py는 다음과 같습니다.

[tox]
envlist = py38, py39, py310, py311, py312, py313

[testenv]
allowlist_externals = poetry
commands_pre =
    poetry install --no-interaction --no-root
commands =
    poetry run pytest

다음을 사용하여 Nox를 실행하세요.

poetry run tox

이제 로직을 추가하고, 환경을 건너뛰고, 필요한 모든 작업을 수행할 수 있는 완전한 유연성을 갖게 되었습니다. 여기에서 출력 예를 확인하세요.

Test Python Code Like a Pro with Poetry, Tox, Nox and CI/CD


7단계: CI/CD를 사용하여 자동화

현지 테스트를 중단하는 이유는 무엇입니까? GitHub Actions 및 GitLab CI/CD에서 자동으로 실행되도록 설정해 보겠습니다.

GitHub 작업

워크플로 파일은 다음과 같습니다. .github/workflows/python-tests.yml:

import nox

@nox.session(python=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"])
def tests(session):
    session.install("poetry")
    session.run("poetry", "install", "--no-interaction", "--no-root")
    session.run("pytest")

GitLab CI/CD

여기 .gitlab-ci.yml이 있습니다:

poetry run nox

마무리하자

해냈어요! 이제 Tox, Nox 및 Poetry를 사용하여 여러 버전에서 Python 코드를 테스트하는 방법을 알게 되었습니다.

기억해야 할 사항은 다음과 같습니다.

  1. Tox는 간단하고 자동화된 테스트를 위한 최고의 솔루션입니다.
  2. Nox는 사용자 정의의 자유를 제공합니다.
  3. 시를 사용하면 의존성을 쉽게 관리할 수 있습니다.
  4. CI/CD는 테스트가 자동으로 실행되도록 보장합니다.

물론 참고자료

이 프로젝트에서는 테스트 자동화를 위해 Tox, Nox, Poetry, Pytest를 사용합니다. 자세한 문서는 다음을 참조하세요.

독성 문서
녹스 문서
시 문서
Pytest 문서


전체 코드와 예제가 필요하십니까? GitHub의 저장소(tox-nox-python-tests)를 확인하세요.

다른 흥미로운 주제와 기술 토론을 보려면 내 LinkedIn 페이지를 확인하세요.

이제 밖으로 나가서 Python 프로젝트를 방탄으로 만드세요! ?

위 내용은 Poetry, Tox, Nox 및 CI/CD를 사용하여 전문가처럼 Python 코드 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.