>백엔드 개발 >파이썬 튜토리얼 >UnitTest 및 Pytest를 사용한 Python 장치 테스트 안내서

UnitTest 및 Pytest를 사용한 Python 장치 테스트 안내서

William Shakespeare
William Shakespeare원래의
2025-02-19 08:57:13818검색

A Guide to Python Unit Testing with unittest and pytest 이 기사는 소프트웨어 테스트의 중요성과 그에주의를 기울여야하는 이유를 살펴 봅니다. 우리는 단위 테스트를 설계하는 방법과 파이썬 단위 테스트를 작성하는 방법을 배웁니다. 특히 Python에서 가장 일반적으로 사용되는 단위 테스트 프레임 워크 인 Unittest 및 Pytest 두 가지를 탐색 할 것입니다.

키 포인트

단위 테스트는 소프트웨어 개발의 중요한 부분으로, 개발자가 프로그램의 특정 구성 요소 또는 단위를 테스트하여 예상대로 실행되도록합니다. Python의 인기있는 장치 테스트 프레임 워크에는 UnitTest 및 Pytest가 포함됩니다. 잘 설계된 단위 테스트는 빠르고 독립적이며 반복 가능하며 신뢰할 수 있으며 잘 알려져 있어야합니다. “준비, 실행, 어설 션 (AAA)”모드는 종종 단위 테스트, 설정, 실행 및 검증을 구성하는 데 사용됩니다. 단위 테스트 프레임 워크는 Python Standard Library의 일부이며 Java의 장치 테스트 프레임 워크 인 Junit에서 영감을 얻었습니다. 특수 어설 션 방법을 사용하고 테스트를 UnitTest.testcase 클래스에서 상속받은 클래스의 메소드로 작성해야합니다.

Pytest 프레임 워크를 사용하면 코드가 적은 복잡한 테스트를 허용하고 유닛 테스트 테스트 스위트를 지원하며 800 개가 넘는 외부 플러그인을 제공합니다. UnitTest와 달리 Pytest는 일반적인 Python Assertion Methods를 사용하여 더 단순하고 직관적입니다.
    단위 테스트에는 많은 장점이 있지만 테스트는 결함의 존재만을 입증 할 수 있지만 결함이없는 것은 아닙니다. 모든 테스트가 통과 되더라도 소프트웨어 시스템에 오류가 없음을 증명할 수는 없습니다.
  • 소프트웨어 테스트 소개
  • 소프트웨어 테스트는 소프트웨어 제품의 동작을 확인하여 사양을 준수하는지 평가하고 확인하는 프로세스입니다. 소프트웨어 제품에는 수천 개의 코드 라인과 함께 작동하는 수백 개의 구성 요소가 포함될 수 있습니다. 코드 줄이 제대로 작동하지 않으면 오류가 전파되어 다른 오류가 발생할 수 있습니다. 따라서 프로그램이 예상대로 실행되도록하려면 테스트해야합니다.
  • 현대 소프트웨어는 상당히 복잡 할 수 있기 때문에 정확성의 여러 측면을 평가하기위한 여러 수준의 테스트가 있습니다. ISTQB 인증 테스트 기본 수준 강의 계획서에 따르면 4 가지 수준의 소프트웨어 테스트가 있습니다.
  • 단위 테스트 : 테스트 특정 코드 라인 <:> 통합 테스트 : 여러 장치 간의 테스트 통합
  • 시스템 테스트 : 전체 시스템을 테스트하십시오 <:> 수락 테스트 : 비즈니스 목표를 충족하는지 확인
  • 이 기사에서는 단위 테스트에 대해 논의 할 것이지만, 들어가기 전에 소프트웨어 테스트에서 중요한 원칙을 소개하고 싶습니다.
테스트는 결함의 존재 만 증명할 수 있지만 결함이 없음을 증명할 수는 없습니다.

- istqb ctfl syllabus 2018

다시 말해서, 실행하는 모든 테스트에 실패가 표시되지 않더라도 소프트웨어 시스템에 오류가 없거나 다른 테스트 케이스가 소프트웨어 동작에서 결함을 찾지 못한다는 것을 증명하지 않습니다.

단위 테스트 란 무엇입니까?

이것은 구성 요소 테스트라고도하는 첫 번째 테스트 레벨입니다. 이 섹션에서는 단일 소프트웨어 구성 요소가 테스트됩니다. 프로그래밍 언어에 따라 소프트웨어 단위는 클래스, 함수 또는 메소드 일 수 있습니다. 예를 들어, 다중 및 분열 방법을 포함하는 ArithmeticOperations라는 Java 클래스가있는 경우 ArithmeticOperations 클래스의 단위 테스트는 곱하기의 올바른 동작을 테스트하고 나누기 방법을 테스트해야합니다.

