WordPress에 대한 code-coverage 측정 방법 연구


Project위치: ~/Android_Application_source/WordPress # 


WordPress version: r394


다음 파일에는 WordPress와 Monkey coverage 측정을 위한 TestProject 그리고 AndroidMonkey 라이브러리 Project가 있다.


□ Android 3.0 library를 사용하므로, 3.0 이상의 android OS 스마트폰 사용.

    2.3.3 진저브레드 사용지, action bar에 의한 error가 발생


WordPress.vol1.egg


WordPress.vol2.egg


WordPress.vol3.egg


WordPress.vol4.egg


WordPress.vol5.egg


WordPress.vol6.egg


WordPress.vol7.egg


WordPress.vol8.egg


WordPress.vol9.egg


WordPress.vol10.egg


WordPress.vol11.egg


Commit Hash Code:

commit 668464259ca179d80dc92369e7f83cd828552637
Author: mrroundhill <dan@automattic.com> 2011-11-09 07:59:31
Committer: mrroundhill <dan@automattic.com> 2011-11-09 07:59:31
Parent: b16ea0b1dc6768bf915faca510236ad4ce537b58 (set up posts, settings and stats as singleTask activities, so you can't have more than one of each activity running at a time.)
Child: 601bfbdbb38b824203331b60e467a5f96a1a5f45 (kill the network task/spinner if user performs an action on the post view.)
Branches: origin/notifications, origin/master, origin/NUX, origin/HEAD, origin/develop, master
Follows: 1.4.1
Precedes: 2.0

setting new version number


Bug list (직접 발견)


INSTRUMENTATION_RESULT: longMsg=java.lang.NullPointerException
INSTRUMENTATION_RESULT: longMsg=android.database.CursorIndexOutOfBoundsException:
INSTRUMENTATION_RESULT: longMsg=java.lang.IllegalArgumentException: no dialog with id 0 was ever shown via Activity#showDialog




Monkey coverage를 측정.

Project 위치: root@ubuntu:~/Android_Application_source/WordPress/WordPressTest_originTest#


기존 Moneky Coverage 측정 방법

Monkey 라이브러리 open project를 이용해서 test instrumentation code를 작성해서 실험.


Manifest.xml 분석에 의한 testing 기법 Coverage 측정 방법 

시작 Activity를 직접 수정해서 test instrumentation code 실행


public class RandomTest extends ActivityInstrumentationTestCase2<EditContent> {

/*

* WordPress R394

* the number of activity is to start as follows:

* cmp=org.wordpress.android/.Signup

* cmp=org.wordpress.android/.NewAccount

* cmp=org.wordpress.android/.ViewStats

* cmp=org.wordpress.android/.AddQuickPressShortcut 

* cmp=org.wordpress.android/.AddAcountSettings

* login case: 12

* cmp=org.wordpress.android/.Settings    -> o

* cmp=org.wordpress.android/.Link 

* cmp=org.wordpress.android/.AddAccount

* cmp=org.wordpress.android/.SelectCategories

* cmp=org.wordpress.android/.Signup

* cmp=org.wordpress.android/.ViewStats

* cmp=org.wordpress.android/.AddAcountSettings

* cmp=org.wordpress.android/.Dashboard -> This first acitvity.

* cmp=org.wordpress.android/.Write

* cmp=org.wordpress.android/.EditContent

* cmp=org.wordpress.android/.ViewCommentActivity

* cmp=org.wordpress.android/.ViewPostActivity

*/

private static final int NUM_EVENTS = 1;

private static final String packageToTest = "org.wordpress.android";

public RandomTest(){

super(packageToTest, EditContent.class);

}



1) Test Project 생성: Eclipse 이용


2) WordPress Project 변환 및 설치: Ant 이용

project name: WordPress-Android

android update project -p . -n WordPress-Android

WordPress(app) project install: ant emma debug install


3) coverage.em 파일 생성 (원본 파일이다.)

테스팅 과정중에도 생성되지만, 작업이 꼬이면, 엉기므로 미리 생성해준다.

명령어: ant instrument

생성위치: bin/coverage.em

위 파일을 미리 복사해 놓는다. 테스팅 과정 중에 계속 변경이 되어진다.


4) Test Project 변환 및 설치: Ant 이용

project name: WordPressTest_originTest

android update test-project -m ../WordPress-Android -p .

test project install: ant emma debug install

