기술인사이트

기술리포트

모바일 자동화 테스트 소개 및 수행 사례

서론

QA에서 자동화 테스트는 필수적인 요소로 자리 잡아가고 있습니다.

자동화 테스트의 장점으로는 다양한 디바이스 환경에서 반복적인 테스트를 자동으로 수행하여 이를 통해 결함을 신속하게 발견할 수 있습니다.
IT 서비스의 품질을 높이는데 중요한 역할을 하고 있는 테스트 자동화 도구 중 Appium의 소개와 Appium를 이용하여 자동화 테스트를 진행 시 실제로 사람이 직접 테스트하는 경우를 비교하여 수치적으로 자동화 테스트가 얼마나 효과적인지 확인해 보고자 합니다.

Appium을 선정한 이유
Appium은 iOS 모바일, Android 모바일 및 Windows 데스크톱 플랫폼에서 기본, 모바일 웹 및 애플리케이션을 자동화하기 위한 도구입니다.
위 기재한 내용과 같이 Appuim은 동일한 API를 사용하여 여러 플랫폼에서 테스트를 작성할 수 있으며, 특히 모바일 앱의 회귀 테스팅을 단순화하는 데 도움이 되기 때문에 인기가 있습니다.
모바일 자동화 테스트 시장에서 Appium이 사실상 표준에 가깝게 활용되고 있어 선정하게 되었습니다.

Appium 작동 방식
Appium은 Node.js 플랫폼을 사용하여 [HTTP]로 통신하게 됩니다.
Web driver JSON 유선 프로토콜을 사용하여 iOS 및 Android 세션을 구동할 수 있습니다.

<Appium 작동 방식>

Appium이 다운로드 되고 성공적으로 설치되는 즉시 서버가 머신에 배치되어 REST API를 노출하고
그 작업은 모바일 장치를 통해 해당 명령을 실행하기 위해 클라이언트로부터 직접 명령 요청과 함께 연결을 수신하게 됩니다.
그 결과 HTTP 응답을 통해 응답하며 또한 이 요청을 다시 실행하기 위해 모바일 테스트 자동화 프레임워크를 사용하는 방식으로 해당 앱의 사용자 인터페이스를 작동합니다.

Appium 세팅에 필요한 프로그램
Appium을 통해 모바일 앱을 테스트하기 위해서는 하기에 기재한 4가지의 프로그램을 설치해야 하는 것들이 있습니다.
* Python 3 (OS에 맞게 다운로드 및 설치)
* Pycharm (자신에게 맞는 IDE 사용)
* Android Studio
* Appium Desktop

자동화 테스트 수행 프로세스
자동화 테스트를 하기 위해서는 먼저 수행에 대한 프로세스가 필요합니다.
자동화 프로세스는 체계적인 절차에 의해 테스트 실행 중 실수를 최소화하여 일관된 테스트 품질을 확보할 수 있습니다.
자동화 테스트 수행 프로세스는 아래와 같습니다.

<자동화 테스트 수행 프로세스>


자동화 테스트 케이스 설계 방법
Appium을 통해 테스트 스크립트를 작성하기 위해서는 우선적으로 테스트 케이스부터 작성이 진행되어야 합니다. 일반적인 블랙박스 기법의 테스트 케이스와 자동화 테스트 케이스의 차이점에 대해 몇 가지 설명하겠습니다.

1. 동작되는 과정에서 딜레이에 대한 고려하여 작성
예시로서 쇼핑몰의 메인화면 진입 후 상품 상세 페이지 진입하는 케이스를 작성한다고 가정하면 일반적인 블랙박스 기법의 테스트 케이스의 경우는 쇼핑 페이지 진입 후 상품을 선택한다는 케이스를 작성하게 됩니다.
하지만 자동화 케이스의 경우는 메인 화면을 진입할 경우와 쇼핑에서 상품을 선택하는 과정에서 소요 및 안정되는 일정 대기시간을 거친 후 상품 상세페이지로 진입하는 케이스를 작성해야 합니다.