단위 테스트는 일반적으로 소프트웨어 테스터가 수행합니다. 단위 테스트를 실행하려면 소스 코드 자체가 테스트중인 객체이므로 소프트웨어 테스터 (또는 개발자)는 소스 코드에 액세스해야합니다. 따라서 소스 코드를 직접 테스트하는이 소프트웨어 테스트 방법을 화이트 박스 테스트라고합니다.

소프트웨어 테스트에 대해 왜 걱정 해야하는지, 그만한 가치가 있는지 궁금 할 것입니다. 다음 섹션에서는 테스트 소프트웨어 시스템의 동기를 분석합니다.

왜 단위 테스트를 수행 해야하는지 소프트웨어 테스트의 주요 장점은 소프트웨어의 품질을 향상 시킨다는 것입니다. 소프트웨어 품질은 특히 소프트웨어가 일상 활동에서 모든 종류의 물건을 처리하는 세계에서 중요합니다. 소프트웨어 품질을 향상시키는 것은 여전히 ​​지나치게 모호한 목표입니다. 우리가 소프트웨어의 품질이라고 부르는 것을 더 잘 설명해 보겠습니다. ISO/IEC 표준 9126-1 ISO 9126에 따르면 소프트웨어 품질은 다음과 같은 요인을 포함합니다.

신뢰성

기능적

효율성

가용성

유지 가능성 테스트 전략을 계획하기 전에 답변해야 할 중요한 질문이 있습니다. 소프트웨어 시스템의 어떤 부분을 테스트하고 싶습니까?

이것은 철저한 테스트가 불가능하기 때문에 핵심 문제입니다. 따라서 가능한 모든 입력 및 출력을 테스트 할 수는 없지만 관련된 위험에 따라 테스트의 우선 순위를 정해야합니다.

테스트 범위를 정의 할 때 여러 가지 요소를 고려해야합니다.

위험 : 오류 가이 구성 요소에 영향을 미치는 경우 어떤 비즈니스 결과가 발생합니까?

시간 : 소프트웨어 제품이 얼마나 오래 준비되기를 원하십니까? 마감일이 있습니까?

예산 : 테스트 활동에 얼마나 많은 돈을 투자 하시겠습니까?
  • 테스트 범위를 정의한 후 (테스트 해야하는 내용과 테스트하지 말아야 할 사항을 지정) 좋은 단위 테스트가 필요한 기능을 논의 할 수 있습니다.
  • 단위 테스트의 특징
  • 빠른. 단위 테스트는 주로 자동으로 수행되므로 빠르게 수행해야합니다. 느린 단위 테스트는 즉각적인 피드백을 제공하지 않기 때문에 개발자가 건너 뛸 가능성이 높습니다.
  • 독립. 단위 테스트는 정의에 따라 독립적입니다. 개별 코드 단위를 테스트하고 외부 요인 (예 : 파일 또는 네트워크 리소스)에 의존하지 않습니다.

반복 가능. 단위 테스트는 반복적으로 실행되며 결과는 시간이 지남에 따라 일관성이 있어야합니다.

신뢰할 수 있습니다. 테스트중인 시스템에 오류가있는 경우에만 단위 테스트는 실패합니다. 환경이나 테스트가 실행되는 순서는 중요하지 않아야합니다.

<.> 올바르게 명명되었습니다. 테스트 이름은 테스트 자체에 대한 관련 정보를 제공해야합니다.
  • 파이썬에서 단위 테스트를 탐구하기 전에 단계가 누락되었습니다. 테스트를 어떻게 정리하여 깨끗하고 읽을 수 있도록 테스트를 구성합니까? 우리는 준비, 실행 및 어설 션 (AAA)이라는 패턴을 사용합니다.
  • AAA 모드 준비, 실행 및 어설 션 (AAA) 패턴은 단위 테스트를 작성하고 구성하는 일반적인 전략입니다. 다음과 같이 작동합니다
  • 준비 단계에서 테스트에 필요한 모든 객체와 변수를 설정하십시오.
  • 다음으로 실행 단계에서 테스트 할 기능/방법/클래스가 호출됩니다.
  • 마지막으로, 어설 션 단계에서 테스트 결과를 확인합니다.
  • 이 전략은 테스트의 모든 주요 부분 (설정, 실행 및 검증)을 분리하여 단위 테스트를 구성하는 깨끗한 방법을 제공합니다. 또한 단위 테스트는 모두 동일한 구조를 따르기 때문에 읽기가 더 쉽습니다.
  • Python에서의 단위 테스트 : UnitTest 또는 Pytest?
  • 이제 우리는 파이썬에서 두 가지 다른 단위 테스트 프레임 워크에 대해 논의 할 것입니다. 이 두 프레임 워크는 UnitTest와 Pytest입니다.
  • 단위 테스트 소개 Python Standard Library에는 Unittest Unit Testing Framework가 포함되어 있습니다. 이 프레임 워크는 Java의 단위 테스트 프레임 워크 인 Junit에서 영감을 얻었습니다.