주의: 반드시, ant로 project를 변환하며, 설치 해야함


app project: $ android update project -p [현재 위치] -n [project 이름]

test project: $ android update test-project -m [app project의 위치] -p [현재위치]


android update 명령어는 ant 빌드를 위해서 build.xml 파일을 가져온다.

따라서, SDK version을 변경 했다면, android update를 새로 해주어야 한다.

즉, 변경한 version에 맞는 build.xml을 다시 얻어와야 한다.


4) to run testing: adb shell am instrument -e coverage true -w org.wordpress.android.test/android.test.InstrumentationTestRunner

단, ant emma debug install test는 coverage가 0%로 나오니 쓰지 않음.


5) coverage.ec 추출

위치: adb shell pull /data/data/org.wordpress.android/files/coverage.ec .


6) HTML로 변환: 

java -cp ~/Android_Application_tools/android-sdk-linux/tools/lib/emma.jar emma report -r html -in coverage.em,coverage.ec

java -cp ~/Android_Application_tools/android-sdk-linux/tools/lib/emma.jar emma report -r html -in coverage.em,about.ec,comments.ec,editcontent.ec,replytocomment.ec,addaccount.ec,link.ec,settings.ec,addacountsettings.ec,newaccount.ec,signup.ec,addquickpressshortcut.ec,dashboard.ec,posts.ec,viewstats.ec


주의: coverage.em,coverage.ec 사이에 space를 주지 않는다.




1) app project를 설치 할때 반드시 ant로 설치.


EMMA: processing input files ...
EMMA: 2 file(s) read and merged in 48 ms
com.vladium.emma.EMMARuntimeException: [CLASS_STAMP_MISMATCH] runtime version of class [org.wordpress.android.EditContent$4] in the coverage data is not consistent with the version of this class in the metadata, possibly because stale metadata is being used for report generation.
    at com.vladium.emma.report.ReportDataModel.getView(ReportDataModel.java:95)
    at com.vladium.emma.report.AbstractReportGenerator.initialize(AbstractReportGenerator.java:210)
    at com.vladium.emma.report.html.ReportGenerator.process(ReportGenerator.java:85)
    at com.vladium.emma.report.ReportProcessor._run(ReportProcessor.java:254)
    at com.vladium.emma.Processor.run(Processor.java:54)
    at com.vladium.emma.report.reportCommand.run(reportCommand.java:130)
    at emma.main(emma.java:40)


2) coverage.em을 반드시 백업한다. ant instrument를 이용해서 생성한다음

3) r20 버전을 반드시 쓴다. r22는 쓰지 말아라. 그것을 쓰면 오류가 난다. (x)

버전 문제다, android update를 재 실행해서 build.xml파일을 새로 얻어 와야 한다.


Ant builds support a property named adb.device.arg, 를 이용 한다.


For example:

root@ubuntu:~/Android_Application_source/testingProjectPackage/NotePad# ant -Dadb.device.arg="-s 0149A97F16021014" emma debug install

Buildfile: /root/Android_Application_source/testingProjectPackage/NotePad/build.xml



Luckily, adb supports another way to specify the device: via the ANDROID_SERIAL environment variable. This variable takes the same serial values as the -s flag, and being part of the environment is independent of how you end up running adb. To repeat my previous example, I just need to set the variable to the serial for my emulator:


jsankey@caligula:~/work/my-app$ export ANDROID_SERIAL=emulator-5554

jsankey@caligula:~/work/my-app$ ant install

Buildfile: build.xml

    [setup] Android SDK Tools Revision 6

    [setup] Project Target: Android 2.2

 

...

 

install:

     [echo] Installing /home/jsankey/work/my-app/build/MyAppActivity-debug.apk onto default emulator or device...

     [exec] 277 KB/s (14446 bytes in 0.050s)

     [exec]     pkg: /data/local/tmp/MyAppActivity-debug.apk

     [exec] Success

 

BUILD SUCCESSFUL

Total time: 4 seconds


AndroidMonkey is an Android Library. It is, in fact, a copy of the original Android Monkey Toolhttp://developer.android.com/guide/developing/tools/monkey.html and made as a library for testing and analysis (e.g. code coverage) purposes.


Tester/User can easily use the library to create random test cases to test android apps with GUI.


Why this library:

You can use this library to create random test cases for your application, with just few lines of code

You can add your assertions to access the state of the SUT (you can hardly do this with the Android Monkey Tool)

