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

안녕하세요!

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>"]
license = "MIT"

[tool.poetry.dependencies]
python = "^3.8"
pytest = "^8.3"
nox = "^2024.10.9"
tox = "^4.23.2"
</wallace.espindola>

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


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으로 문의하세요.
목록과 배열 사이의 선택은 큰 데이터 세트를 다루는 파이썬 응용 프로그램의 전반적인 성능에 어떤 영향을 미칩니 까?목록과 배열 사이의 선택은 큰 데이터 세트를 다루는 파이썬 응용 프로그램의 전반적인 성능에 어떤 영향을 미칩니 까?May 03, 2025 am 12:11 AM

forhandlinglargedatasetsinpython, usenumpyarraysforbetterperformance.1) numpyarraysarememory-effic andfasterfornumericaloperations.2) leveragevectorization foredtimecomplexity.4) managemoryusage withorfications data

Python의 목록 대 배열에 대한 메모리가 어떻게 할당되는지 설명하십시오.Python의 목록 대 배열에 대한 메모리가 어떻게 할당되는지 설명하십시오.May 03, 2025 am 12:10 AM

inpython, listsusedyammoryAllocation과 함께 할당하고, whilempyarraysallocatefixedMemory.1) listsAllocatemememorythanneedInitiality.

파이썬 어레이에서 요소의 데이터 유형을 어떻게 지정합니까?파이썬 어레이에서 요소의 데이터 유형을 어떻게 지정합니까?May 03, 2025 am 12:06 AM

Inpython, youcansspecthedatatypeyfelemeremodelerernspant.1) usenpynernrump.1) usenpynerp.dloatp.ploatm64, 포모 선례 전분자.

Numpy 란 무엇이며 Python의 수치 컴퓨팅에 중요한 이유는 무엇입니까?Numpy 란 무엇이며 Python의 수치 컴퓨팅에 중요한 이유는 무엇입니까?May 03, 2025 am 12:03 AM

numpyissentialfornumericalcomputinginpythonduetoitsspeed, memory-efficiency 및 comperniveMathematicaticaltions

'연속 메모리 할당'의 개념과 배열의 중요성에 대해 토론하십시오.'연속 메모리 할당'의 개념과 배열의 중요성에 대해 토론하십시오.May 03, 2025 am 12:01 AM

contiguousUousUousUlorAllocationScrucialForraysbecauseItAllowsOfficationAndFastElementAccess.1) ItenableSconstantTimeAccess, o (1), DuetodirectAddressCalculation.2) Itimprovesceeffiency theMultipleementFetchespercacheline.3) Itsimplififiesmomorym

파이썬 목록을 어떻게 슬라이스합니까?파이썬 목록을 어떻게 슬라이스합니까?May 02, 2025 am 12:14 AM

slicepaythonlistisdoneusingthesyntaxlist [start : step : step] .here'showitworks : 1) startistheindexofthefirstelementtoinclude.2) stopistheindexofthefirstelemement.3) stepisincrementbetwetweentractionsoftortionsoflists

Numpy Array에서 수행 할 수있는 일반적인 작업은 무엇입니까?Numpy Array에서 수행 할 수있는 일반적인 작업은 무엇입니까?May 02, 2025 am 12:09 AM

NumpyAllowsForVariousOperationsOnArrays : 1) BasicArithmeticLikeadDition, Subtraction, A 및 Division; 2) AdvancedOperationsSuchasmatrixmultiplication; 3) extrayintondsfordatamanipulation; 5) Ag

파이썬으로 데이터 분석에 어레이가 어떻게 사용됩니까?파이썬으로 데이터 분석에 어레이가 어떻게 사용됩니까?May 02, 2025 am 12:09 AM

Arraysinpython, 특히 Stroughnumpyandpandas, areestentialfordataanalysis, setingspeedandefficiency

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구