자동화는 현대 소프트웨어 개발 및 테스트에서 중요한 부분입니다. 시간을 절약하고 수동 오류를 줄이며 프로세스 전반에 걸쳐 일관성을 보장합니다. Pytest 프레임워크는 Python 작업, 특히 테스트를 자동화하기 위한 가장 인기 있고 강력한 도구 중 하나입니다. 가볍고 사용하기 쉬우며 다양한 플러그인과 내장 기능을 제공하여 자동화 프로세스를 단순화합니다.
이 글에서는 Pytest 프레임워크를 사용하여 작업을 자동화하는 가장 좋은 방법을 살펴보겠습니다. 우리는 Pytest가 다양한 유형의 작업을 효과적으로 자동화하는 방법을 보여주는 세 가지 실제 사례를 살펴보겠습니다.
왜 Pytest를 사용하나요?
예제를 살펴보기 전에 왜 Pytest가 작업 자동화에 탁월한 선택인지 논의해 보겠습니다.
단순성: Pytest는 간단하고 간결한 구문을 가지고 있어 테스트 사례를 쉽게 작성하고 읽을 수 있습니다.
확장성: 다양한 플러그인과 후크를 통해 Pytest를 확장하여 다양한 테스트 요구 사항을 지원할 수 있습니다.
픽스처(Fixtures): Pytest는 테스트를 위한 전제 조건이나 상태를 설정하고 재사용성을 향상시키는 강력한 기능인 픽스쳐를 제공합니다.
통합: Pytest는 CI/CD 플랫폼을 포함한 다른 도구와 잘 통합되어 엔드투엔드 자동화를 가능하게 합니다.
예 1: Pytest로 API 테스트 자동화
API는 많은 애플리케이션의 중추이므로 API의 안정성을 보장하는 것이 중요합니다. 요청 라이브러리와 함께 Pytest를 사용하면 API 테스트를 쉽게 자동화할 수 있습니다.
1단계: 필수 라이브러리 설치
먼저 Pytest와 요청 라이브러리가 설치되어 있는지 확인하세요.
pip 설치 pytest 요청
2단계: 테스트 스크립트 작성
테스트용 가짜 온라인 REST API인 JSONPlaceholder와 같은 공개 API에 대한 간단한 GET 요청을 자동화해 보겠습니다.
`가져오기 요청
pytest 가져오기
BASE_URL = "https://jsonplaceholder.typicode.com"
@pytest.fixture
def api_client():
# 이 픽스쳐는 API 요청을 위한 세션 객체를 제공합니다
세션 = 요청.세션()
항복 세션
session.close()
def test_get_posts(api_client):
# 게시물을 가져오기 위해 GET 요청 보내기
응답 = api_client.get(f"{BASE_URL}/posts")
# 주장
response.status_code == 200
주장
len(response.json()) > 0, "게시물을 찾을 수 없습니다."`
설명:
Fixture(api_client): 이 Fixture는 HTTP 요청을 위한 재사용 가능한 세션을 설정하므로 매번 새 세션을 만들 필요가 없습니다.
테스트 함수(test_get_posts): 이 함수는 /posts 엔드포인트에 GET 요청을 보내고 다음을 확인합니다.
상태 코드는 200으로 성공을 나타냅니다.
응답에는 게시물이 하나 이상 포함되어 있습니다.
3단계: 테스트 실행
테스트를 실행하려면 다음 명령을 실행하십시오.
세게 때리다
코드 복사
pytest -v test_api.py
이것이 작동하는 이유
테스트는 간결하고 재사용이 가능하며 Pytest의 픽스처를 활용하여 설정 및 해체를 처리합니다.
Pytest의 출력에는 어떤 테스트가 통과 또는 실패했는지 표시되므로 시간 경과에 따른 API 안정성을 쉽게 추적할 수 있습니다.
예 2: Pytest 및 Selenium을 사용하여 웹 UI 테스트 자동화
웹 UI 테스트는 애플리케이션의 프런트엔드가 예상대로 작동하는지 확인합니다. Pytest를 Selenium과 결합하여 이러한 작업을 효율적으로 자동화할 수 있습니다.
1단계: 필수 라이브러리 설치
Pytest, Selenium 및 WebDriver Manager를 설치합니다.
pip 설치 pytest 셀레늄 webdriver-manager
2단계: 테스트 스크립트 작성
Google의 검색 기능을 확인하는 간단한 웹 UI 테스트를 자동화하는 방법은 다음과 같습니다.
`pytest 가져오기
셀레늄 가져오기 웹 드라이버에서
selenium.webdriver.common.by import By
selenium.webdriver.common.keys에서 키 가져오기
webdriver_manager.chrome에서 ChromeDriverManager 가져오기
@pytest.fixture
def 브라우저():
# Chrome WebDriver 설정
드라이버 = webdriver.Chrome(ChromeDriverManager().install())
수익률 동인
드라이버.종료()
def test_google_search(브라우저):
# Google로 이동
browser.get("https://www.google.com")`{% endraw %}
# Find the search box and enter a query search_box = browser.find_element(By.NAME, "q") search_box.send_keys("Pytest Automation") search_box.send_keys(Keys.RETURN) # Assert that results are shown results = browser.find_elements(By.CSS_SELECTOR, "div.g") assert len(results) > 0, "No search results found"
설명:
Fixture(브라우저): 이 Fixture는 webdriver-manager를 사용하여 Chrome WebDriver 인스턴스를 설정하고 각 테스트 후에 올바르게 닫히는지 확인합니다.
테스트 함수(test_google_search): 이 함수:
Google 홈페이지를 엽니다.
"Pytest Automation"을 검색합니다.
검색이 적어도 하나의 결과를 반환한다고 주장합니다.
3단계: 테스트 실행
다음을 사용하여 테스트를 실행합니다:
{% 원시 %}pytest -v test_ui.py
이것이 작동하는 이유
Pytest의 픽스처는 브라우저 인스턴스를 관리하여 테스트 설정 및 해체를 깔끔하고 효율적으로 만듭니다.
Selenium을 사용하면 스크립트가 실제 사용자처럼 웹페이지와 상호작용하여 UI가 예상대로 작동하도록 보장합니다.
예 3: Pytest 및 Pandas를 사용한 데이터 검증 자동화
데이터 검증은 데이터 엔지니어링, 분석, ETL 프로세스에서 매우 중요합니다. Pytest는 pandas 라이브러리를 사용하여 데이터 검증 작업을 자동화할 수 있습니다.
1단계: 필수 라이브러리 설치
Pytest와 Pandas가 설치되어 있는지 확인하세요:
pip 설치 pytest 팬더
2단계: 테스트 스크립트 작성
데이터 세트가 특정 조건(예: Null 값 없음, 올바른 데이터 유형 등)을 충족하는지 확인하는 작업을 자동화해 보겠습니다.
`pytest 가져오기
팬더를 pd로 가져오기
@pytest.fixture
def 샘플_데이터():
# 샘플 DataFrame 생성
데이터 = {
"이름": ["앨리스", "밥", "찰리", "데이비드"],
"나이": [25, 30, 35, 40],
"email": ["[email protected]", "[email protected]", 없음, "[email protected]"]
}
df = pd.DataFrame(데이터)
df를 반환
def test_data_not_null(샘플_데이터):
# DataFrame
에 null 값이 있는지 확인합니다.
Assert Sample_data.isnull().sum().sum() == 0, "데이터에 Null 값이 포함되어 있습니다."
def test_age_column_type(샘플_데이터):
# 'age' 열이 정수형인지 확인합니다
Assert Sample_data['age'].dtype == 'int64', "Age 열이 정수 유형이 아닙니다."`
설명:
Fixture(sample_data): 이 Fixture는 샘플 DataFrame을 설정하여 여러 테스트에서 재사용할 수 있는 데이터 세트를 시뮬레이션합니다.
테스트 함수(test_data_not_null): 이 테스트는 DataFrame에 null 값이 있는지 확인하고 발견되면 실패합니다.
테스트 함수(test_age_column_type): age 열이 정수형인지 확인하여 데이터 일관성을 보장하는 테스트입니다.
3단계: 테스트 실행
다음을 사용하여 테스트를 실행합니다:
pytest -v test_data.py
이것이 작동하는 이유
Pytest의 유연성 덕분에 데이터 중심 테스트가 가능해 데이터 세트가 예상 기준을 충족하는지 확인할 수 있습니다.
이 픽스처를 사용하면 코드를 복제하지 않고도 테스트 데이터를 쉽게 설정하고 수정할 수 있습니다.
Pytest를 사용한 작업 자동화 모범 사례
설정 및 해제를 위한 픽스처 사용: 픽스처는 설정 및 해제를 효율적으로 관리하여 테스트를 모듈화하고 재사용 가능하게 만듭니다.
플러그인 활용: Pytest에는 자동화 노력을 향상시키는 다양한 플러그인(예: HTML 보고서용 pytest-html, 병렬 실행용 pytest-xdist)이 있습니다.
매개변수화 테스트: @pytest.mark.parametrize를 사용하여 여러 데이터 또는 입력 세트를 테스트하여 코드 중복을 줄입니다.
CI/CD 파이프라인과 통합: 지속적인 테스트를 위해 Jenkins 또는 GitHub Actions와 같은 CI/CD 도구와 Pytest 테스트를 통합합니다.
결론
Pytest는 API 및 웹 UI 테스트부터 데이터 검증에 이르기까지 다양한 작업을 자동화하는 강력한 도구입니다. 유연성과 광범위한 플러그인 지원이 결합된 단순성은 개발자와 QA 엔지니어 모두에게 탁월한 선택입니다. 픽스처, 매개변수화, CI/CD 파이프라인과의 통합과 같은 Pytest의 기능을 활용하면 강력하고 유지 관리 및 확장 가능한 자동화 프레임워크를 구축할 수 있습니다.
워크플로를 자동화하거나 테스트 프로세스를 향상시키려는 경우 Pytest가 훌륭한 출발점입니다. 즐거운 테스트 되세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3