You can do Coverage analysis of random testing on Android Application, this is useful for Research Purpose (like what I'm doing)



실행방법


우선, 위 open project에서 다운받은 example code를 ant로 빌드환경에 맞게 update를 해야한다.


이러한 작업을 완료한 3개의 파일을 본 블로그에 첨부한다.




1) monkey testing할 project를 target smartphone에 설치 한다.

명령어: ant emma debug install 


root@ubuntu:~/Android_Application_source/testingProjectPackage/NotePad# ant emma debug install

Buildfile: /root/Android_Application_source/testingProjectPackage/NotePad/build.xml


emma:


-set-mode-check:


-set-debug-files:


-check-env:

 [checkenv] Android SDK Tools Revision 22.2.1

 [checkenv] Installed at /root/Android_Application_tools/android-sdk-linux_r22


install:

     [echo] Installing /root/Android_Application_source/testingProjectPackage/NotePad/bin/AntNotePad-debug.apk onto default emulator or device...

     [exec] 554 KB/s (63571 bytes in 0.112s)

     [exec] pkg: /data/local/tmp/AntNotePad-debug.apk

     [exec] Success


BUILD SUCCESSFUL

Total time: 6 seconds



2) app test project를 설치한다.

해당 project는 AndroidMonkey project와 종속성이 있다. 왜냐하면, 테스팅 수행 과정에서 random event를 생성해서 testing을 수행하기 때문이다.


root@ubuntu:~/Android_Application_source/testingProjectPackage/NotePadMonkeyTester# ant emma debug install

Buildfile: /root/Android_Application_source/testingProjectPackage/NotePadMonkeyTester/build.xml


emma:


-set-mode-check:


-set-debug-files:


-check-env:

 [checkenv] Android SDK Tools Revision 22.2.1

 [checkenv] Installed at /root/Android_Application_tools/android-sdk-linux_r22

...
...
installi:

BUILD SUCCESSFUL
Total time: 20 seconds




3) 테스팅을 실행한다.

환경은 notepad 어플리케이션에 2개의 post를 등록한 상태에서 실행을 한다.


명령어: adb shell am instrument -e coverage true -w com.example.android.notepad.test/android.test.InstrumentationTestRunner



특이사항: 위 명령어를 실행하면 app project의 bin 디렉터리에 coverage.em 파일이 생성 되어 진다.

root@ubuntu:~/Android_Application_source/testingProjectPackage/NotePadMonkeyTester# adb shell am instrument -e coverage true -w com.example.android.notepad.test/android.test.InstrumentationTestRunner


com.example.android.notepad.test.RandomTest:.

Test results for InstrumentationTestRunner=.

Time: 49.75


OK (1 test)


Generated code coverage data to /data/data/com.example.android.notepad/files/coverage.ec


3) report 생성.


주의: coverage.em이 없을 경우, app project 디렉터리에서 ant instrument 명령어를 실행해서 

root@ubuntu:~/Android_Application_source/testingProjectPackage/NotePad# adb pull /data/data/com.example.android.notepad/files/coverage.ec .

17 KB/s (691 bytes in 0.039s)


root@ubuntu:~/Android_Application_source/testingProjectPackage/NotePad/bin# java -cp ~/Android_Application_tools/android-sdk-linux/tools/lib/emma.jar emma report -r html -in coverage.em,coverage.ec
EMMA: processing input files ...
EMMA: 2 file(s) read and merged in 7 ms
EMMA: writing [html] report to [/root/Android_Application_source/testingProjectPackage/NotePad/bin/coverage/index.html] ...
root@ubuntu:~/Android_Application_source/testingProjectPackage/NotePad/bin# ls
AndroidManifest.xml                    AntNotePad-instrumented-unaligned.apk.d  AntNotePad.ap_.d  classes.dex    coverage.ec  jarlist.cache
AndroidManifest.xml.d                  AntNotePad-instrumented.apk              build.prop        classes.dex.d  coverage.em  proguard.txt
AntNotePad-instrumented-unaligned.apk  AntNotePad.ap_                           classes           coverage       dexedLibs    res
root@ubuntu:~/Android_Application_source/testingProjectPackage/NotePad/bin# firefox ./coverage/index.html 
failed to create drawable







EMMA for running android application.


▣ 사전지식

본 예제는, test project가 아닌, running application 스스로 EMMA로 instrument해서 coverage를 측정하게 된다.

