cts

|
출처 : http://blog.sangwookim.me/10

안드로이드 API / Application 호환성 검증을 위해 구글에서 제공하는 자동화된 테스트 툴이다.
CTS 통과는 곧 안드로이드 마켓에 등록된 어플리케이션이 정상적으로 동작될 수 있음을 나타낸다.
안드로이드 폰을 출시하고자 하는 휴대폰 제조사는 일정수준 이상의 점수로 CTS를 통과하여야 Market, Gmail, Google Map 등을 포함한 GMS (Google Mobile Service)를 휴대폰에 탑재할 수 있다.
CTS는 리눅스에서 실행되는 CTS엔진과, 타겟디바이스에 설치, 실행되는 개별 테스트 케이스들 (apk로 되어있다)로 구성된다.
Eclair (Android 2.1) 버전의 CTS는 총 23,107개의 시험 테스트 케이스로 구성되어 있으며, 테스트를 완료하는데도 상당한 시간이 걸린다. (타겟 디바이스의 CPU속도에 따라 많이 좌우된다)

CTS 테스트 과정

CTS를 돌리기 위한 방법은 간단하지만, 쉽지만은 않다.
(AOSP사이트를 참조: 사이트 내용이 부실하여 많은 참고는 안된다.)

1. CTS를 다운로드 받는다. (http://source.android.com/compatibility/downloads.html)
여러 버전의 테스트가 올라와 있으므로 원하는 버전의 CTS를 다운로드 받는다.
android-cts/tools/startcts 스크립트를 아래와 같이 수정한다. (SDK PATH를 설정해야 한다)
vim <YOUR_ANDROID_CTS_PATH>/android-cts/tools/startcts
startcts 스크립트 중,
SDK_ROOT = /root/android-sdk-linux_x86 (android sdk가 존재하는 위치)

2. 테스트할 기기를 컴퓨터에 연결한다.
테스트는 리눅스에서 진행된다.
대부분은 윈도우즈 PC를 사용하고 있을 것이므로 VMWare등에 설치된 리눅스를 이용하면 될 것이다. 자세한 설명은 생략한다. (별도의 문서 참조)
기기를 연결하기 위해서는 adb가 필요할 것이다. adb가 준비되어 있지 않다면 별도의 문서를 참조하여 adb를 연결하도록 한다.

3. 기기를 설정한다.
몇가지 준비할 사항이 있는데, Finger Print, Client ID등을 설정해야 한다.
SD카드, USIM카드 삽입, IMEI등록
WIFI및 3G망 접속 가능하도록 설정
USB디버깅 ON 
테스트 바이너리는 eng, user 무관
Fingerprint (폰이 마켓에 접속할때 인증이되는 값) 설정
안드로이드 2.2 이상을 사용한다면 이 외에 기기에서 특별히 설정해야 하는 것은 없다.
CTS 2.1 R2 이전 버전의 경우는 AOSP 사이트의 Compatibility Section을 참조하여 추가 설정을 하도록 한다.

문제가 있을 시 시도해볼 수 있는 옵션들 :
타겟의 USB ADB 인터페이스가 재대로 작동하는지 확인
타겟 data 파티션 영역이 25MB 이상인지 확인
adb reboot을 실행시 정상적으로 리부팅 되는지 확인 
폰에 IMEI 및 SIM카드가 들어있는지 확인
Data통신이 가능한 상태인지 확인(3G, WiFi)
SD카드 리셋
언어 영어로 변경
screen timeout을 30분으로 변경
TTS 음성 데이터 설치

4. CTS를 실행한다.
기기가 adb를 통해 연결가능한 상태여야 한다.
간혹 adb devices 명령을 통해 기기를 확인하였을때, 퍼미션이 없다고 나오는 경우는 root권한으로 adb server를 시작해주면 된다.
cts를 실행할 때도 root권한으로 실행해 주어야 기기나 adb를 재시작할때에 정상적인 권한으로 동작시킬 수 있다.
sudo ./startcts
start --plan CTS
p12522@SWKim-Ubuntu:~/android-sdk-linux_86/android-cts/tools$ sudo ./startcts
[sudo] password for p12522: 
Android CTS version 2.2_r2
Device(EF10S01110118000291) connected
cts_host > start --plan CTS
항목별로 테스트가 끝날 때마다 기기를 리부팅하게 되는데, VMWare를 이용해서 테스트를 하고 있다면, 기기가 자꾸 Vmware내의 리눅스가 아닌, PC에 붙으려고 할 것이다. 따라서 테스트 과정 중에 지속적인 감시가 필요하다.
테스트에는 약 10시간 이상이 소요되므로 이틀정도 시간을 잡는 것이 좋다. 혹은 오전 일찍부터 테스트를 시작하도록 한다.

테스트 이후의 작업

1. 테스트 결과 확인
테스트 결과는 xml파일 형태로 생성된다. android-cts/repository/results/<테스트시작시간>/testResult.xml 을 열어보면 결과를 확인할 수 있다.
android-cts/repository/results/<테스트시작시간>.zip 파일도 볼 수 있는데 이는 CTS결과 리포트 계정을 통해 구글에 전달할때 사용한다.
CTS는 20,000개 이상의 항목을 테스트하므로 한번에 완벽하게 통과하기란 쉽지 않을 것이다.
테스트에서 Fail 처리된 항목 중에서는 다시 (여러번) 테스트할 경우 통과하는 경우도 있다. CTS는 부분 테스트가 가능하므로 에러가 난 부분을 반복적으로 테스트하여 정말 문제가 있어서 Fail이 된 것인지, 일시적인 문제로 Fail이 된 것인지 알아내도록 한다.
testResultxml파일이 열리지 않을때.
에디터를 이용하여 xml을 연 후, &#0; 스트링을 찾아서 삭제하도록 한다. Fail항목에 대한 정보를 기록시 parsing이 안되는 문자가 잘못 기입되는 것 같다. 

부분테스트 방법
개별 package 시험 startcts스크립트 실행 후,
start --plan CTS -p <java_package_name>
예) start --plan CTS -p android.location

