@pytest.mark.{마커명}
데커레이터를 통해 마커 기반으로 묶인 테스트를 실행할 수 있습니다.
참고 : https://docs.pytest.org/en/stable/mark.html
전체 테스트 파일을 전부 실행하기에는 시간이 부족하여, 꼭 확인해야하는 테스트케이스만 실행해 보려고 합니다.
1) pytest.ini 파일에 마커를 설정합니다.
예시로는 전체 테스트 중 꼭 실행해야할 테스트를 'mandatory'로 마커 설정 하였습니다.
[pytest]
markers = mandatory: mark tests that should be executed
2) 테스트 함수에 마커 표시 합니다.
예시에서는 test_1 함수는 꼭 실행해야 한다고 가정합니다.
@pytest.mark.mandatory
def test_1():
assert True
def test_2():
assert True
def test_3():
assert False
3) $ pytest -m {마커명}
으로 테스트를 실행합니다.
예시에서는 $ pytest -m mandatory
로 실행하면, test_1 함수만 실행됩니다.
테스트를 하다보면 특정 테스트케이스는 스킵해야할 때도 있습니다.
아래 예시와 같이 pytest.mark.skip()
를 사용하면, 해당 테스트함수는 skip 하는 것으로 처리할 수 있습니다.
@pytest.mark.skip()
def test_example():
assert 1 == 1
만약 테스트함수 내에서 특정 조건일 때 skip 처리 하고 싶다면, pytest.skip('스킵 메시지')
를 사용하면 됩니다.
아래는 Web Driver를 이용하여 테스트를 진행할 시, element를 찾을 수 없는 경우, skip 처리하는 예시입니다. 테스트 예시는 Velog의 전체 글 수와 실제 게시글 element의 개수가 일치하는지로 설정해보았습니다.
def test_element():
# 웹 드라이버 세팅은 생략합니다.
url = "테스트할 velog url 주소"
driver.get(url)
try:
article_num_text = driver.find_element_by_class_name('전체 게시글 개수 클래스명').get_attribute('textContent')
article_num = int(re.search('[0-9]+', article_num_text).group())
article_elements = driver.find_elements_by_css_selector('.subinfo')
assert article_num == len(article_elements)
except NoSuchElementException:
pytest.skip('msg')
driver.quit()
parametrize를 사용하여 element가 있는 경우와 없는 경우가 섞여있는 url들을 대상으로 테스트하는 경우에 유용합니다.
@pytest.mark.parametrize
데커레이터를 통해 매개변수화된 테스트를 수행할 수 있습니다. fixture와 parametrize를 함께 사용하면 테스트 함수의 재사용성이 높아집니다.
테스트 파일
import pytest
list = ['A', 'B', 'C']
@pytest.mark.parametrize('type', list)
def test_1(type):
assert type == 'A'
위 코드를 실행하면, 매개변수 A, B, C로 test_1 함수를 총 3번 실행합니다.
테스트 결과는 아래와 같습니다.
test.py::test_1[A] PASSED
test.py::test_1[B] FAILED
test.py::test_1[C] FAILED