497 판독값
497 판독값

효율적인 Python 테스트 자동화를위한 7 가지 최고의 팁과 관행

~에 의해 Pradeesh Ashokan6m2025/03/30
Read on Terminal Reader

너무 오래; 읽다

Python은 테스트 자동화에 가장 적합한 프로그래밍 언어 중 하나입니다. 프로젝트 사양에 따라 올바른 테스트 자동화 프레임워크를 선택하십시오.Selenium에서 WebDriverWait을 사용하여 타이밍 문제를 극복하십시오.
featured image - 효율적인 Python 테스트 자동화를위한 7 가지 최고의 팁과 관행
Pradeesh Ashokan HackerNoon profile picture

자동화 테스트를 JavaScript, Node, 또는 다른 프로그래밍 언어로 실행 중인 경우, 파이썬이 얼마나 쉬운지 깨닫게 될 것입니다. 파이썬이 제공하는 도서관의 엄청난 수, 단순성과 대규모 사용은 테스트 자동화를위한 최고의 프로그래밍 언어 중 하나입니다.

자동화 테스트자동화 테스트


나는 최상의 결과를 위해 몇 가지 팁과 트릭을 알기에 충분히 오랫동안 파이썬 테스트 자동화 프로젝트에 일해 왔습니다.

나는 효율적인 파이썬 테스트 자동화에 의존 할 수있는 7 가지 팁과 관행을 공유 할 것입니다.

1. 프로젝트 사양에 따라 올바른 테스트 자동화 프레임워크를 선택합니다.

1 프로젝트 사양에 따라 올바른 테스트 자동화 프레임워크를 선택하십시오.

Python은 내장된 테스트 자동화 프레임워크인 Unittest와 함께 제공되지만 소규모 프로젝트에 가장 적합합니다.

당신이 소규모에서 대규모 프로젝트에 작동 할 수있는 테스트 자동화 프레임워크를 원한다면, Pytest는 더 나은 옵션입니다.


Pytest는 더 관리하고 확장 가능한 테스트 자동화를 위해 테스트 케이스를 작성하는 구조화되고 효율적인 방법을 제공합니다. 그것은 또한 가장 간단한 구문과 가장 포괄적 인 플러그인 생태계를 가지고 있습니다. 예를 들어, 당신은 동시에 테스트 실행을 위해 pytest-xdist를 사용할 수 있습니다.


당신이 더 많은 로봇 프로세스 자동화를 할 경우 (RPA), 로봇 프레임 워크는 더 나은 옵션입니다. 구문은 주로 인간 언어, 그래서 정말로 작업하기 쉽습니다. 웹 테스트를 위해, 당신은 또한 셀레늄과 같은 다른 파이썬 테스트 프레임 워크와 통합 할 수 있습니다.

RPARPA


Behavior-Driven Development (BDD)를 실천하는 팀에서 일하는 경우 Behave는 최선의 프레임 워크입니다.Writing test cases in Behave that non-technical stakeholders can understand is super easy.


나는 당신이 통신 장벽을 피하기 위해 당신의 팀이 사용하는 기술 스택과 일치하는 프레임 워크를 선택하는 것이 좋습니다.하지만 솔로 작업하는 경우, Pytest는 가장 유연하고 일반적으로 사용되는 프레임 워크입니다.

2. Selenium에서 WebDriverWait를 사용하여 타이밍 문제를 극복합니다.

나는 당신이 웹 테스트를 위해 Selenium과 Pytest를 통합 할 수 있다고 언급했다.Pytest는 기능 테스트를 위해 훌륭하지만, Selenium은 웹 자동화를 완전히 새로운 수준으로 가져옵니다.Selenium은 강력한 브라우저 자동화 기능을 가지고 있으며, 특히 WebDriver 라이브러리로.


Selenium에서 테스트를 실행할 때, 시스템이 요소를 찾는 데 작동하는 동안 정의된 시간을 기다려야 합니다.이 시간이 지나면, 말해 10초가 지나면 드라이버가 중단됩니다.


