테스트 자동화도 무신사(QA)랑해

Sanghyun Park
MUSINSA tech
Published in
9 min readJun 4, 2024

안녕하세요, 무신사 QA팀 리더 박상현입니다. 지난번에 “무신사 QA 엔지니어 업무 전격 파헤치기!”라는 내용을 공유드린 적이 있는데요, 이번에는 저희 QA팀의 테스트 자동화 업무에 대해 소개하고자 합니다.

현재 무신사QA팀은 웹, 모바일, API 등 크게 세 가지 방식으로 테스트 자동화를 운영하고 있으며, 이번 글에서는 웹 테스트 자동화에 대해 집중적으로 다루겠습니다. 모바일과 API 테스트 자동화에 대한 내용은 다음 블로그에서 소개할 예정입니다.

왜 테스트 자동화를 하나요?

무신사 QA팀은 테스트 자동화의 목적을 여러 측면에서 고려하고 있으며 현재는 크게 3가지를 주요 목적으로 삼고 있습니다.

첫 번째는 배포되는 코드가 주요 기능의 균일한 동작을 보장하는지 빠르게 검증함으로써 상시 배포 체계를 지원하는 것

두 번째는 해당 서비스 또는 제품의 품질이 일정 수준 이상을 유지하는지 정기적으로 점검함으로써 안정적인 서비스 운영을 지원하는 것

세 번째는 반복적인 테스팅 리소스를 효율적으로 활용(대체)하는 것

이러한 목적에 맞추어 현재 테스트 자동화를 구축하고 운영하고 있으며, 지속적으로 안정성과 효율성을 향상시키고 비용을 절감하는 데 중요한 수단으로 발전시키고, 우리 조직의 품질 보증 프로세스의 핵심 요소로 자리 잡아가고 있습니다.

QA팀의 테스트 자동화는 이렇게 합니다.

테스트 자동화 유형 및 범위

무신사에서는 개발 주기가 빠르고 변화가 빈번한 환경을 고려하여 이미 테스트를 완료한 서비스를 반복하여 테스트해 결함 수정 이후 변경의 결과로 새롭게 만들어 지거나, 이전 결함으로 인해 발견되지 않았던 또 다른 결함을 발견하는 회귀 테스트(Regression Test)를 자동화 하기로 결정했습니다. 또한, 테스트 자동화의 범위에 대해서는 크게 두 가지로 고려하였습니다.

첫 번째는 릴리스 전 테스트 자동화(Checker)로, 이는 제품이 운영 환경에 배포되기 직전에 핵심 기능(P1)을 회귀 테스트하는 것입니다.

두 번째는 릴리스 후 테스트 자동화(Daily R/T)로, 이미 배포된 제품을 대상으로 매일 전체 서비스의 주요 기능을 회귀 테스트하는 것입니다.

각 서비스명의 변수를 통해 유형별로 테스트 자동화 스크립트를 실행하는 내용의 이미지 입니다.
그림1. 회귀테스트 자동화 실행 흐름

이와 같이 테스트를 구분하여 수행함으로써 제품의 품질을 유지하고 안정성을 확보할 수 있습니다. 그리고 각 영역별 담당 테스트엔지니어가 테스트케이스를 작성하고 협업부서(기획,개발)에 자동화 구축 방향과 계획을 설명했으며, 테스트케이스 리뷰를 통해 점검이 필요한 추가 기능 및 영역에 대해 협의했습니다. 또한 자주 변경되는 영역에 대한 테스트 자동화는 과도한 유지보수 리소스를 소비할 가능성이 높으므로, 자동화 대상 범위에서 과감히 제외하였습니다.

도구&프레임워크 선정

프로그래밍 언어에 대한 진입 장벽이 낮고 문법이 간결한 Python을 선택하였으며, pytest 테스트 프레임워크를 사용하여 테스트 코드를 작성하고 실행했습니다. 또한, 웹 애플리케이션을 테스트하기 위해서 Selenium 프레임워크를 사용하는 것으로 결정했습니다.

스크립트 작성 및 관리

