Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

[마소콘2018] 디바이스팜, 크래시 리포트 서비스 활용 모바일앱 테스트 자동화 - 황희선

[마소콘2018] 디바이스팜, 크래시 리포트 서비스 활용 모바일앱 테스트 자동화 - 황희선

2018년 12월 15일 마이크로소프트웨어 콘퍼런스, 마소콘 2018
디바이스팜, 크래시 리포트 서비스 활용 모바일앱 테스트 자동화 - 황희선

MICROSOFTWARE

December 17, 2018
Tweet

More Decks by MICROSOFTWARE

Other Decks in Programming

Transcript

  1. 마소콘 주제 : 기술부채 모바일 앱 테스트 관련 오픈소스(기고 내용)

    모바일 앱 서비스 테스트 자동화 기술 소개 MASOCON 2018
  2. 모바일 앱 서비스 ✓ 짧은 개발 기간 ✓ 높아진 고객의

    눈높이를 맞추기 위해 앱 출시 주기가 짧아지고 (잦은 변경 및 배포) ✓ 다른 하드웨어 사양 및 운영체제 버전을 가진 단말이 계속 출시
  3. 앱 서비스 품질 요구사항을 맞추기 위해서 • 모바일 앱 ✓

    개발 기간 주기적인 정적분석 및 unit test, 통합 테스트를 통한 버그성 코드 제거 ✓ 배포 후 에러와 성능 모니터링 • 서버 ✓ 개발기간 주기적인 API 기능 및 시나리오 기반 성능 테스트 ✓ 배포 후 에러 및 성능 모니터링
  4. 불만사항 ✓ 모바일 앱 테스팅 환경 설정이 까다롭다. 환경 설정하다

    날샌다. ✓ 앱 서비스 개발 후, 테스트를 따로 할 시간이 없다. ✓ 화면 설계에 대한 잦은 변경으로 인해 테스트 스크립트 개발이 어렵다. 개발 시간이 없다.
  5. 테스트 도구 요구사항 ✓ 앱 서비스 개발 환경과 테스트 환경은

    별도로 관리되어야 한다. ✓ 테스트 환경 셋업은 자동화되어야 한다. ✓ 테스트는 CI/CD와 함께 개발 기간동안 지속적으로 수행될 수 있어야 한다. ✓ 테스트 스크립트는 가급적이면 자동으로 생성되어야 한다.
  6. Google Play Console ① 알파/베타 테스트 설정 ② A/B 테스트

    실행 ③ 사전 출시 보고서를 통해 문제 확인 ④ 오류 스택 추적 난독 해제 ⑤ 통계보기 ⑥ 애플리케이션 라이센스로 인앱 결제 테스트 ⑦ 실적 알림 검토
  7. 비정상 종료 ⚫ 테스트 요약에는 문제가 있는 기기, 문제가 없는

    기기, 테스트 완료 기기 정보가 포함됨 ⚫ 이전 APK의 호환성 테스트 결과와 비교한 데이타 성능 ⚫ 평균 CPU : 특정 기기 모델에서 앱의 평균 CPU 사용량 백분율 ⚫ 전송된 평균 네트워크 : 네트워크 연결을 통해 앱에서 전송한 초당 평균 바이트수 ⚫ 수신된 평균 네트워크 : 네트워크 연결을 통해 앱으로 전송된 초당 평균 바이트수 ⚫ 평균 메모리 : 선택한 기간에 앱에서 사용한 평균 메모리 보안 ⚫ 보안 취약성 관련 문제의 이름과 설명이 포함됨
  8. Robo 테스트(테스트 케이스 등록없이 테스트), 도구 작동 테스트(로보티움, 에스프레소, 애피움(UIAutomator2)

    용 테스트 케이스 등록하여 테스트), 게임 루프 테스트 제공 테스트 도중에 발생하는 테스트 로그, 스크린 샷, 리소스 사용량, 동영상, 활동 지도 맵을 확인할 수 있음 무료로 최대 5개 디바이스에서 테스트 진행
  9. AWS 클라우드 상에 호스팅된 수 많은 실제 디바이스(스마트폰, 태블릿 등)와

    웹브라우져에서 직접 실기간으로 연결해 상호작용 할 수 있음 애피움(Appium), 칼라바쉬(Calabash), 로보티움(Robotium), 에스프레소(Espresso) 등 많은 테스트 프레임워크 상에서 앱을 테스트 할 수 있음 앱 테스트 중 액션 발생 후 동작을 기다리는 시간이나 전체 테스트 시간의 타임아웃을 설정할 수 있음 테스트 스크립트가 불필요한 퍼즈(Built-in) 테스트를 이용할 수 있음. 앱에 여러 사용자의 입력, 터치, 쓸어넘기기, 키보드 입력을 통해 UI테스트를 실시함. 이벤트수, 간격, 랜덤 이벤트에 사용되는 난수를 설정할 수 있음 테스트 도중에 발생하는 테스트 로그, 앱 로드, 테스트 스크린 샷, 리소스 사용량을 확인할 수 있음
  10. MS 애저(Azure) 클라우드 상에 호스팅된 수 많은 실제 디바이스(스마트폰, 태블릿

    등)와 에뮬레이터 상에서 테스트 할 수 있음 GUI 기반 테스트 시나리오 생성으로 일반 사용자도 쉽게 테스트 작성이 가능함 해상도와 OS별로 다수 단말에서 동시 테스트 가능 자주 사용되는 화면은 모듈 그룹화해 재사용할 수 있게 함으로서 시나리오 생성 시간을 최소화할 수 있음 결과 로그의 DB 저장과 실시간 분석 리포트를 제공함 웹(Web) 방식을 채택해 원격 모니터링할 수 있고, 시나리오 작성도 여러명이서 할 수 있음 테스트 도중에 발생하는 테스트 로그, 앱 로드, 테스트 스크린 샷, 리소스 사용량을 확인할 수 있음
  11. 테스트 스크립트 작성(optional), 테스트 앱 테스트 설정 디바이스 선택 테스트

    수행 테스트 결과 보고 - 테스트 이미지(UI 이벤트와 함께 맵화) - 동영상 - 테스트 결과 - 테스트 로그 - 리소스 사용 추이 - 크레시, ANR 보고(optional) - 스크릿샷 간의 UI 활동 맵(optional) 각 서비스 간의 공통점과 차이점
  12. 공통점 ⚫ 디바이스 팜을 제공하고 여러 디바이스를 선택해 동일한 앱을

    병렬로 테스트 할 수 있음 ⚫ 테스트 중에 발생하는 테스트 로그/앱 로그/ 테스트 전후 스크린샷/테스트 동영상/리소스 사용량(CPU, Memory 등)을 확인할 수 있음 차이점 ⚫ 테스트 코드 작성 필수 유무, 테스트 코드 모듈화(재사용 용도) 지원 여부 ⚫ 스크린 샷들 사이 발생한 UI 이벤트 맵 지원 여부
  13. 사이버에이전트(CyberAgent)의 시모 키누넨(Simo Kinnunen)과 귄터 브루넌(Günther Brunner)이 사내에서 쓰기 위해

    개발을 시작 2016년 7월부터 헤드스핀(HeadSpin)사와 개인 개발자(OpenSTF라는 이름으로 2015년말부터 시작했음)의 지원을 받고 있음 깃허브(github.com/openstf/stf)에서 2018년 10월 기준 7900개가 넘는 스타와 1200회가 넘는 포크 기록 2018년 8월 9일 3.4.0 버전이 릴리즈 웹브라우저에서 디바이스팜에 접근해 디바이스를 원격으로 제어할 수 있는 서비스 구현을 위한 백엔드, 프론트엔드, 디바이스용 오픈소스 소프트웨어를 제공 사용자 인증, 디바이스 정보 제공, API 사용을 위한 토큰(Token) 관리, ADB키(ADB Keys) 관리 기능 제공
  14. 서비스 배포 ✓ 각 마이크로 서비스는 컨테이너 기반으로 배포될 수

    있도록 도커 이미지 제공 ✓ 리눅스에서 서비스로 실행 및 관리할 수 있도록 systemd 서비스 파일 제공 ✓ 플릿(Fleet)으로 각 서비스를 분산 배포하는 ‘Vagrant’ 예제 제공
  15. Versions : 9.0 and up Devices : iPhone Simulator, iPad

    Simulator, real iPnones, real iPads Native app : debug version .app(simulator), correctly-signed .ipa(real devices) Mobile web : mobile safari automation을 통해 지원, real device 경우, ios-webkit-remote- debugger 필요 Hybrid 지원 : 지원, real device의 경우 ios-webkit-remote-debugger 필요 한 세션 상에서의 여러 앱 동시 테스트 : 미지원 여러 디바이스 동시 테스트 : 미지원 벤더 제공 혹은 third-party 앱에 대한 자동화 : 시뮬레이터 상에서 벤더 제공 앱만 가능 iOS 10 이상 Home Screen 자동화 가능 Appium Platform Support - iOS
  16. Versions : 2.3 and up Devices : Android emulators, real

    Android devices Native app : 지원 Mobile web : Selendroid 의 경우 미지원, 나머지 지원. 4.2 와 4.3에서는 공식 Chrome browser, Chromium 만 지원. 4.4 이상에서는 built-in "Browser" app 지원 가능. 테스트 전에 Chrome/Chromium/Browser 가 설치되어 있어야 함 Hybrid 지원 : 지원 한 세션 상에서의 여러 앱 동시 테스트 : 지원 여러 디바이스 동시 테스트 : 지원, 서로 다른 포트 설정으로 가능 벤더 제공 혹은 third-party 앱에 대한 자동화 : Selendroid 의 경우 미지원, 나머지 지원 Appium Platform Support - Android
  17. 1. Json 포맷 명령어 via HTTP 2. platform tool 호출하여

    명령어 전달 3. 명령어 실행에 대한 결과 전달 4. 전달받은 결과 콘솔에 로깅 테스트 아키텍쳐
  18. 1. (IDE) 서버와 세션 생성 2. (서버) adb를 사용하여 uiautomator2(bootstrap.jar)

    를 device/emulator에 설치 3. (서버) adb를 사용하여 device/emulator 에 앱 설치/실행 4. (서버) 스크립트 명령어를 uiautomator2(bootstrap.jar) 에 전달 5. (서버) Uiautomator 나 Uiautomator2를 실행시킨다 6. (Bootstrap.jar) 명령어를 안드로이드 버전에 맞게 UIAutomator(2) 혹은 Selendroid 명령어로 바꿔 device/emulator 에서 실행하고 결과를 서버에 전달 7. (서버)는 전달받은 결과를 IDE로 전달 8. (IDE) 전달받은 결과 출력 Android 테스트 라이프 사이클
  19. 1. (IDE) 서버와 세션 생성 2. (서버) instruments를 사용하여 bootstrap.js

    를 device/emulator에 설치 3. (서버) instruments를 사용하여 device/emulator 에 앱 설치/실행 4. (서버) 스크립트 명령어를 bootstrap.js에 전달 5. (Bootstrap.js) 명령어를 device/emulator 에서 실행하고 결과를 서버에 전달 6. (서버)는 전달받은 결과를 IDE로 전달 7. (IDE) 전달받은 결과 출력 iOS 테스트 라이프 사이클
  20. 1. 서버와 세션 생성 2. adb 로 bootstrap.jar 설치 3.

    adb 로 application 설치 6. get screenshot 7. find element 4. dump window 8. Set 동작 8. get Page source 8. get screenshot 5. get source adb로 통신 api 로 통신 도구 – Appium Recorder