coverage.em: 이것은 class file들에 대한 meta 정보를 담고 있다.

coverage.em file은 "ant instrument" command를 입력하면, code를 build하며 coverage.em 파일을 생성 하게 된다.



Step 0


GitHub에 있는 Diego의 project를 다운 받는다.

편의를 위해서 본 블로그에 파일을 첨부해 놓았다.

File 1: external library project


ViewServer-master.tar.gz


File 2: Testing App for getting Code Coverage running application with EMMA


TemperatureConverter-master.tar.gz


▣ 기본적으로 Diego의 Project에는 오류가 몇가지 있다.

1) "LocalViewServer" project에 대한 의존성이 있다.

해결 방법: 

GitHub: https://github.com/dtmilano/ViewServer 에서  ViewServer-master를 다운 받는다.

TemperatureConverter-master project의 project.properties를 아래와 같이 수정한다.


android.library.reference.1=../ViewServer-master


2) ViewServer-master에 SDK version이 빠져 있으므로 eclipse에서 추가 해준다.

3) ViewServer-master에 build.xml이 없어서 ant command를 수행 할 수 없다.

해결방법: # android update project -p .



Step 1


root@ubuntu:~/Android_Application_source/TemperatureConverter-master# ant clean

-- clean all class files


Step 2


root@ubuntu:~/Android_Application_source/TemperatureConverter-master# ant instrument install

-- coverage.em 파일이 생성 되어야 한다.


Step 3


This command will start the android application on the device and create coverage.ec file for us


root@ubuntu:~/Android_Application_source/TemperatureConverter-master# adb shell am instrument -e coverage true -w com.example.i2at.tc/com.example.instrumentation.EmmaInstrumentation


-- Block while user action


INSTRUMENTATION_CODE: -1


08-25 21:26:28.245: I/System.out(2102): EMMA: runtime coverage data written to [/mnt/sdcard/coverage.ec] {in 72 ms}


Step 4


/sdcard/coverage.ec 에 위치한것을 꺼내온다.


root@ubuntu:~/Android_Application_source/TemperatureConverter-master/bin# adb pull /sdcard/coverage.ec .
30 KB/s (1202 bytes in 0.038s)


Step 5


▣ 소스코드를 참고하지 않는 경우. // 소스코드를 보지 못함

root@ubuntu:~/Android_Application_source/TemperatureConverter-master/bin# java -cp ~/Android_Application_tools/android-sdk-linux/tools/lib/emma.jar emma report -r html -in coverage.em,coverage.ec


EMMA: processing input files ...
EMMA: 2 file(s) read and merged in 9 ms
EMMA: writing [html] report to [/root/Android_Application_source/TemperatureConverter-master/bin/coverage/index.html] ...


▣ 소스코드를 참고하는 경우. // 소스코드를 볼 수 있음 (방법 아직 모름, ant emma debug install test시 정상적으로 잘 보임)


this command will give html coverage reports, and we can also see the src code also in the html reports.
the -sp option is given for that reason only.
java -cp emma.jar emma report -r html -in coverage.ec -sp D:\xxxxxx\EMMA_Coverage\TemperatureConverter-master\src -in D:\xxxxxx\EMMA_Coverage\TemperatureConverter-master\bin\coverage.em



// 내용 확인

root@ubuntu:~/Android_Application_source/TemperatureConverter-master/bin/coverage# firefox index.html
failed to create drawable


Step 6



결과를 아래와 같이 볼 수 있다. 단, 아직 소스코드 보는 법은 잘 모르겠음.




reference links for both:
-------------------------

key link: http://dtmilano.blogspot.in/2011/11/obtaining-code-coverage-of-running.html


https://developers.google.com/web-toolkit/doc/latest/DevGuideTestingCoverage#command-line

http://primates.ximian.com/~flucifredi/emma-HOWTO.html

http://stackoverflow.com/questions/2762665/how-to-use-emma-code-coverage-in-android

https://groups.google.com/forum/#!topic/android-developers/Q8-KjKVmL4U

http://mebeingneo.wordpress.com/2011/05/19/emma-code-coverage-of-android-2/

※ 상기 사항

1) ADT 20r 버전 이상을 사용

2) Android Application Testing Guide에 나온 방법 처럼 AOSP로 할 경우 잘 안됨.

3) tools/ant/build.xml을 변경하는 것은 비 추천.



1. android tool을 이용해서 project 생성 및 update


 생성: application과 test 각각 1개씩 project를 생성

