$30 off During Our Annual Pro Sale. View Details »

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

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

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

MICROSOFTWARE

December 17, 2018
Tweet

More Decks by MICROSOFTWARE

Other Decks in Programming

Transcript

  1. 마소콘 주제 : 기술부채
    모바일 앱 테스트 관련 오픈소스(기고 내용)
    모바일 앱 서비스 테스트 자동화 기술 소개
    MASOCON 2018

    View Slide

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

    View Slide

  3. 앱 서비스 품질 요구사항을 맞추기 위해서
    • 모바일 앱
    ✓ 개발 기간 주기적인 정적분석 및 unit test, 통합 테스트를 통한 버그성 코드
    제거
    ✓ 배포 후 에러와 성능 모니터링
    • 서버
    ✓ 개발기간 주기적인 API 기능 및 시나리오 기반 성능 테스트
    ✓ 배포 후 에러 및 성능 모니터링

    View Slide

  4. 불만사항
    ✓ 모바일 앱 테스팅 환경 설정이 까다롭다. 환경 설정하다 날샌다.
    ✓ 앱 서비스 개발 후, 테스트를 따로 할 시간이 없다.
    ✓ 화면 설계에 대한 잦은 변경으로 인해 테스트 스크립트 개발이 어렵다.
    개발 시간이 없다.

    View Slide

  5. 테스트 도구 요구사항
    ✓ 앱 서비스 개발 환경과 테스트 환경은 별도로 관리되어야 한다.
    ✓ 테스트 환경 셋업은 자동화되어야 한다.
    ✓ 테스트는 CI/CD와 함께 개발 기간동안 지속적으로 수행될 수 있어야
    한다.
    ✓ 테스트 스크립트는 가급적이면 자동으로 생성되어야 한다.

    View Slide

  6. 모바일 앱 테스트
    서비스

    View Slide

  7. Google Play Console
    ① 알파/베타 테스트 설정
    ② A/B 테스트 실행
    ③ 사전 출시 보고서를 통해 문제 확인
    ④ 오류 스택 추적 난독 해제
    ⑤ 통계보기
    ⑥ 애플리케이션 라이센스로 인앱 결제 테스트
    ⑦ 실적 알림 검토

    View Slide

  8. 비정상 종료
    ⚫ 테스트 요약에는 문제가 있는 기기, 문제가 없는 기기, 테스트 완료 기기 정보가 포함됨
    ⚫ 이전 APK의 호환성 테스트 결과와 비교한 데이타
    성능
    ⚫ 평균 CPU : 특정 기기 모델에서 앱의 평균 CPU 사용량 백분율
    ⚫ 전송된 평균 네트워크 : 네트워크 연결을 통해 앱에서 전송한 초당 평균 바이트수
    ⚫ 수신된 평균 네트워크 : 네트워크 연결을 통해 앱으로 전송된 초당 평균 바이트수
    ⚫ 평균 메모리 : 선택한 기간에 앱에서 사용한 평균 메모리
    보안
    ⚫ 보안 취약성 관련 문제의 이름과 설명이 포함됨

    View Slide

  9. Google Firebase Test Lab

    View Slide

  10. Robo 테스트(테스트 케이스 등록없이 테스트), 도구 작동
    테스트(로보티움, 에스프레소, 애피움(UIAutomator2) 용 테스트
    케이스 등록하여 테스트), 게임 루프 테스트 제공
    테스트 도중에 발생하는 테스트 로그, 스크린 샷, 리소스 사용량,
    동영상, 활동 지도 맵을 확인할 수 있음
    무료로 최대 5개 디바이스에서 테스트 진행

    View Slide

  11. AWS Device Farm

    View Slide

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

    View Slide

  13. Azure ATAM

    View Slide

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

    View Slide

  15. 테스트 스크립트 작성(optional),
    테스트 앱
    테스트 설정 디바이스 선택
    테스트 수행
    테스트 결과 보고
    - 테스트 이미지(UI 이벤트와 함께 맵화)
    - 동영상
    - 테스트 결과
    - 테스트 로그
    - 리소스 사용 추이
    - 크레시, ANR 보고(optional)
    - 스크릿샷 간의 UI 활동 맵(optional)
    각 서비스 간의 공통점과 차이점

    View Slide

  16. 공통점
    ⚫ 디바이스 팜을 제공하고 여러 디바이스를 선택해 동일한 앱을 병렬로
    테스트 할 수 있음
    ⚫ 테스트 중에 발생하는 테스트 로그/앱 로그/ 테스트 전후 스크린샷/테스트
    동영상/리소스 사용량(CPU, Memory 등)을 확인할 수 있음
    차이점
    ⚫ 테스트 코드 작성 필수 유무, 테스트 코드 모듈화(재사용 용도) 지원 여부
    ⚫ 스크린 샷들 사이 발생한 UI 이벤트 맵 지원 여부

    View Slide

  17. 디바이스 팜 구성을 위한 오픈소스 소개
    - 오픈소스 아키텍쳐 및 기능 소개
    - 셋업 방법

    View Slide

  18. OpenSTF 소개
    04 소개
    다수의 디바이스를 디바이스팜으로
    구성해 호스팅할 수 있게 해주는
    오픈소스
    https://openstf.io

    View Slide

  19. 사이버에이전트(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) 관리 기능 제공

    View Slide

  20. 디바이스 원격 제어

    View Slide

  21. Device 상태 모델명 제품명 통신사 출시일 연결 네트워크
    운영체제 설치위치
    연결된 디바이스 정보 제공

    View Slide

  22. Restful API 사용을 위한 토큰 관리,
    디바이스 ADB 키 관리

    View Slide

  23. 아키텍쳐 특성

    View Slide

  24. 구성
    ⚫ 클라이언트 라이브러리, 프로그램
    ⚫ 백엔드
    ⚫ 프론트엔드

    View Slide

  25. 클라이언트 레이어(Client Layer)
    - STFService.apk
    - 미니터치(Minitouch)
    - 미니캡(Minicap)

    View Slide

  26. 프론트엔드 레이어(Frontend Layer)

    View Slide

  27. 백엔드 레이어(Backend Layer)
    - 프로바이더(Provider)
    - 프로세서(Processor)
    - 애플리케이션(Application)

    View Slide

  28. 서비스 배포
    ✓ 각 마이크로 서비스는 컨테이너 기반으로 배포될 수 있도록 도커
    이미지 제공
    ✓ 리눅스에서 서비스로 실행 및 관리할 수 있도록 systemd 서비스 파일
    제공
    ✓ 플릿(Fleet)으로 각 서비스를 분산 배포하는 ‘Vagrant’ 예제 제공

    View Slide

  29. 테스트 프레임워크를 위한 오픈소스 소개

    View Slide

  30. 모바일 앱 테스트를
    자동화 해주는
    UI 테스트 기반
    오픈소스 라이브러리
    https://appium.io

    View Slide

  31. Native Hybrid Web
    모든 종류의 모바일 앱 테스트 지원

    View Slide

  32. 다양한 테스트 작성 언어 선택 가능

    View Slide

  33. BDD 기반 테스트 작성 지원

    View Slide

  34. 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

    View Slide

  35. 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

    View Slide

  36. XCUITest https://github.com/appium/appium/blob/master/docs/en/drivers/ios-xcuitest.md
    UIAutomation https://github.com/appium/appium/blob/master/docs/en/drivers/ios-uiautomation.md
    UIAutomator2 https://github.com/appium/appium/blob/master/docs/en/drivers/android-uiautomator2.md
    UIAutomator https://github.com/appium/appium/blob/master/docs/en/drivers/android-uiautomator.md
    Selendroid https://github.com/appium/appium/blob/master/docs/en/drivers/android-selendroid.md
    WinAppDriver https://github.com/appium/appium/blob/master/docs/en/drivers/windows.md
    UIAutomator2
    각 벤더사가 제공하는 프레임워크 활용

    View Slide

  37. 1. Json 포맷 명령어
    via HTTP
    2. platform tool
    호출하여 명령어 전달
    3. 명령어 실행에 대한
    결과 전달
    4. 전달받은 결과
    콘솔에 로깅
    테스트 아키텍쳐

    View Slide

  38. 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 테스트 라이프 사이클

    View Slide

  39. 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 테스트 라이프 사이클

    View Slide

  40. Sample app : https://github.com/appium/sample-code
    Community forum : https://discuss.appium.io/
    Issue tracker : https://github.com/appium/appium/issues
    참고 사이트

    View Slide

  41. 도구 – Appium Inspector

    View Slide

  42. 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

    View Slide

  43. 오픈소스 활용
    모바일 앱 테스트
    서비스 구현

    View Slide

  44. Base OS

    View Slide

  45. Thanks

    View Slide