공식 문서에 명시된 바와 같이, UnitTest는이 게시물에서 언급 할 몇 가지 중요한 개념을 지원합니다.

테스트 케이스, 이것은 단일 테스트 단위

입니다. 테스트 스위트, 이것은 함께 실행 된 일련의 테스트 사례입니다 모든 테스트 사례의 실행 및 결과를 처리하는 구성 요소 인 테스트 러너

UnitTest에는 고유 한 글쓰기 테스트 방법이 있습니다. 특히, 우리는 필요합니다 :

    unittest.testcase class에서 수업 상속 방법으로 테스트를 작성하십시오. 특수 어설 션 방법 를 사용하십시오
  1. UnitTest가 이미 설치되었으므로 첫 번째 단위 테스트를 작성할 준비가되었습니다!
  2. unittest 를 사용한 단위 테스트 작성 BankAccount 클래스가 있다고 가정 해 봅시다
  3. 우리는 가용 예금 금액을 초과하는 돈을 인출 할 수 없으므로 소스 코드 가이 상황을 올바르게 처리하는지 테스트 해 봅시다.
  4. 동일한 Python 파일에서 다음 코드를 추가 할 수 있습니다.

우리는 unittest.testcase의 서브 클래스 인 testbankoperations라는 클래스를 만들고 있습니다. 이런 식으로, 우리는 새로운 테스트 사례를 만들고 있습니다.

이 클래스에서는 메소드가 테스트로 시작하는 단일 테스트 기능을 정의합니다. 모든 테스트 방법은 단어 테스트로 시작해야하기 때문에 중요합니다.

우리는이 테스트 방법이 False를 반환 할 것으로 예상합니다. 즉, 작업이 실패했습니다. 결과를 주장하기 위해 AssertFalse ()라는 특수 어설 션 방법을 사용합니다.

우리는 테스트를 수행 할 준비가되었습니다. 명령 줄 에서이 명령을 실행합시다

<.> 여기, example.py는 모든 소스 코드를 포함하는 파일의 이름입니다. 출력은 다음과 같아야합니다

아주 좋아요! 이것은 우리의 테스트가 성공했다는 것을 의미합니다. 이제 실패가있을 때 출력이 어떻게 보이는지 봅시다. 우리는 이전 클래스에 새로운 테스트를 추가합니다. 부정적인 금액을 입금하려고 노력합시다. 코드 가이 상황을 처리할까요?
<code class="language-python">import unittest

class BankAccount:
  def __init__(self, id):
    self.id = id
    self.balance = 0

  def withdraw(self, amount):
    if self.balance >= amount:
      self.balance -= amount
      return True
    return False

  def deposit(self, amount):
    self.balance += amount
    return True</code>
이것은 우리의 새로운 테스트 방법입니다 :

우리는 -v 플래그를 사용하여 세부적인 단위 테스트 모드를 사용 하여이 테스트를 수행 할 수 있습니다.

출력은 지금 다릅니다

이 경우 세부 로고는 더 많은 정보를 제공합니다. 우리는 test_negative_deposit가 실패한다는 것을 알고 있습니다. 특히, AssertionError는 예상 결과가 거짓이어야하지만 true는 거짓이 아니라고 말하면 메소드가 true를 반환한다는 것을 의미합니다.

단위 테스트 프레임 워크는 우리의 요구에 따라 다른 어설 션 방법을 제공합니다.
<code class="language-python">class TestBankOperations(unittest.TestCase):
    def test_insufficient_deposit(self):
      # Arrange
      a = BankAccount(1)
      a.deposit(100)
      # Act
      outcome = a.withdraw(200)
      # Assert
      self.assertFalse(outcome)</code>