test project creation: android create test-project -m <main_path> -n <project_name> -p <test_path>


▣ 갱신: eclipse로 기존에 작성된 app과 test project가 있을 경우

app project: $ android update project -p [현재 위치] -n [project 이름]

test project: $ android update test-project -m [app project의 위치] -p [현재위치]



2. ant와 emma를 이용해서 실행


app project: $ ant emma debug install

test project: $ ant emma debug install test



3. 실행 결과 및 자료.


▣ ant emma debug install



 ▣ $ ant emma debug install test





▣ HelloWordTest Coverage Result



▣ TemperatrueConverterTest Coverage Result




관련 파일


HelloWord.zip


HelloWordTest.zip


TemperatureConverter.zip


TemperatureConverterTest.zip




▣ reference site list 


1) ant command[stackoverflow]: http://stackoverflow.com/questions/2762665/how-to-use-emma-code-coverage-in-android 

2) build.xml 수정 한글 블로그: http://codemuri.tistory.com/826 

3) GeekTaco [완벽한 외국 블로그]: http://geektaco.blogspot.kr/2012/07/code-coverage-with-android-and-emma.html

4) google site [android tool 관련]: http://developer.android.com/tools/projects/projects-cmdline.html

5) google site [ am instrumentation과 android test-project 생성 관련]: http://developer.android.com/tools/testing/testing_otheride.html


6) google site [ command line으로 빌드하는 방법]: http://developer.android.com/tools/building/building-cmdline.html

7) unrooted device에 대한 정보: http://stackoverflow.com/questions/8599097/emma-does-not-generate-coverage-ec



3. adb shell am instrument를 이용해서 emma 실행



가장 먼저 coverage.em 를 생성 해야한다. 이때 명령어를 ant instrument 를 해서 coverage를 생성 한다. 

1) app project에서 ant instrument 명령어를 실행해서 coverage.em 을 생성 한다.

root@ubuntu:~/Android_Application_source/HelloWord# ant instrument


Buildfile: /root/Android_Application_source/HelloWord/build.xml


-set-mode-check:

..
..
BUILD SUCCESSFUL
Total time: 1 second


2) app project에서 ant emma debug install 명령어를 실행해서 emma를 포함해서 디버그 모드로 해당 프로젝트를 Target smartphone에 설치를 한다.


위 작업을, app test project에 대해서도 동일하게 해준다. test 프로젝트도 target 스마트폰에 설치를 한다.


root@ubuntu:~/Android_Application_source/HelloWord# ant emma debug install

Buildfile: /root/Android_Application_source/HelloWord/build.xml

emma:

-set-mode-check:
..
..
install:
     [echo] Installing /root/Android_Application_source/HelloWord/bin/HelloWorld-debug.apk onto default emulator or device...
     [exec] 226 KB/s (13892 bytes in 0.059s)
     [exec]  pkg: /data/local/tmp/HelloWorld-debug.apk
     [exec] Success

BUILD SUCCESSFUL
Total time: 5 seconds

----------------------------------------------------------------------

root@ubuntu:~/Android_Application_source/HelloWordTest# ant emma debug install
Buildfile: /root/Android_Application_source/HelloWordTest/build.xml

emma:
..
..
install:
     [echo] Installing /root/Android_Application_source/HelloWord/bin/HelloWorld-instrumented.apk onto default emulator or device...
     [exec] 710 KB/s (166754 bytes in 0.229s)
     [exec] pkg: /data/local/tmp/HelloWorld-instrumented.apk
     [exec] Success

installi:

BUILD SUCCESSFUL
Total time: 12 seconds



3) 아래의 명령어를 실행 해준다.


adb shell am instrument -e coverage true -w com.eslab.test.test/android.test.InstrumentationTestRunner


여기서 com.eslab.test.test 는 테스팅 코드가 instrumentation 되어있는 테스트 프로제긑의 package 이름이다. 뒤의 android.test.InstrumentationTestRunner는 변경하지 말고 다른 test project를 사용할 때에도 그대로 사용해 준다.


root@ubuntu:~/Android_Application_source/HelloWordTest# adb shell am instrument -e coverage true -w com.eslab.test.test/android.test.InstrumentationTestRunner

com.eslab.test.test.HelloAndroidTest:..
Test results for InstrumentationTestRunner=..
Time: 0.786

OK (2 tests)