스크립트 구조는 유지보수가 용이하고 테스트 코드의 중복을 줄이고, 페이지별 기능에 집중도가 높아 관리가 용이한 POM(Page Object Model)구조로 설계했습니다. Github으로 소스코드를 관리하며, 변경사항이 있을 때 마다 서로에게 피드백을 주는 PR 리뷰를 장려한 덕분에 구성원의 자동화 역량도 나날이 발전해 나아가고 있습니다.

그림2. Page Object Model 패턴 구조

지속적인 통합과 배포

지속적 통합을 위한 빌드 스케줄러는 Spinnaker를 사용하였고 , 릴리스 후 테스트 자동화를 위해서, 파이프라인 내 job을 통해 원하는 시간에 실행되도록 설정했으며,릴리스 전 각 개발팀별 테스트 환경에서 모든 동작과 기능을 점검한 코드가 최종 테스트 서버에 배포된 후에 테스트 자동화를 호출해 실행 되도록 구성하였습니다.

그림3. 테스트 자동화 시스템 구조

테스트 결과 및 보고

테스트 자동화 수행이 완료되었을 때, 단순 텍스트를 이용해 결과를 출력하는 것보단, 문제점 및 추이 파악에 용이한 시각화 자료로 전달하기 위해 오픈소스 프레임워크 Allure-service를 이용해 리포트를 구성하였습니다.

그림4. 테스트 결과 리포트 구성

그리고 슬랙을 연동해 실시간으로 채널별 테스트 결과를 전달하고 있습니다.

테스트 자동화 결과로 Fail이 발생하면, 원인 분석을 통해 스크립트 에러와 기능 오류를 구분합니다. Feature(UI) 변경에 의한 실패인 경우, 스크립트 유지보수가 필요하며 가능한 빠르게(1일 내) 대응하여 스크립트를 현행화합니다. 기능 오류가 발견되면 JIRA 티켓을 발행하여 담당개발자에게 할당하고, 서비스 수정이 이루어지는지 확인합니다. 이 흐름은 주로 릴리스 후 테스트 자동화(Daily R/T)에 해당합니다. 릴리스 전 테스트 자동화(Checker)의 경우, 실행되는 시점이 불규칙적이라 주/야간 구분 없이 언제든 실행될 수 있습니다. 따라서 테스트 자동화 수행결과에서 Fail 발생시 원인 분석으로 인한 (배포)시간 지연을 최소화하기 위해, 담당QA가 원인 분석 및 Fail 재현여부 점검 후 (기능 오류가 아니라면) 배포를 진행하는 프로세스를 적용하고 있습니다.

그림5. 릴리스 전 테스트 자동화(Checker) Fail 처리 흐름

테스트 자동화의 성과

배포 전 주요기능 점검 상시(필수)화

릴리스 후 테스트 자동화(Daily R/T)의 경우, 매일 오전 5시에 서비스의 각 영역별 주요 테스트 케이스(약 350개)를 자동으로 실행하여 무신사 서비스를 정기적으로 점검하고 있습니다.

릴리스 전 테스트 자동화(Checker)의 경우, 개발팀 또는 서비스로 구분하여 약 10개 영역에서 운영 서버에 배포되기 전에 운영과 유사한 환경의 테스트 서버에서 주요 기본 기능(P1, 반드시 동작해야 하는 기능)을 대상으로 테스트 자동화를 수행하고 있습니다. 그리고 서비스의 새로운 기능이 추가되거나 기존 기능이 수정되면 테스트 스크립트 또한 업데이트해서 테스트 자동화의 신뢰도를 높이고 있습니다.

그림6. 서비스 배포 환경별 Checker 호출 방식

또한, 다양한 채널에서 유입된 오류를 인지하면, 재발 방지와 사전 예방을 위해 해당 오류를 테스트 자동화에 포함시켜 테스트 커버리지와 안정성을 강화하고 있습니다.

이러한 테스트 자동화를 통해 서비스 안정성을 저해하는 요소가 배포되는 것을 사전에 탐지/차단하고 오류로 인한 불편 등 사용자의 부정적인 경험를 감소시키며, 안정적으로 반복적/지속적 배포를 지원함으로써 개발조직의 생산성 향상에도 일부 기여하고 있습니다. 그리고 테스트 담당자들은 반복적인 테스트에서 벗어나 더 창의적이고 가치 있는 작업에 집중할 수 있게 되었습니다.