package이름은 ls -p로 확인 가능하다.
개별 테스트케이스 실행
Fail항목을 수정 후 재시험하거나 할때 유용할 것이다.
start --plan CTS -t <test pull name>
예) start --plan CTS -t android.app.cts.ActivityManagerMemoryInfoTest#testDescribeContents


2. 시험결과 분석 및 디버깅
시험 결과에는 error종류 및 기대값, 시험값, 오류가 발생한 함수, 파일 위치가 표시된다.
또한 xml을 웹브라우저로 열지 않고 에디터로 열게 되면 오류가 발생한 부분의 stack trace를 볼 수 있다.

Fail이 나오는 이유는 여러가지가 있겠지만 해당 부분을 잘못된 방법으로 수정한 경우가 많다.
Fail인 부분의 코드를 살펴보고 수정하도록 하자.
Known problem인 항목들은 구글에 문의 후 skip 혹은 수정하도록 한다.


3. 결과 등록 및 구글 CTS인증
CTS결과 서버 등록한다.
http://sites.google.com/a/android.com/compatibility/Home

GMS launch checklist를 작성한다.
http://sites.google.com/a/android.com/compatibility/Home

checklist 서버 업데이트.

GMS build approval submission 를 작성한다.
https://sites.google.com/a/google.com/gms_distribution/

구글에 인증을 요청한다.  - 인증 승인까지는 약 14일이 소요된다. 


국내의 안드로이드 개발자들에게 도움을 주고자 작성한 글이며, 상업적 이용은 금지합니다

'Android 개발' 카테고리의 다른 글

android app memory 최적화  (0) 2014.03.10
android version  (0) 2012.06.28
garbage collection  (0) 2012.03.15
configure LMK killer  (0) 2012.02.02
android porting on real target  (0) 2011.12.27
And