Generated code coverage data to /data/data/com.eslab.test/files/coverage.ec


// coverage.ec 에 대한 report 생성 위치는 app project의 설치 위치에 저장되어 진다. 

// test project가 아니다.




4) html 파일로 coverage 보고서를 생성해 준다. 이때 app project 위치에서 해야한다.

당연히, coverage.em 파일은 app project에 있는 것을 사용 해야한다. app test project가 아니라.


소스 코드를 참조해서 보고서를 생성하는 명령어: java -cp ~/Android_Application_tools/android-sdk-linux/tools/lib/emma.jar emma emma report -r html -in coverage.ec -sp ~/Android_Application_source/HelloWord/src/ -in coverage.em


소스코드를 참조하지 않고 보고서를 생성하는 명령어: java -cp ~/Android_Application_tools/android-sdk-linux/tools/lib/emma.jar emma report -r html -in coverage.em,coverage.ec


root@ubuntu:~/Android_Application_source/HelloWord/bin# adb pull /data/data/com.eslab.test/files/coverage.ec .

adb server is out of date.  killing...

* daemon started successfully *

2 KB/s (98 bytes in 0.038s)


--------------------------------------------------------------------------------


root@ubuntu:~/Android_Application_source/HelloWord/bin# ls

AndroidManifest.xml               HelloWorld-instrumented-unaligned.apk    build.prop     coverage.ec

AndroidManifest.xml.d             HelloWorld-instrumented-unaligned.apk.d  classes        coverage.em

HelloWorld-debug-unaligned.apk    HelloWorld-instrumented.apk              classes.dex    jarlist.cache

HelloWorld-debug-unaligned.apk.d  HelloWorld.ap_                           classes.dex.d  proguard.txt

HelloWorld-debug.apk              HelloWorld.ap_.d                         coverage       res





root@ubuntu:~/Android_Application_source/HelloWord/bin#  java -cp ~/Android_Application_tools/android-sdk-linux/tools/lib/emma.jar emma report -r html -in coverage.em,coverage.ec

EMMA: processing input files ...

EMMA: 2 file(s) read and merged in 6 ms

EMMA: writing [html] report to [/root/Android_Application_source/HelloWord/bin/coverage/index.html] ...


root@ubuntu:~/Android_Application_source/HelloWord/bin# ls

AndroidManifest.xml               HelloWorld-instrumented-unaligned.apk    build.prop     coverage.ec

AndroidManifest.xml.d             HelloWorld-instrumented-unaligned.apk.d  classes        coverage.em

HelloWorld-debug-unaligned.apk    HelloWorld-instrumented.apk              classes.dex    jarlist.cache

HelloWorld-debug-unaligned.apk.d  HelloWorld.ap_                           classes.dex.d  proguard.txt

HelloWorld-debug.apk              HelloWorld.ap_.d                         coverage       res





결과: ant emma debug install test 보다 좀 더 많은 testing 요소들을 검사한다.








EMMA


1) ant 환경만 지원, build.xml 이 필요.

2) am instrument의 option으로 EMMA를 실행 가능.

3) running android application의 code coverage를 얻기 위해서는 android instrumentation framework를 반드시 이용 해야한다. 얻고자 하는 기등을 안에다가 넣던가, 아니면 code coverage를 수집하는 코드를 저 안에다가 구현 해야 한다.



java -cp ~/Android_Platform/aosp-2.3.3_nexus_one/external/emma/lib/emma.jar emma report -r html -in coverage.ec -sp ~/Android_Application_source/HelloWord/src/ -in coverage.em



Command line으로 Project를 생성 하는 방법.


1) Creating an Android Project

android project를 생성 하기위해서 android tool을 사용하게 된다. 

이것을 사용하면 project directory를 생성하며 몇몇 default application file들과 stub, configuration file, build file을 생성 하게 된다.


android create project

--target or -t <target_ID>

--name or -n <your_project_name>

--path or -p <path/to/your/project>

--activity -a <your_activity_name>

--package -p <your_package_namesapce>





1. Android Application Testing Guide 방법


우선 테스트 대상이 되는 프로그램인 2가지를 구성한다.


TemperatureConverter

TemperatureConverterTest


1) AOSP 컴파일


AOSP를 준비해야한다.


명렁어순서

. build/envsetup.sh

lunch -> generic-eng 선택


export EMMA_INSTRUMENT=true


make -j[작업 수]