2. 입력하는 방법에 대한 케이스를 고려하여 작성
예시로서 로그인하는 일반 테스트 케이스의 경우에는 계정 정보(ID / PW) 입력 후 로그인 버튼을 선택하는 케이스로 작성하여 수행하게 됩니다.
* ID 및 PW 입력 -> 로그인 버튼 클릭
하지만, 자동화 케이스의 경우에는 계정 정보 (ID / PW) 입력 창을 선택 후 임의의 계정 정보를 입력하고 선택하는지에 대한 내용까지 작성되어야 합니다.
* ID 입력창 선택 -> ID 정보 명시적으로 등록 -> PW 입력창 선택 -> PW 정보 명시적으로 입력 -> 로그인 버튼 클릭

3. 실패 판정에 대한 테스트 케이스를 고려하여 작성
예시로서 로그인 실패에 대한 케이스를 작성한다고 가정한 경우, 일반 테스트 케이스의 경우에는 다른 계정을 사용하여 로그인 시도 및 결함을 작성하여 등록하게 됩니다.
하지만 자동화 테스트 케이스의 경우에는 실패했을 시 그 기록을 로그로 남기고, 동일한 계정 정보를 이용하여 다시 로그인하여 수행될 수 있도록 케이스를 작성합니다.

Appium 자동화 테스트 케이스 작성
테스트 케이스 작성에 앞서 자동화 테스트 케이스를 작성 및 스크립트 작성 완료 후 유지 보수를 위한 케이스에 대한 설명을 같이 하도록 하겠습니다.


<테스트 케이스 작성을 위한 Flow Chart>


테스트 시나리오는 임의의 쇼핑몰 모바일 APP 화면진입 > 홈 > 상품 > 상품 상세 > 장바구니 담기 순서로
케이스를 작성하도록 하겠습니다.


<App 로그인 중 SNS 대상에 따라 로그인 테스트 케이스 참고 예시>

테스트를 위해 테스트 실행 후 로그인 화면에서 로그인을 선택하여 진입할 수 있도록 작성을 하였습니다.
이메일 로그인 및 각 SNS 로그인 테스트 수행이 가능하도록 고려하여 작성하였으며, App 대상으로 SNS 로그인 대상으로 진입 케이스 예시입니다.


<쇼핑 페이지 내에서 상품 선택하는 케이스 예시>

쇼핑 페이지 내에서 상품을 선택하는 케이스는 특정 영역을 찾을 수 있는 키워드나 이미지를 찾는 방법으로 작성되어야 합니다.
해당 영역을 찾았을 경우와 못 찾았을 경우 및 제한 시간 내에 못 찾았을 경우에 대한 내용도 작성되어야 합니다.

Appium Test Script 작성
테스트 케이스 작성이 완료되었다면, 스크립트를 작성하여 케이스에 해당되는 부분에 대해 스크립트로 다시 변환하여야 합니다.

<스크립트 작성 완료 후 테스트 케이스 예시>

스크립트 작성에 있어서는 크게 객체 기반과 키워드 기반으로 구분되며, 주요 차이점은 아래와 같습니다.


해당 스크립트를 작성함에 있어서 자동화 테스트에서 코드의 재사용, 가독성, 유지 보수성을 향상시키기 위 객체화(Objectification) 방법이 주로 사용되었고, 간단한 케이스(예시: 키워드로)의 경우에는 키워드 기반의 방법을 적절하게 활용 하였습니다. 

<객체화 전 코드 참고 예시>

일반 스크립트를 객체화하지 않게 될 경우 참고 이미지와 같이 로그인 버튼을 클릭하는 부분을 여러 번 반복된 스크립트로 작성하게 됩니다.
이렇게 될 경우 로그인 버튼을 클릭하는 부분을 여러 번 반복하게 되고 로그인 버튼의 ID가 변경된다면 모든 클릭 코드에서 ID를 변경해 주어야 하는 상황이 되게 됩니다.

<객체화 한 후 참고 예시>

