테스트 전략을 계획하기 전에 답변해야 할 중요한 질문이 있습니다. 소프트웨어 시스템의 어떤 부분을 테스트하고 싶습니까? 이것은 철저한 테스트가 불가능하기 때문에 핵심 문제입니다. 따라서 가능한 모든 입력 및 출력을 테스트 할 수는 없지만 관련된 위험에 따라 테스트의 우선 순위를 정해야합니다.
테스트 범위를 정의 할 때 여러 가지 요소를 고려해야합니다.
위험 : 오류 가이 구성 요소에 영향을 미치는 경우 어떤 비즈니스 결과가 발생합니까?
시간 : 소프트웨어 제품이 얼마나 오래 준비되기를 원하십니까? 마감일이 있습니까?
예산 : 테스트 활동에 얼마나 많은 돈을 투자 하시겠습니까?
-
테스트 범위를 정의한 후 (테스트 해야하는 내용과 테스트하지 말아야 할 사항을 지정) 좋은 단위 테스트가 필요한 기능을 논의 할 수 있습니다.
단위 테스트의 특징
-
빠른. 단위 테스트는 주로 자동으로 수행되므로 빠르게 수행해야합니다. 느린 단위 테스트는 즉각적인 피드백을 제공하지 않기 때문에 개발자가 건너 뛸 가능성이 높습니다. -
독립. 단위 테스트는 정의에 따라 독립적입니다. 개별 코드 단위를 테스트하고 외부 요인 (예 : 파일 또는 네트워크 리소스)에 의존하지 않습니다.
반복 가능. 단위 테스트는 반복적으로 실행되며 결과는 시간이 지남에 따라 일관성이 있어야합니다.
신뢰할 수 있습니다. 테스트중인 시스템에 오류가있는 경우에만 단위 테스트는 실패합니다. 환경이나 테스트가 실행되는 순서는 중요하지 않아야합니다.
<.> 올바르게 명명되었습니다. 테스트 이름은 테스트 자체에 대한 관련 정보를 제공해야합니다.
-
파이썬에서 단위 테스트를 탐구하기 전에 단계가 누락되었습니다. 테스트를 어떻게 정리하여 깨끗하고 읽을 수 있도록 테스트를 구성합니까? 우리는 준비, 실행 및 어설 션 (AAA)이라는 패턴을 사용합니다.
AAA 모드
준비, 실행 및 어설 션 (AAA) 패턴은 단위 테스트를 작성하고 구성하는 일반적인 전략입니다. 다음과 같이 작동합니다
-
준비 단계에서 테스트에 필요한 모든 객체와 변수를 설정하십시오.
다음으로 실행 단계에서 테스트 할 기능/방법/클래스가 호출됩니다. -
마지막으로, 어설 션 단계에서 테스트 결과를 확인합니다.
-
이 전략은 테스트의 모든 주요 부분 (설정, 실행 및 검증)을 분리하여 단위 테스트를 구성하는 깨끗한 방법을 제공합니다. 또한 단위 테스트는 모두 동일한 구조를 따르기 때문에 읽기가 더 쉽습니다.
Python에서의 단위 테스트 : UnitTest 또는 Pytest? -
이제 우리는 파이썬에서 두 가지 다른 단위 테스트 프레임 워크에 대해 논의 할 것입니다. 이 두 프레임 워크는 UnitTest와 Pytest입니다.
단위 테스트 소개
Python Standard Library에는 Unittest Unit Testing Framework가 포함되어 있습니다. 이 프레임 워크는 Java의 단위 테스트 프레임 워크 인 Junit에서 영감을 얻었습니다.
공식 문서에 명시된 바와 같이, UnitTest는이 게시물에서 언급 할 몇 가지 중요한 개념을 지원합니다.
테스트 케이스, 이것은 단일 테스트 단위
입니다.
테스트 스위트, 이것은 함께 실행 된 일련의 테스트 사례입니다
모든 테스트 사례의 실행 및 결과를 처리하는 구성 요소 인 테스트 러너
UnitTest에는 고유 한 글쓰기 테스트 방법이 있습니다. 특히, 우리는 필요합니다 :
unittest.testcase class에서 수업 상속 방법으로 테스트를 작성하십시오.
특수 어설 션 방법 를 사용하십시오
-
UnitTest가 이미 설치되었으므로 첫 번째 단위 테스트를 작성할 준비가되었습니다!
unittest 를 사용한 단위 테스트 작성
BankAccount 클래스가 있다고 가정 해 봅시다
-
우리는 가용 예금 금액을 초과하는 돈을 인출 할 수 없으므로 소스 코드 가이 상황을 올바르게 처리하는지 테스트 해 봅시다.
동일한 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는 현재 디렉토리 및 해당 하위 디렉토리에서 이러한 파일을 찾습니다.
알다시피, 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에서 효과적인 단위 테스트를 작성하기위한 모범 사례는 무엇입니까? 예, 일부 모범 사례에는 독립적이고 고립 된 테스트 작성, 설명 테스트 방법 이름 사용 및 경계 상황 테스트가 포함됩니다. 또한 좋은 테스트 범위를 얻고 테스트를 자주 실행하십시오.