일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스택 큐 차이
- jvm이란
- 큐 자바 코드
- ANR이란
- 안드로이드 os 구조
- 클래스
- android ar 개발
- 안드로이드 라이선스
- rxjava cold observable
- Rxjava Observable
- 스택 자바 코드
- 2022 플러터 설치
- ar vr 차이
- 자바 다형성
- 안드로이드 유닛테스트란
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 유닛 테스트
- 서비스 vs 쓰레드
- jvm 작동 원리
- rxjava disposable
- 안드로이드 라이선스 종류
- 멤버변수
- 안드로이드 레트로핏 crud
- 서비스 쓰레드 차이
- android retrofit login
- 플러터 설치 2022
- rxjava hot observable
- 안드로이드 레트로핏 사용법
- 객체
- 안드로이드 유닛 테스트 예시
- Today
- Total
나만을 위한 블로그
[Android] Appium이란? 본문
안드로이드의 테스트는 크게 비즈니스 로직을 검증하는 단위 테스트, 안드로이드 API를 같이 사용해 UI와의 상호작용도 같이 검증하는 계측(Instrumented) 테스트의 2가지로 나뉘어진다.
이 글을 찾아온 사람이라면 이미 아는 내용이라 생각되지만, 안드로이드 기준으로 두 테스트의 차이를 간략하게 적으면 아래와 같다.
- 단위 테스트 : 순수 자바 / 코틀린으로 구성된 함수, 클래스 등을 테스트함. JUnit, Kotest, hamcrest 등을 써서 구성할 수 있음
- 계측 테스트 : 에뮬레이터, 실기기에서 작동하는 테스트. 네이티브 UI 테스트는 espresso, 웹뷰의 UI 테스트는 espresso-web을 써서 테스트 작성. 필요 시 JUnit의 일부 기능을 같이 쓸 수 있음
안드로이드의 비즈니스 로직, 유저와의 상호작용을 테스트한다면 보통 이 방법으로 테스트 케이스들을 구성할 것이다.
하지만 만약 하나의 테스트 스크립트로 안드로이드와 아이폰을 모두 테스트할 수 있다면 어떨까? 그렇다면 자바 / 코틀린과 스위프트로 나뉘어진 2종류의 테스트 파일을 유지보수하지 않고, 하나의 파일만 작성하고 유지보수하며 테스트 자동화를 노려볼 수 있을 것이다.
이걸 가능하게 해주는 오픈소스 프레임워크가 Appium이다. 안드로이드, iOS의 네이티브 UI 테스트와 하이브리드 앱의 UI 테스트도 지원하며, 코드 하나로 여러 플랫폼에서 실행할 수 있는 테스트를 작성해 테스트 프로세스를 간소화할 수 있는 유용한 프레임워크다.
https://appium.io/docs/en/latest/
Appium은 오픈소스 프로젝트이자 관련 소프트웨어의 에코시스템으로 모바일, 브라우저, 데스크톱, TV 등 다양한 앱 플랫폼의 UI 자동화를 용이하게 하기 위해 설계됐다
공식문서의 소개글로는 그래서 Appium이 뭔데? 라는 질문에 명확한 답변이 되지 않아서 좀 찾아봤다.
https://economictimes.indiatimes.com/definition/appium-tool
Appium은 안드로이드, iOS 같은 다양한 모바일 OS에서 앱을 자동화하는 데 쓰이는 모바일 자동화 테스트 도구다. 네이티브, WAP(웹의 오타로 생각됨), 하이브리드 앱 등 여러 모바일 앱의 테스트 자동화에 쓸 수 있는 오픈소스 도구다.
테스트 케이스를 자동화하면 더 많은 기능을 빠르게 검증할 수 있어서 제품을 더 빨리 출시하는 데 도움이 된다. 테스트 스크립트는 실기기에서 실행되게 만들 수 있고, 에뮬레이터에서도 동일하게 실행할 수 있다. Node.js로 작성된 Appium 서버는 플랫폼 독립성을 허용하는 셀레니움 웹 드라이버를 구현한다. 이를 통해 사용자는 안드로이드, iOS 기기에서 같은 코드를 실행할 수 있다. 다른 장점은 셀레니움에서 지원하는 모든 스크립트(자바, 자바스크립트, PHP, Ruby, 파이썬, C# 등)로 테스트 스크립트를 작성할 수 있다는 것이다.
이 도구는 HTTP 프로토콜을 기반으로 하는 셀레니움을 기반으로 하며 2계층 아키텍처에서 코드를 실행한다. 한 컴퓨터는 테스트 스크립트를 실행하고 다른 컴퓨터는 이를 실행한다. Appium은 안드로이드 4.2 이상, iOS 6 이상을 지원한다
https://www.javatpoint.com/appium
(중략)...Appium은 셀레니움 웹 드라이버 명령을 각각 안드로이드, iOS용 UIAutomator, UIAutomation 명령으로 변환하는 프레임워크가 있어서 모바일 OS에 대한 종속성이 없으며 다만 기기 유형에 따라 달라진다. 셀레니움은 테스트에 필요한 셀레니움 기능을 제어할 수 있는 Appium의 백엔드다.
< Appium이 제공하는 기능 >
- 앱 소스코드, 라이브러리 불필요
- 활발한 커뮤니티
- 멀티 플랫폼 지원을 통한 여러 플랫폼에서 동일한 테스트 케이스 실행 가능
- 테스트 스크립트 병렬 실행
- 변경 사항으로 인한 앱 재설치 불필요
- 다양한 언어 지원
< Appium의 장점 >
- 오픈소스라서 무료로 사용 가능, 쉬운 설치
- 하이브리드, 네이티브, 웹 앱의 자동 테스트
- Appium을 자동화와 호환되도록 앱에 추가 에이전트를 포함할 필요 없음. 스토어에 업로드할 앱을 테스트함
- 윈도우용 데스크톱 앱 테스트 지원
- 안드로이드, iOS 플랫폼 모두에 단일 API 사용
< Appium의 단점 >
- 자세한 보고서의 부족
- 테스트가 원격 웹 드라이버에 의존해서 약간 느림
- iOS의 경우 하나의 Mac OS 기기에서 하나의 인스턴스(iOS 스크립트)만 실행 가능. 즉 Mac 당 한 번에 하나의 테스트만 실행 가능. 여러 iOS 기기에서 동시에 테스트하려면 같은 수의 Mac 기기를 준비해야 함
해결법 : 이 문제는 소스 랩의 모바일 클라우드에서 스크립트를 실행하면 해결된다. 현재 여러 iOS 시뮬레이터에서 동시에 스크립트를 실행할 수 있다
장단점과 그 외의 Appium이 무엇인지 설명하는 부분은 대부분 동일한 내용이라 넘어간다. 단점도 그렇게 치명적인 단점들은 아니기 때문에 안드로이드, iOS 앱이 모두 존재한다면 한 번 도입을 고려해 볼 수 있는 매력적인 테스트 도구라고 생각된다.
Appium 아키텍처
Appium의 아키텍처를 도식화하면 아래와 같다.
Appium은 테스트 스크립트(클라이언트)가 Appium 서버와 통신하는 클라이언트-서버 아키텍처로 구성됐다. 그래서 맥북에서 Appium을 실행할 경우 터미널을 2개 띄워서 하나는 서버, 아나는 테스트 스크립트 파일을 실행해서 테스트를 진행할 수 있다.
한 번 띄워진 Appium 서버는 HTTP를 통해 테스트 스크립트가 전송되는 걸 기다린다. 안드로이드용 UIAutomator2, iOS용 XCTest 같은 플랫폼 별 드라이버를 써서 ID, XPath 같은 로케이터 전략 기반으로 앱과 상호작용한다.
다음 Appium 포스팅에선 맥북에 어떻게 Appium을 설치하는지와 자바스크립트로 작성한 테스트 파일을 실기기에서 실행시키는 방법까지 확인한다.
'Android' 카테고리의 다른 글
[Android] 프래그먼트의 생명주기 (0) | 2024.03.31 |
---|---|
[Android] 프래그먼트란? 프래그먼트 기본 사용법 (0) | 2024.03.26 |
[Android] 안드로이드 14에서 변경된 미디어 권한 대응 방법 (0) | 2024.03.03 |
[Android] @SerializedName이 둘 이상의 필드명을 탐색하게 설정하는 법 (0) | 2024.02.14 |
[Android] SerializedName이란? (0) | 2024.02.08 |