안녕하세요!
Python 프로젝트가 있고 모든 버전의 Python에서 작동하는지 확인해야 합니까? 저를 믿으십시오. 그것은 엄청난 두통이 될 수 있습니다. 하지만 걱정하지 마세요. 제가 도와드리겠습니다. 이 가이드에서는 멋진 도구인 Tox, Nox 및 CI/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
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
간단하죠? 그대로 유지하자.
코드가 작동하는지 확인할 시간입니다. 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를 사용하고 있습니다. 한 번도 사용해 본 적이 없더라도 걱정하지 마세요. 매우 쉽게 집어들 수 있습니다.
그럼 이 프로젝트에 참여하는 모든 사람이 동일한 종속성을 사용하도록 하려면 어떻게 해야 할까요? 우리는 강력한 요구사항.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
다음 방법으로 기본 단위 테스트를 실행할 수 있습니다.
[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"
표준 단위 테스트 실행 출력이 표시됩니다.
Tox의 핵심은 자동화입니다. tox.ini는 다음과 같습니다.
poetry install
하나의 명령으로 Tox를 실행하세요:
poetry run pytest --verbose
그리고 붐! Tox는 나열된 모든 Python 버전에서 코드를 테스트합니다. 여기에서 출력 예를 확인하세요.
더 많은 제어를 원하시나요? 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
이제 로직을 추가하고, 환경을 건너뛰고, 필요한 모든 작업을 수행할 수 있는 완전한 유연성을 갖게 되었습니다. 여기에서 출력 예를 확인하세요.
현지 테스트를 중단하는 이유는 무엇입니까? 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 코드를 테스트하는 방법을 알게 되었습니다.
기억해야 할 사항은 다음과 같습니다.
이 프로젝트에서는 테스트 자동화를 위해 Tox, Nox, Poetry, Pytest를 사용합니다. 자세한 문서는 다음을 참조하세요.
독성 문서
녹스 문서
시 문서
Pytest 문서
전체 코드와 예제가 필요하십니까? GitHub의 저장소(tox-nox-python-tests)를 확인하세요.
다른 흥미로운 주제와 기술 토론을 보려면 내 LinkedIn 페이지를 확인하세요.
이제 밖으로 나가서 Python 프로젝트를 방탄으로 만드세요! ?
위 내용은 Poetry, Tox, Nox 및 CI/CD를 사용하여 전문가처럼 Python 코드 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!