많은 QA 팀들이 매일같이 부딪히는 현실적인 고민거리들 중 한 가지가 있는데요
그것은 바로 다양한 기기에서 앱이 제대로 작동하는지 확인하는 테스트 준비 과정에서의 비용이 너무 많이 샌다는 것! 입니다.
실제로도 많은 QA 팀들이 겪는 현실적인 문제는 여러 가지가 있지만, 단연코 비용적으로 가장 민감할 수밖에 없는 부분은 이 부분이죠...
QA 팀은 실제 환경에서의 테스트를 위해 여러 가지 기기를 보유하게 되는데요, 앱 QA만 따져도 Galaxy S 시리즈, LG폰, iPhone 8부터 iPhone 14까지 20종이 넘는 기기를 보유하고 있어야 합니다...ㄷㄷ
"QA 를 위해서라면 당연히 준비해야 하는 거 아냐?"

라고 생각할 순 있지만.... 중소기업이나 소규모 QA 팀의 경우 테스트 기기를 직접 보유하고 관리하는 방식은 상당한 부담으로 작용할 수도 있습니다.
물론 기기를 사서 작업대 위에 쌓아두면 언뜻 든든해 보일 수도 있지만, 막상 테스트가 시작되면 충전, 초기화, OS 업데이트, 기기 오류 등 눈에 안 보이는 잡일들이 산더미처럼 몰려옵니다.
이 기기들은 OS 업데이트 관리, 충전 상태 유지, 물리적 손상 관리까지 필요하고, 테스트할 때마다 기기를 찾고 연결하는 데도 상당한 시간이 소요되기도 하죠...
정말 구비해야 할 디바이스 종류가 왜 이리 많은 것일까요...? ㅠㅠ
그렇지만 디바이스를 대체할 수 있는 수단은 그 디바이스뿐... 정확한 QA를 위해서는 이 정도 손실은 감당해야 합니다. 해당 문제를 대처할 방안은 따로 없으니까요......
.........

라고 할 줄 알았다면 당신은 속았습니다~
당연히 이런 데에도 다 솔루션이 있죠!
이 솔루션은 출시된 지 좀 되어서 아시는 분들도 많으실 테고 모르시는 분들도 꽤 있으실 텐데요,
AWS가 또 해냈습니다.
AWS Device Farm을 들어보셨을까요?
AWS Device Farm은 실제 모바일 기기에서 다양한 조건을 시뮬레이션해 자동 테스트를 수행할 수 있도록 지원하는 도구인데요,
AWS Device Farm은 2015년 7월 9일에 공식 출시되어서 완전 신세대 서비스는 아니지만 실제 Android 및 Fire OS 기기에서 클라우드 기반으로 앱을 테스트할 수 있도록 지원하기 때문에 현재까지도 충분히 혁신적인 기로에 놓여있다고 생각해요.
AWS Device Farm을 적절히 활용하면 앱 테스트의 복잡함을 클라우드에서 손쉽게 해결함으로써 테스트 자동화, 디바이스 호환성 확보, 릴리즈 속도 향상 등을 유도할 수 있겠죠?
그렇다면, AWS Device Farm에서는 테스트를 어떻게 실행시켜야 할까요?

기초적인 사용 방법은 실시간으로 앱을 로드하여, 실행 및 상호작용할 수 있는 장치에 대한 원격 액세스가 이루어져야 하는데요,
먼저 원하는 디바이스 기기를 선택한 다음, apk 파일 또는 ipa 파일을 업로드해서 가상환경 디바이스에 앱 설치를 해야지 기초 세팅이 완료됩니다!
위 과정을 통해 실제 단말과 동일하게 동작할 수 있게 되는 것이죠.
그다음 테스트를 진행하려면, 기존에 작성해 둔 테스트 프로젝트 파일이 있어야 해요.
이는 기존 작성한 테스트 코드의 프레임워크 종류를 먼저 파악한 다음
프로그래밍 언어 / 테스트 도구 / 자동화 방식에 따라 다양한 옵션을 고른 뒤 테스트 프로젝트 파일을 실행할 수 있는데요,
AWS Device Farm에서 실행시킬 수 있는 테스트 종류는 아래와 같습니다...!