2) AOSP에 Built-In App으로 우리의 테스팅 App을집어 넣는다.


테스팅 App의 심볼릭 링크로 만들어서 Android 아래의 디렉터리에 프로젝트 2개를 추가한다.


development/samples/ 

ln -s ~/Android_Application_source/TemperatureConverter .

ln -s ~/Android_Application_source/TemperatureConverterTest .


각 프로젝트 디렉터리에 Android Build System에 들어가 지도록 Android.mk 파일을 추가한다.


일단 samples에존재하는 아무 App이다. 꺼내온 다음. 


LOCAL_PACKAGE_NAME := TemperatureConverter 


로 변경 한다.


컴파일

development/samples/TemperatureConverter $ EMMA_INSTRUMENT=true mm


TemperatureConverterTest의 프로젝트도 동일한 작업 수행.


심볼릭 링크 or File copy

Android.mk 생성

컴파일



3) 코드 커버리지 분석 보고서 생성


컴파일의 결과가는, out/target/common/obj/APPS 디렉터리에 나와있다.

Coverage 측정을 위한 Emulator는 out/host/linux-86/bin/emulator 


Emulator 실행 명령어

$ mksdcard sdcard.img // sdcard 이미지 생성

$ out/host/linux-86/bin/emulator -sdcard sdcard.img -partition-size 256 // emulator 실행

$ adb remount // sdcard에 쓰기권한 설정

development/samples/TemperatureConverterTest$ adb Sync // 변경 사항 동기화


$adb shell am instrument -e coverage 'true' =w com.example.aatg.tc.test/android.test.InstrumentationTestRunner



저장을 위해서 mksdcard 명령어를 이용해서 sdcard.img를 생성해 준다.



에뮬레이터 실행에서 막힘 중단. 


-----------------------------



우선 Ant를 설치한다. 아래의 Web 주소를 참고 한다.

Apache Ant home page: http://ant.apache.org/


▣ Ant Command Reference

ant clean

Cleans the project. If you include the all target before clean (ant all clean), other projects are also cleaned. For instance if you clean a test project, the tested project is also cleaned.

테스팅 대상 프로젝트와 테스트 프로젝트 모두 클린 된다.


ant debug

Builds a debug package. Works on application, library, and test projects and compiles dependencies as needed.

debug package로 모든, 필요한 것들을 컴파일 한다.


ant emma debug

Builds a test project while building the tested project with instrumentation turned on. This is used to run tests with code coverage enabled.

테스팅 되어지는 프로젝트를 instrumentation을 켠상태로 빌드한다. 이것은 테스트 과정에서 code coverage를 측정 할 수 있다.


ant release

Builds a release package.


ant instrument

Builds an instrumented debug package. This is generally called automatically when building a test project with code coverage enabled (with the emma target)

이것은 emma라는 키워드를 사용할때 자동적으로 불리워지는 내용이다. 즉, ant emma를 할시 동일하게 적용되는 내용이다. debug pacakge에 instrumented code를 삽입하는 과정을 취한다.


ant <build_target> install

Builds and installs a package. Using install by itself fails.


ant installd

Installs an already compiled debug package. This fails if the .apk is not already built.


ant installr

Installs an already compiled release package. This fails if the .apk is not already built.


ant installt

Installs an already compiled test package. Also installs the .apk of the tested application. This fails if the .apk is not already built.


ant installi

Installs an already compiled instrumented package. This is generally not used manually as it's called when installing a test package. This fails if the .apk is not already built.


ant test

Runs the tests (for test projects). The tested and test .apk files must be previously installed.


ant debug installt test

Builds a test project and the tested project, installs both .apk files, and runs the tests.


ant emma debug install test

Builds a test project and the tested project, installs both .apk files, and runs the tests with code coverage enabled.


▣ am instrument option reference


am instrument의 일반적인 사용법


am instrument [flags] <COMPONENT>

-r: 결과를 모두 출력한다. 선능 측정을 위한 자료 수집에 유용하다.

-e <NAME> <VALUE>: Name을 Value로 설정 한다. 일반적으로 인자 <name,value> 쌍이다.

-p <FILE> 측정 데이터를 외부 파일에 저장한다.

-w 종료하기 전에 측정 기능이 끝나기를 기다린다. 보통 이 옵션을 쓰지 않으면 테스트 결과를 볼 수 없으므로 필수는 아니지만 꽤 유용하다.




+ Recent posts