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파일을 새로 얻어 와야 한다.


+ Recent posts