위처럼 코드 없이 간단하게 앱만 돌려보고 싶을 수도 있고, 이미 Appium으로 테스트 코드를 짜놓은 경우도 있을 텐데요, AWS Device Farm은 대부분의 경우에도 UI 테스트 및 네이티브 테스트 환경을 지원해 줘서 유연하게 클라우드 테스트를 진행할 수 있겠네요!
시나리오 1: QA 엔지니어가 Python으로 Appium 테스트 작성함
선택: Appium Python
시나리오 2: 안드로이드 개발자가 Espresso로 유닛 테스트 작성함
선택: Instrumentation
시나리오 3: iOS 앱의 UI를 자동 테스트하고 싶음
선택: XCTest
시나리오 4: QA팀이 직접 코드를 안 쓰고 단순하게 앱을 눌러보고 싶음
선택: Built-in: Explorer
간단하게 Appium과 TestNG를 적용했을 때의 예시를 한번 들어볼까요?
테스트 파일 구조를 아래처럼 설정해둬 볼게요.
MyAppTest/ ├── src/ │ └── test/ │ └── java/ │ └── LoginTest.java ├── testng.xml └── pom.xml |
위 파일을 압축해서 MyAppTest.zip 압축 파일로 만든 뒤 업로드합니다!
AWS Device Farm은 테스트 코드와 설정을 압축해서 업로드해야 해요.
압축 파일에는 반드시 testng.xml과 pom.xml이 포함되어야 합니다...!
자세한 실행 과정 및 이미지는 아래 블로그를 참고해 주세요!
Running Automation Tests on AWS Device Farm using Appium and TestNG
I have given a task of running my mobile automation tests on AWS Device Farm. We used to run our tests locally on both Android and iOS…
medium.com
<Appium Java TestNG>로 테스트 유형을 선택한 뒤
Galaxy S22, Pixel 6, Android 12 등 원하는 디바이스 기기를 선택하여 테스트 실행을 해주면 됩니다!
테스트가 실행되면 각 디바이스에서 스크린샷, 비디오, 로그가 자동으로 수집되는데요, 콘솔에서 성공 여부, 실패 이유, 예외 로그 등을 바로 확인할 수 있다고 합니다...!

아마존 웹 서비스 공식사이트에서 위 같은 디바이스 테스트 자동화 솔루션 예시를 등록하였는데요,
이 방식은 개발 환경을 로컬에 별도로 설정할 필요 없이, 클라우드에서 수십 개의 실기기로 테스트를 자동화할 수 있다는 점이 특별한 것 같습니다!
안드로이드의 경우, Android Studio에서 필요한 SDK, Tool, API들을 누락 없이 전부 다운로드하여야 하는데 여기서 하나라도 설치가 안되면 이후 Appium Server가 실행이 안 되는 경우가 있어요.
그러나, DeviceFarm의 경우 사용자가 로컬에서 Appium 서버를 따로 띄우는 게 아니라, AWS Device Farm 쪽에 Appium 서버가 이미 떠있는 형태이기 때문에, 테스트할 파일만 업로드하면 됩니다...!
앱(.apk, .ipa) 파일 + 테스트 스크립트(pytest + Appium 테스트 코드)를 업로드하면, Device Farm이 알아서 디바이스에 앱을 설치하고, 스크립트를 실행하는 환경을 구성하게 되는 것이죠.
더 나아가 CI/CD 파이프라인과 총합하여 자동으로 리포트를 생성하고 공유할 수도 있어요 :)
테스트 실행 샘플 앱들도 여러 가지 있어서 차근차근 확인해 보셔도 좋을 것 같습니다!
https://github.com/aws-samples/aws-device-farm-sample-app-for-android
GitHub - aws-samples/aws-device-farm-sample-app-for-android: AWS Device Farm sample Android app
AWS Device Farm sample Android app. Contribute to aws-samples/aws-device-farm-sample-app-for-android development by creating an account on GitHub.
github.com
위 같은 방법을 활용하면 디바이스 기기 내 시스템 품질 보증에 대해 평소와는 조금 다른 솔루션을 제공해 줄 수 있을 거 같지 않나요?
반복적인 수동 테스트를 제거하고, 하루 수십 번의 빌드 테스트 자동화가 가능하도록 만들어주는 것이죠!
하지만 단점도 있는데요, 테스트 실행 시마다 대기 시간이 발생할 수 있고, 디바이스 가용성이 제한될 경우 테스트가 지연되기도 합니다.
게다가 대규모 테스트를 자주 실행하면 비용이 빠르게 증가할 수 있기 때문에 장기적으로는 정교한 사용량 관리와 테스트 전략이 요구되기도 합니다.
무엇보다 정교한 QA가 필요할 때 약간의 환경 변수가 발생할 수도 있는데요,
실제 디바이스에서의 UI 반응 시간이나 네트워크 지연 등의 변수는 시뮬레이터와 달리 디버깅이 다소 번거롭거나 예상보다 복잡한 결과를 유발하기 때문에
실질적인 이슈를 놓치게 되는 경우도 분명히 있을 수가 있죠....
그럼에도 불구하고, AWS Device Farm은 테스트의 신뢰성과 효율성을 대폭 향상해 주는 혁신적인 플랫폼임은 분명하며, 특히 다양한 OS, 해상도, 제조사 기기에서의 호환성 테스트를 자동화하고 싶은 팀에게 매우 강력한 선택지가 될 수도 있다는 점!
알려드리고 싶었습니다 :)
마지막으로 CEO 형식 멘트 하나 뿌리고 글 마무리하도록 하겠습니다!
“더 이상 수십 대의 테스트폰을 직접 관리할 필요가 없습니다. AWS Device Farm은 실제 디바이스에서 수백 개의 테스트를 동시에 실행해, 개발팀이 가장 빠르게 사용자 경험을 개선할 수 있도록 돕는 완전히 새로운 접근 방식입니다.”