팀과 구성원의 자동화 역량 향상과 효율성 증대

앞서 말씀드린 것처럼 무신사는 개발 주기가 빠르고 변화가 잦은 환경입니다. 따라서 서비스에 새로운 기능이 추가되거나 기존 기능이 수정될 때마다 테스트 자동화 스크립트의 업데이트가 필수적입니다. 이 점은 테스트 자동화를 운영하는 모든 조직이 고민하는 문제일 텐데요, 저희는 이를 해결하기 위해 다음과 같은 전략을 채택했습니다.

팀 구성원의 프로그래밍 및 테스트 자동화 역량을 지속적으로 향상시켜, 향후 테스트 자동화 역량을 갖춘 인력풀을 보유함으로써 업무 전환 및 대체가 가능하도록 했습니다. 이를 위해 기존 자동화 파트 담당자가 전담하던 유지보수 업무 중 일부를 각 서비스 영역 QA가 담당할 수 있도록 하였습니다.

이 과정을 원활히 진행하기 위해 업무와 병행하면서 Python 프로그래밍 기초와 자동화 스크립트 작성 등 유지보수를 위한 교육을 진행하였고, 이후에도 기존 자동화 파트 담당자들이 멘토 역할을 하며 지속적으로 지원했습니다.

현재는 각 서비스별 QA담당자가 새로운 기능의 추가와 기존 기능의 수정은 물론, 테스트 결과가 Fail 인 경우 빠르게 대응할 수 있게 되었습니다. 이를 통해 QA팀은 테스트 자동화의 신뢰도와 효율성을 더욱 높일 수 있었습니다.

마치면서…

무신사 QA팀은 지속적인 점검과 개선을 통해 테스트 자동화의 신뢰도와 효율성을 높이며, 서비스 품질을 높이기 위한 방안을 고민하고 있습니다. 앞서 설명드린 다양한 전략과 접근 방식을 통해 무신사는 빠르게 변화하는 개발 환경에서도 높은 품질의 서비스를 제공하고 있습니다.

테스트 자동화는 단순히 반복적인 테스팅을 대체하는 수단이 아니라, 오류를 사전에 탐지하고 안정적인 서비스 운영을 점검함으로써, 고객이 체감하는 품질을 높이고 비용을 절감하는 중요한 솔루션입니다.

무신사 QA팀은 앞으로도 필요한 테스트 자동화 기술을 검토하고 적용하며, 팀 구성원의 역량을 강화하여 더욱 안정적이고 효율적인 테스트 프로세스를 적용해나가겠습니다.

다음 블로그에서는 모바일과 API 테스트 자동화에 대해 다룰 예정이니 많은 관심 부탁드립니다.

Musinsa CAREER

함께할 동료를 찾습니다.
무신사 QA팀은 테크조직이 개발하고 운영하는 제품을 검증하고, 서비스의 품질을 보장하기 위해 헌신하는 전문가들로 구성된 팀입니다. 저희 팀의 목표는 고객에게 최고의 경험을 제공하고, 제품이 예상대로 작동하며, 모든 요구 사항을 충족하는지 확인하는 것입니다.

무신사는 매년 빠르게 성장하며 새로운 문제를 마주하고, 문제를 해결하기 위해 새로운 기술을 적극적으로 도입하고 있습니다.
전국민이 사용하는 1위 패션 플랫폼 무신사에서 기술로 비즈니스를 성장시키는 경험을 함께하고 싶으시다면 아래 채용 페이지를 통해 지원해 주세요!

무신사 채용 페이지 : https://corp.musinsa.com/ko/career

Reference

--

--

Sanghyun Park
MUSINSA tech

프로덕트 전반적인 품질보증과 관리를 담당하며 항상 수준높은 서비스를 제공하는 것을 목표로 합니다. 테스트 자동화 기술에 관심이 많고, 데이터 주도적인 사고 방식을 추구합니다.