1. @pytest.mark.parametrize() 기본 사용법
@pytest.mark.parametrize(args_name, args_value)
args_name: 인자 이름
args_value: 인자 값 (리스트 [], 튜플 (), 딕셔너리 리스트 [{}, {}], 딕셔너리 튜플 ({}, {})). 값의 개수만큼 테스트 케이스가 실행됩니다.
import time
import pytest
class TestApi:
# 리스트 사용
@pytest.mark.parametrize('a', ['1', '2'])
def test_huahua(self, a):
time.sleep(5)
print(a)
# unittest의 ddt에서 @unpack과 동일
@pytest.mark.parametrize('a', [['1', '2'], ['11', '22']])
def test_huahua1(self, a):
time.sleep(5)
print(a)
# 튜플 사용
@pytest.mark.parametrize('a', ('1', '2'))
def test_huahua2(self, a):
time.sleep(5)
print(a)
# 딕셔너리 리스트
@pytest.mark.parametrize('a', [{'huahua', '4'}, {'caocao', '6'}])
def test_huahua3(self, a):
time.sleep(5)
print(a)
# 딕셔너리 튜플
@pytest.mark.parametrize('a', ({'huahua', '88'}, {'caocao', '66'}))
def test_huahua4(self, a):
time.sleep(5)
print(a)
# 다중 인자 - 리스트
@pytest.mark.parametrize('a, b', [['나', '4'], ['너', '6']])
def test_chen(self, a, b):
print(a, b)
# 다중 인자 - 딕셔너리 리스트
@pytest.mark.parametrize('a, b', [{'hua', '4'}, {'cao', '6'}, {'yun', '8'}])
def test_chen1(self, a, b):
print(a, b)
if __name__ == '__main__':
pytest.main(['-vs'])
실행 결과:
2. YAML 파일 상세 설명 - 인터페이스 자동화 구현
YAML은 다음 용도로 사용됩니다:
- 전역 설정 파일 (ini/yaml)
- 테스트 케이스 작성 (인터페이스 테스트 케이스)
YAML 개요
YAML은 주석, 줄바꿈, 여러 줄 문자열, 원시 문자열(정수, 문자열)을 지원하는 데이터 형식입니다.
문법 규칙
- 대소문자 구분
- 들여쓰기로 계층 표현 (탭 키 사용 불가, 공백만 허용, Python과 동일)
- 들여쓰기 수는 고정되지 않음 (정렬만 맞으면 됨)
- 주석은 # 사용
데이터 구성
1. Map 객체 (키-값 쌍)
키:(공백)값
여러 줄 작성:
msxy:
name: 꽃
age: 18
한 줄 작성:
msxy: {name: 꽃, age: 18}
2. 배열 (리스트)
하이픈(-)으로 시작:
여러 줄 작성:
-
msxy:
- name: 꽃
- age: 18
-
msjy:
- name: 별
- age: 20
한 줄 작성:
-
msxy: [{name: 꽃}, {age: 18}]
YAML 형식 검증 사이트: https://www.bejson.com/validators/yaml_editor/
3. YAML 인터페이스 자동화 실전
프로젝트에 Pyyaml을 먼저 설치해야 합니다.
YAML 읽기 지식:
YAML을 사용한 인터페이스 자동화 예제
고급 심화 지식
1. 단언문(assertion) 캡슐화, Logger 로그
2. Allure 보고서 커스터마이징
3. 키워드 기반과 데이터 기반을 결합한 자동화 테스트
4. Python 리플렉션(reflection)
일반적인 방식: 객체를 초기화한 후 메서드 호출
리플렉션 방식: 객체를 통해 클래스 객체를 얻고, 클래스 객체를 통해 메서드 호출
5. Jenkins 지속적 통합 및 Allure 보고서 통합
자동화 보고서의 오류율에 따라 이메일 전송