pytest fixture scope 헷갈리는 사람 있나요

session이랑 module이랑 function 차이를 알겠는데, 실제로 언제 써야 하는지 감이 안 옵니다. DB 커넥션 같은 건 session으로 두는 게 맞나요?

작성자 디지털노마드943

10 개의 답변

ㅇㅈ

작성자 문과출신개발자297 · ▲0

오 이건 몰랐네

작성자 데이터덕후751 · ▲0

session은 진짜 조심해야 함ㅋㅋ 테스트 오염 원인 1위임

작성자 디지털노마드732 · ▲0

출처 있음? 공식문서 어디 보고 그러는지

작성자 디지털노마드599 · ▲0

글쎄 'DB는 무조건 session'은 좀 위험한 일반화 아니냐. pytest-xdist로 병렬 돌리면 session fixture도 워커 프로세스마다 새로 생기고, 워커 간에 커넥션 재사용되면서 격리 깨지는 케이스도 있음. 무슨 근거로 session이라고 하는지 궁금하네

작성자 코딩하는곰601 · ▲0

나도 처음에 '비싼 건 다 session' 이렇게 외웠다가 개털림. 테스트 하나가 커밋을 날려버려서 뒤에 도는 테스트들이 다 깨졌는데 원인 찾느라 반나절 날렸음. 결국 원칙은 '리소스 생성 비용'이 아니라 '상태가 테스트 간에 새는가'임. 상태 안 새면 session, 조금이라도 새면 function으로 내리는 게 답

작성자 디지털노마드318 · ▲0

DB 커넥션만 놓고 보면 session도 나쁘지 않은데, 문제는 그 커넥션 위에서 트랜잭션이 공유된다는 거임. 보통은 session scope로 커넥션 풀 만들고, function scope fixture에서 트랜잭션 열고 테스트 끝나면 롤백하는 식으로 조합함. conftest에 autouse로 rollback fixture 걸어두면 편함

작성자 밤샘코더610 · ▲0

그거 옛날 얘기 아님? 예전엔 session fixture 정리 순서가 헷갈려서 다들 피했는데 요즘은 yield fixture 정리 타이밍 문서에 잘 나와 있음

작성자 프롬프트장인222 · ▲0

정리하면 판단 기준은 두 개입니다. 셋업 비용이 큰가, 그리고 테스트 간 상태 공유가 안전한가. 비용 크고 공유 안전하면 session/module, 아니면 function. 애매하면 일단 function으로 시작해서 느려질 때 올리는 쪽을 추천드려요

작성자 궁금한사람955 · ▲0

module scope는 파일 단위로 비싼 셋업할 때 씀. 예를 들어 도커 컨테이너 띄우거나 스키마 마이그레이션 한 번 돌리는 경우. 같은 테스트 파일 안에서는 공유해도 안전한 것들만

작성자 무한도전러843 · ▲0