Assertequal (x, y), x == y가 true인지 테스트하십시오
AsserTraises (Exception_type), 특정 예외가 올라 갔는지 확인하십시오 assertisnone (x), x가 없음 인지 테스트하십시오 assertin (x, y), x가 y 이제 UnitTest 프레임 워크를 사용하여 단위 테스트를 작성하는 방법에 대한 기본적인 이해를 얻었으므로 Pytest라는 다른 Python 프레임 워크를 살펴 보겠습니다.

Pytest 소개 Pytest 프레임 워크는 몇 가지 관련 기능이있는 파이썬 장치 테스트 프레임 워크입니다.

코드가 적은 복잡한 테스트를 허용합니다 는 UnitTest Test Suite 를 지원합니다 800 개가 넘는 외부 플러그인

를 제공합니다

Pytest가 기본적으로 설치되지 않으므로 먼저 설치해야합니다. Pytest에는 Python 3.7이 필요합니다.

pytest 를 설치하십시오 Pytest를 설치하는 것은 매우 쉽습니다. 다음 명령 만 실행하면됩니다

<code class="language-python">import unittest

class BankAccount:
  def __init__(self, id):
    self.id = id
    self.balance = 0

  def withdraw(self, amount):
    if self.balance >= amount:
      self.balance -= amount
      return True
    return False

  def deposit(self, amount):
    self.balance += amount
    return True</code>
그런 다음 입력하여 모든 것이 올바르게 설치되어 있는지 확인하십시오.

출력은 다음과 같아야합니다

<code class="language-python">class TestBankOperations(unittest.TestCase):
    def test_insufficient_deposit(self):
      # Arrange
      a = BankAccount(1)
      a.deposit(100)
      # Act
      outcome = a.withdraw(200)
      # Assert
      self.assertFalse(outcome)</code>
아주 좋아요! Pytest를 사용하여 첫 번째 테스트를 작성해 봅시다.

Pytest를 사용한 단위 테스트 작성 우리는 이전에 쓴 BankAccount 클래스를 사용하고 이전과 동일한 방법을 테스트 할 것입니다. 이러한 방식 으로이 두 프레임 워크를 사용하여 테스트를 작성하는 데 필요한 노력을 비교하는 것이 더 쉽습니다.

테스트를 위해 pytest를 사용하려면 다음과 같습니다
<code class="language-bash">python -m unittest example.py</code>
디렉토리를 만들고 테스트 파일을 넣습니다.

테스트를 Test_로 시작하거나 _test.py로 끝나는 파일로 테스트를 작성합니다. Pytest는 현재 디렉토리 및 해당 하위 디렉토리에서 이러한 파일을 찾습니다.

따라서 Test_Bank.py라는 파일을 작성하여 폴더에 넣습니다. 이것이 첫 번째 테스트 기능의 모습입니다 :

알다시피, UnitTest 버전과 비교하여 유일한 변경 사항은 Assert Part입니다. 여기서 우리는 정상적인 파이썬 어제 방법을 사용합니다.

이제 우리는 test_bank.py 파일을 살펴볼 수 있습니다 :

이 테스트를 실행하려면 test_bank.py 파일이 포함 된 폴더에서 명령 프롬프트를 열어 보겠습니다. 그런 다음 다음 명령을 실행하십시오
    출력은 다음과 같이 보일 것입니다
  • 이 경우 테스트를 작성하고 실행하는 것이 얼마나 쉬운 지 알 수 있습니다. 또한 UnitTest보다 코드가 적습니다. 테스트 결과도 이해하기 쉽습니다.
  • 실패한 테스트를 계속 살펴 보겠습니다!
  • 우리는 이전에 쓴 두 번째 방법을 사용합니다.이 방법은 test_negative_deposit라고합니다. 우리는 Assert 부분을 리팩터링하고 결과는 다음과 같습니다.
우리는 이전과 같이 테스트를 실행합니다. 출력이어야합니다.

출력을 구문 분석하여 수집 된 2 개의 항목을 읽을 수 있습니다. 이는 두 가지 테스트가 수행되었음을 의미합니다. 아래로 스크롤하면 test_negative_deposit 메소드를 테스트하는 동안 오류가 발생한 것을 볼 수 있습니다. 특히, 주장을 평가할 때 오류가 발생합니다. 또한 보고서는 또한 결과 변수의 값이 True라고 말하며, 이는 예금 방법에 오류가 포함되어 있음을 의미합니다.