하지만 객체화를 진행하게 되면 테스트 자동화에서 UI 요소를 객체로 모델링 하여 이를 통해 코드의 재사용성 및 가독성 등 유지 보수성을 향상시킬 수 있습니다.
또한 객체화된 요소는 메서드를 통해 해당 코드가 상호작용할 수 있게 중복된 코드를 줄일 수 있습니다. UI 변경이 된다면 수정 시 용이하게 수정을 할 수 있게 됩니다.

Appium 스크립트 실행 결과
이제 객체화를 진행 완료하였으니 자동화 테스트를 진행을 하기 위해 Appium Inspector 과 Appium를 실행하여 서버를 실행합니다.

<Appium 및 Appium Inspector 실행화면>

Appium 및 Appium Inspector 실행한 후 작성해둔 스크립트 실행을 준비합니다.

<스크립트 실행 화면>

상기의 이미지대로 실행할 경우 영상처럼 동작하게 됩니다.
실행이 완료되면 결과값이 하단에 노출되게 됩니다.

<결과값 노출 참고 화면>

자동화 테스트 수행 결과
▶ 자동화 테스트 실행 환경
- 테스트 자동화 도구  Appium
- 테스트 스크립트 언어  Python
- 테스트 서버 환경 : Windows 11
- 테스트 단말 연결 방법 : Android 단말 10대 동시 병렬 연결

▶ 테스트 단말 환경

▶ 네트워크 환경
- 테스트 환경 : Wi-Fi 및 5G 네트워크 환경에서 테스트
- 주요 테스트 조건
- Wi-Fi 환경 : 안정적인 연결을 위한 100Mbps
- 모바일 네트워크 : 5G 연결 테스트 포함

▶ 테스트 대상
- 테스트 대상 앱 : C사 쇼핑몰 모바일 App
- 테스트 유형 : 기능 테스트, UI 테스트

▶ 테스트 시나리오
테스트 단말 10대 기준으로 동일한 시나리오로 사람이 직접 매뉴얼로 테스트한 결과와 자동화 테스트 도구를 이용하여 테스트한 결과를 비교 확인을 진행 하였습니다.
매뉴얼 테스트와 비교 시 자동화 테스트 수행을 통해 인적 리소스에 있어 아래와 같은 결과를 얻었습니다.

▶ 테스트 단말 10대 기준, 매뉴얼 테스트 vs 자동화 테스트 속도 비교

<매뉴얼 테스트 vs 자동화 테스트 그래프>

결론
▶ Appium을 통해 자동화 테스트를 진행 시 장단점
Appium 이용하여 자동화 테스트 환경 구축부터 실행까지의 전과정을 진행해 본 결과,
체감적으로 느껴지는 장단점은 아래와 같습니다.

* 장점

* 단점

실제 여러 가지 단점이 있었지만, 자동화 테스트를 진행하여 얻어지는 효과는 단점보다 장점이 크게 상회한다고 생각합니다.
테스트 반복 수행을 통한 문제점 발견을 위하여 자동화 테스트를 통한 업무 효율화는 필수라고 생각합니다.
필자는 별도 개발 경력은 보유하고 있지 않은 7년 경력의 테스트 엔지니어입니다.
평소 자동화 테스트에 대해 관심은 가지고 있었지만, 자동화 테스트 도구를 활용하는 것이 어려워 보여 심적으로는 후순위로 생각하고 있었습니다.

하지만, 이번 기술 리포트를 통하여 자동화 테스트에 대해 본격적으로 공부할 계기가 되었으며, 당연하게도 초기 자동화 테스트 환경 설정에 많은 시행착오를 겪은 것도 사실입니다.

이러한 어려움에도 불구하고, 자동화 테스트 설계부터 결과 도출까지 진행하였으며 자동화 테스트에 대한 장점과 단점에 대해서도 명확하게 인지할 수 있는 계기가 되었습니다.

실제로 이러한 자동화 테스트의 효과성에 대해 크게 체감할 수 있는 기회가 되었으며, 향후에는 지속적인 공부를 통해 장기적인 관점에서 자동화 테스트를 내재화하여 현업에서 테스트의 품질을 높이고자 합니다.