Playwright: 테스트 구조 (작지만 큰 영향을 주는 부분)

발행: (2025년 12월 21일 오후 01:47 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

소개

Hi there 👋! This is my first post since I joined dev.to.

저는 최근 고객 지원에서 QA로 전환한 주니어 QA 엔지니어입니다. 아직 경험이 많지는 않지만—특히 자동화 테스트를 깊이 있게 논의할 정도는 아니지만—일상 업무에서 한 가지 중요한 점을 발견했습니다:

많은 QA 엔지니어가 자동화 테스트를 작성하지만, 모두가 테스트 구조를 제대로 이해하고 있는 것은 아닙니다. 명확하고 신중하게 설계된 테스트 구조가 없으면 자동화 테스트는 금방:

  • 유지 관리가 어려워지고
  • 테스트 실패 시 디버깅이 어려워지고
  • 제품이 성장함에 따라 확장하기 위험해집니다

종종 간과되는 간단한 개선점은 자동화 테스트를 어떻게 구조화하느냐 입니다. 테스트 구조가 기본적인 것처럼 들리지만, 자동화에 새로 입문했거나 실제 프로젝트 경험이 제한된 많은 QA 엔지니어들은 그 중요성을 충분히 인식하지 못할 수 있습니다.

이번 포스트에서는 지금까지 배운 내용을 바탕으로 테스트 구조 관리에 대한 몇 가지 간단한 팁을 공유하려 합니다. 작은 주제일 수 있지만 큰 영향을 미칩니다.

📂 기본 Playwright 테스트 구조 (시작점)

tests/
 ├── example.spec.ts
 ├── another-test.spec.ts
playwright.config.ts

이 레이아웃은 데모, 튜토리얼 또는 아주 작은 프로젝트에서는 잘 작동합니다. 하지만 테스트 스위트가 커지면 구조가 금방 문제를 일으키게 됩니다.

기본 구조의 일반적인 문제점

  • 테스트 파일마다 선택자가 중복됨
  • 테스트가 길어지고 읽기 어려워짐
  • UI 변경 시 많은 테스트 파일을 수정해야 함
  • 실패한 테스트를 디버깅하는 데 시간이 오래 걸림

그래서 저는 프로젝트 초기에 기본 구조에서 벗어나기로 결정했습니다.

🧱 저장소에서 사용되는 맞춤 테스트 구조

*.spec.ts 파일에 모든 것을 직접 넣는 대신, 관심사를 명확히 분리했습니다.

고수준 구조 (단순화)

tests/
 ├── pages/
 ├── fixtures/
 ├── utils/
 ├── ai/
 │   └── ai-movie.spec.ts

📄 1. Page Object Model (POM)

pages/ 폴더에는 다음을 담당하는 페이지 클래스가 포함됩니다:

  • selectors
  • page actions (click, fill, submit 등)

테스트는 다음과 같은 메서드를 통해 페이지와 상호 작용합니다:

  • searchMovie()
  • submitPrompt()
  • readAIResponse()

왜 중요한가

  • UI 변경이 발생해도 페이지 파일만 수정하면 됩니다
  • 테스트 파일은 깔끔하고 가독성이 높아집니다
  • selector 중복이 줄어듭니다

기본 Playwright 접근 방식과 비교했을 때, 유지 보수 비용을 크게 줄여줍니다.

🔁 2. Fixtures for Shared Setup

fixtures/ 폴더에는 재사용 가능한 설정 로직이 포함되어 있습니다, 예:

  • 앱으로 이동하기
  • 테스트 상태 준비하기
  • 공유 테스트 구성

기본 구조 대비 장점

  • 테스트는 동작에 집중하고 설정은 최소화
  • 테스트 흐름을 표준화하기 쉬움
  • 복사‑붙여넣기 실수 감소

🧰 3. 복잡한 로직을 위한 유틸리티

AI 관련 테스트에서는 일부 검증이 간단하지 않습니다(예: 응답 형식 확인, 콘텐츠 규칙 검증, 비동기 동작을 일관되게 처리). 이러한 로직 조각은 utils/에 위치합니다.

이 구조가 기본 구조보다 뛰어난 이유

  • 어설션을 재사용 가능하게 유지
  • 테스트 파일이 비대해지지 않음
  • 테스트를 건드리지 않고 로직을 개선 가능

📁 4. 기능 기반 테스트 그룹화

무작위 스펙 파일 대신, 테스트를 기능별로 그룹화합니다. 예시:

  • AI 관련 테스트는 자체 폴더(tests/ai/)에 위치합니다
  • 향후 기능도 동일한 패턴을 따를 수 있습니다

기본 구조와 비교했을 때

  • 탐색이 더 쉬워짐
  • 소유권이 명확해짐
  • 기능이 성장함에 따라 확장성이 향상됨

🧠 최종 생각

주니어 QA 엔지니어라 하더라도, 좋은 구조는 사치가 아니라 기술이라는 것을 배웠습니다.

당신이 필요로 하지 않는 것

  • 거대한 프로젝트
  • 다년간의 경험
  • 완벽한 아키텍처

당신이 정말 필요로 하는 것은 다음과 같은 사고방식입니다: 자동화 테스트는 일회성 스크립트가 아니라 장기적인 자산입니다.

Playwright의 기본 구조를 넘어 테스트를 의도적으로 조직함으로써, 당신은:

  • 미래의 고통을 줄인다
  • 협업을 개선한다
  • 초기부터 더 나은 테스트 습관을 구축한다

희망컨대, 이 글이 다른 주니어 QA들이 제가 아직도 배우고 있는 실수를 피하는 데 도움이 되길 바랍니다 🚀

자유롭게 내 프로젝트 여기 를 살펴보고 참고용으로 사용하세요.

Back to Blog

관련 글

더 보기 »