그러므로 암시적인 기다림에 의존하는 대신, 예상_조건과 함께 WebDriverWait을 사용하여 요소가 상호 작용되기 전에 충족되어야 하는 특정 조건을 만듭니다.

from selenium import webdriver from Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # element to be clickable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() # element is ready driver.quit() 
<코드 class="language-javascript">from selenium import webdriver from Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # element to be clickable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() # element is ready driver.


테스트가 지속적으로 실패하면 웹 앱에 문제가 있음을 의미하지는 않을 수 있습니다. 앱의 코드 또는 UI의 일부 변경 때문일 수 있습니다.Test 실패로 인한 과도한 디버깅을 피하려면 고유 ID를 사용하여 웹 요소를 정확하게 식별하십시오.

3.Pytest 파라미터화 테스트를 사용하여 테스트 기능의 복제를 피하십시오.

Pytest의 파라미터화 테스트 기능이 얼마나 시간을 절약하는지 충분히 강조할 수 없습니다.Test automation는 때때로 다른 데이터 세트를 사용하는 앱에서 동일한 기능을 테스트해야합니다.Test 기능을 복제하는 대신 pytest.mark.parametrize를 사용하여 단일 테스트 기능을 실행할 수 있으며, 다른 매개 변수로 여러 번 복제됩니다.<코드>pytest.mark.parametrize


사용자

<코드>사용자 <코드>

@pytest.mark.parametrize("input, expected", [(2, 4), (3, 9), (4, 16)])

@pytest.mark.parametrize("input, expected", [(2, 4), (3, 9), (4, 16)]

def test_square(input, expected):

def test_square( 입력, 예상) :

   assert input ** 2 == expected

   assert input ** 2 == expected


Python의 내장된 테스트 자동화 프레임워크를 사용하여 매개 변수 테스트를 실행할 수 있는지 궁금하다면, 대답은 예입니다.Unittest는 매개 변수 테스트를 기본적으로 지원하지 않지만 그 목적을 위해 모듈을 추가할 수 있습니다.

수입 단위

<코드>수입 단위 <코드>

from 매개 변수 수입 매개 변수

from Parameterized Import Parameterized

클래스 테스트MathOperations(unittest.TestCase):

클래스 테스트MathOperations(unittest.TestCase):< BR >

     ([

)<코드>      <코드> <코드> <코드>

       ("2의 사각형", 2, 4),

○ ○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○

       ("3의 쿼리", 3, 9),

○ ○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○

       ("4의 사각형", 4, 16),

○ ○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○

   ]

<코드>    ] <코드>

   def test_square(자신, 이름, 입력, 기대) :

   def test_square(자신, 이름, 입력, 기대) :

       self.assertEqual(input ** 2, expected)

○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○

4

Image Source

사진 소스

Test Suite의 APIs, 테스트 케이스, 데이터베이스 및 제3자 시스템이 더 많을수록 실행 지연이 더 많아 개발을 늦출 수 있습니다. 다행히도 테스트 케이스를 방해하지 않고 처리 할 수있는 방법이 있습니다.Python은 Pytest와 같은 프레임 워크와 함께 병렬 테스트를 허용합니다.당신은 여러 CPU를 사용하여 여러 테스트를 동시에 실행할 수 있습니다.


Pytest를 사용하여 병렬 테스트를 수행하는 방법은 다음과 같습니다:

pip install 케이블을 설치합니다.

pip install 푸시스트-xdist

pytest -n 4  # 4 CPU에서 실행 테스트

pytest -n 4  # 4 CPU에서 실행 테스트


당신은 또한 부하를 처리하는 CPU의 수를 증가시킬 수 있지만 로컬 인프라 만이 그것을 처리 할 수 있습니다.If your CPUs are not powerful enough to handle your test suite, I recommend using cloud platforms like Lambda to test how the app will behave on different browsers and OSes.

그리고

5> CI/CD 파이프라인으로 테스트 자동화를 자동화합니다.

