tests/test_kac_gateway.py는 실제 XML 파서를 거쳐 페이지 축소·메타데이터 누락·변경,
중간 빈 페이지, 중복 항공편, 두 방향 합산 예산, 403 무재시도와 입력 검증을 확인한다.
기본 실행은 외부 요청을 하지 않는다. 승인 거부의 skip을 live 성공으로 보고하지 않는다.
GitHub CI는 Python 3.11/3.12/3.13 오프라인 회귀·커버리지와 Ruff/mypy를 실행한다.
기존 CI workflow가 없어 이번 GW PR에 추가했으며 운영 키를 주입하지 않는다.
tests/test_kac_codeshare.py는 공개 김포 첫 페이지 100행을 XML로 재생해 공동운항
개별 편명·문자열 ID·원본·KST를 검증한다. 방향별 중복, 페이지 겹침, 모순된 공동운항과
생성 시각 차이도 다룬다. fixture는 100행 부분 집합이며 실제 하루 전체 수용과 분리한다.
요청 공항과 다른 노선/역방향의 공동운항 4반례는 거부하고 기존 단일 행 정책은 보존한다.
실제 수용의 공항/날짜·호출 제한·결과는 GW 계약에 기록한다.
디버그 UI에서 저장한 JSON fixture는 tests/fixtures/{function}/{case}.json에 둡니다.
tests/test_generated_fixtures.py는 이 파일들을 자동으로 읽고, 저장된
response.body를 tests/runners.py의 parser에 다시 넣어 processed와 비교합니다.
기본 실행:
python -m pytest tests/test_generated_fixtures.py지원 assertion mode:
snapshot:processed전체 비교,exclude_fields적용schema_only: parser/processor 성공 여부만 확인required_fields: 지정 필드 존재 여부 확인count: 결과 개수 비교
새 fixture 대상 public 함수가 늘어나면 tests/runners.py의 RUNNERS에 parser와
processor를 추가하고, 민감정보는 fixture 저장 전에 <REDACTED>로 마스킹합니다.
상세 포맷은 docs/debug-fixtures.md에 정리합니다.
krairport 테스트는 기본적으로 네트워크 없이 돌아가야 합니다. KAC와 IIAC 모두 일별 트래픽 제한이 있고, 운항/혼잡도 데이터는 시점에 따라 쉽게 달라지므로 fixture 기반 테스트가 기본입니다.
- 기본
pytest실행은 실 API를 호출하지 않습니다. - 모든 provider 테스트는 고정 fixture 또는 mock response를 사용합니다.
- live 테스트는 별도 marker로만 실행합니다.
- 타입 assertion을 반드시 포함합니다.
- 현재 기준선은
90 passed,2 skipped, coverage fail-under85입니다.
ICN-> IIACICN이외 공항 -> KAC- IIAC 전용 메서드에 비-
ICN공항코드 전달 시 예외
- KAC XML
items.item이 dict 하나일 때 - KAC XML
items.item이 list일 때 - IIAC JSON
items.item이 dict 하나일 때 - IIAC JSON
items.item이 list일 때 - 빈 문자열/공백/
-가None으로 정규화되는지 2.02112E+11같은 IIAC 시간 예시가 파싱되는지
Flight.scheduled_at/estimated_at는 awaredatetimecodeshare는bool | NoneParkingFee요금 필드는int | NoneArrivalCongestion인원수 필드는int | NonePassengerForecast구간 값은int | NoneProvider/Direction은StrEnum이지만 문자열 비교가 가능해야 함- public 응답 모델은 Pydantic
BaseModel이며 frozen field validation과model_dump(mode="json")를 검증 krairport.Coordinate는 WGS84 decimal degrees, GeoJSON 순서, DMS 파싱을 검증- 시설 주소는
str | None으로 반환되고 JSON 직렬화되는지 검증 AirportMetadata는 provider/active 필터와 nearest airport 계산을 검증
pytest -m live_kac
pytest -m live_iiac
pytest --cov=krairport --cov-fail-under=85환경변수:
DATA_GO_KR_SERVICE_KEY.env/.env.local의DATA_GO_KR_SERVICE_KEY
규칙:
- 키가 없으면 skip
-m live_kac또는-m live_iiac로 명시 실행했을 때만 실제 API 호출- 라이브 테스트와
KrairportClient.from_env()는 process env를 먼저 보고, 없으면 로컬.env값을 사용합니다. - 응답 shape와 타입만 검증
- 특정 편명, 주차대수, 혼잡도 수치를 고정값으로 단정하지 않음
- KAC는 실제 XML 응답 구조를 유지합니다.
- IIAC는 실제 JSON 응답 구조를 유지합니다.
- 숫자형 문자열은 fixture 안에서는 원본 문자열 상태를 유지하고, 테스트가 변환 코드를 지나가도록 합니다.
- 서비스키는 반드시
[REDACTED]처리합니다.
live_kaclive_iiacintegration
버그를 고칠 때는 항상:
- 재현 fixture 추가
- 실패하는 테스트 작성
- 구현 수정
- README / 명세 / troubleshooting 반영