Pytest는 기본 Python Assertion 키워드를 사용하므로 예상 결과를 저장하는 다른 변수와 비교할 수 있습니다. 이 모든 것은 특별한 주장 방법이 필요하지 않습니다.
<code>.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK</code>
결론

이 기사에서는 소프트웨어 테스트의 기본 사항을 소개합니다. 소프트웨어 테스트가 중요한 이유와 모든 사람이 자신의 코드를 테스트 해야하는 이유를 발견했습니다. 우리는 단위 테스트와 파이썬에서 간단한 단위 테스트를 설계하고 구현하는 방법에 대해 논의합니다.

우리는 UnitTest와 Pytest라는 두 개의 파이썬 프레임 워크를 사용합니다. 둘 다 유용한 기능을 가지고 있으며 파이썬 장치 테스트에서 가장 일반적으로 사용되는 프레임 워크 중 하나입니다.

마지막으로, 우리는 두 가지 기본 테스트 사례를보고 준비, 실행 및 어설 션 패턴에서 테스트를 작성하는 방법에 대한 아이디어를 제공합니다.
<code class="language-python">  def test_negative_deposit(self):
    # Arrange
    a = BankAccount(1)
    # Act
    outcome = a.deposit(-100)
    # Assert
    self.assertFalse(outcome)</code>
소프트웨어 테스트의 중요성을 확신시키기를 바랍니다. 추가 노력이 그만한 가치가 있기 때문에 UnitTest 또는 Pytest와 같은 프레임 워크를 선택하고 테스트를 시작하십시오!

이 기사를 좋아한다면 다음과 같은 유용한 것을 찾을 수도 있습니다.

사이프러스 테스트 : 웹 응용 프로그램 실행에 대한 안내서 JEST로 반응 구성 요소를 테스트하는 방법 인형극 로 엔드 투 엔드 테스트를 배우십시오 핸즈프리를 지속적으로 테스트하는 3 가지 방법

재 도입 Jenkins : 자동 테스트 에 파이프를 사용하십시오

Python 장치 테스트에 대한 faqs
  • 파이썬에서 단위 테스트는 무엇입니까? Python의 단위 테스트는 프로그램의 단일 장치 또는 구성 요소가 분리되어 각 장치가 예상대로 작동하도록 테스트되는 소프트웨어 테스트 기술입니다.
  • 파이썬 개발에서 단위 테스트가 중요한 이유는 무엇입니까? 단위 테스트는 Python 프로그램에서 개별 구성 요소의 정확성을 보장하는 데 도움이됩니다. 오류를 조기에 감지하고 코드 변경을위한 안전한 그물을 제공하며 코드의 유지 관리 가능성을 지원합니다.
  • 파이썬에서 단위 테스트를 작성하는 방법은 무엇입니까? 파이썬의 단위 테스트는 종종 내장 유닛 테스트 모듈을 사용하여 작성됩니다. UnitTest.testcase에서 상속 된 테스트 클래스를 작성 하고이 클래스에서 테스트 방법을 작성합니다. 테스트 방법은 일반적으로 "테스트"로 시작합니다.
  • UnitTest 외에 Python 장치 테스트에 어떤 다른 프레임 워크를 사용할 수 있습니까? 예, UnitTest 외에 Pytest 및 Nose2와 같은 다른 인기있는 Python 테스트 프레임 워크가 있습니다. 이러한 프레임 워크는 다양한 기능과 구문을 제공하므로 개발자는 자신의 요구에 가장 적합한 것을 선택할 수 있습니다.
  • 파이썬 장치 테스트에서 고정물의 역할은 무엇입니까? 고정물은 파이썬에서 전제 조건을 설정하고 테스트 후 청소하는 방법입니다. 그들은 테스트가 독립적이며 독립적으로 실행될 수 있도록 도와줍니다.
  • 테스트 범위 가란 무엇이며 왜 중요한가? 테스트 범위는 테스트에서 실행하는 코드 기반의 백분율을 측정합니다. 테스트되지 않은 코드를 식별하고 테스트가 포괄적이지 않도록하여 오류가 발견 될 가능성을 줄입니다.
  • Python에서 효과적인 단위 테스트를 작성하기위한 모범 사례는 무엇입니까? 예, 일부 모범 사례에는 독립적이고 고립 된 테스트 작성, 설명 테스트 방법 이름 사용 및 경계 상황 테스트가 포함됩니다. 또한 좋은 테스트 범위를 얻고 테스트를 자주 실행하십시오.
  • 위 내용은 UnitTest 및 Pytest를 사용한 Python 장치 테스트 안내서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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