나를 믿으십시오; 빠른 개발주기와 함께 작업하는 경우 휴식을 취하지 않을 것이며 소프트웨어에서 뭔가가 변경될 때마다 코드를 수동으로 조정해야합니다.


Python 테스트를 CI/CD 파이프라인에 자동화하여 코드가 변경될 때마다 자동으로 실행할 수 있습니다.This allows you to quickly identify bugs and release the improved app version back for use.


Python 테스트 자동화를 CI/CD 파이프라인에 통합하려면 프로젝트에 pytest-cov를 추가하고 Pytest 명령을 사용하여 테스트를 자동으로 실행하고 모든 문제를 표시합니다.

사이즈 코드


단계 :

  - 이름: 제조사

  - 이름: 제조사

   run: pip install 제일 잘못된 글쓰기


 - 이름: 실행 테스트

  - 이름: 실행 테스트

    실행 : 최초의 --cov=my_project

    실행 : 최초의 --cov=my_project


더 큰 테스트 스위트에서 작업하는 경우 Jenkins와 같은 CI 도구에 로봇 프레임워크를 추가해야 합니다.For Unittest, coverage allows you to integrate your test into a pipeline like this;


테스트 :

  스크립트:

   스크립트 :

   - 파이썬 -m coverage run -m unittest discover

   - Python -m coverage run -m unittest discover

   - 파이썬 -m 커버링 보고서

   - 파이썬 -m 커버링 보고서

6 단독으로 테스트를 실행합니다.

Python 테스트 자동화에서 발생할 수있는 일반적인 문제 중 하나는 상호 의존성으로 인한 테스트 부패입니다. 기본적으로 테스트가 다른 테스트의 데이터 또는 환경 상태에 의존하기 때문에 실패합니다. 따라서 하나의 테스트가 수정되면 다른 테스트는 체인 반응으로 인해 실패합니다.이를 해결하려면 모든 테스트를 분리하여 각 테스트가 다른 테스트와 연결되지 않도록 시작하십시오.이 방법으로 다른 테스트에 대한 리플 효과를 다루지 않고도 디버그 할 수 있습니다.


Pytest에서 setup 및 teardown 논리를 사용하여 테스트 고립을 보장하는 방법;


사용자

<코드>사용자 <코드>

@pytest.fixture

<코드>@pytest.fixture

def clean_environment():

def clean_environment():

   # 설정 : 깨끗한 상태를 준비하십시오

   # 설정 : 깨끗한 상태를 준비하십시오

   프린트("안전한 환경 설정.")

   print("안전한 환경을 설정하는 방법")

   제출

<코드>    제출 <코드>

   # Teardown: 환경을 재설정

   # Teardown: 환경을 재설정

   프린트("시험 후 청소하기.")

   print("시험 후 청소하기.")


def test_example(clean_environment):

< BR >def test_example(clean_environment) :

   이사 2 + 2 == 4

   Assert 2 + 2 == 4


Pytest 팩트가 사용하는 리소스가 각 테스트 후에 청소된다는 것을 확인하십시오.This allows you to restore the environment to its original state after the test has been executed.

7 최선의 테스트 자동화 관행을 유지합니다.

Python 테스트 자동화에서 더 효율적으로 작동하려면 몇 가지 최선의 관행을 강조하겠습니다.

고백
  • 시험 자동화 도구를 업데이트하여 최신 브라우저 버전에서 앱을 테스트하고 대중에게 공개하기 전에 버그를 잡으십시오.
  • 결론

    자동화 테스트는 도전적일 수 있습니다, 특히 일련의 해결할 수 없는 오류를 다루는 경우.나는 테스트 자동화가 테스트 피라미드를 사용할 때 덜 오류가 있다는 것을 발견했습니다.여기에 E2E 테스트 전에 유닛 및 통합 테스트에 집중합니다.내가 강조한 팁과 관행을 통해 CI/CD 환경에서 지속적인 회귀 테스트를 효율적으로 실행하고 코드를 배포하기 전에 즉각적인 피드백을 얻을 수 있습니다.

    Trending Topics

    blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks