robotium学习笔记V02.docx
- 文档编号:24739301
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:69
- 大小:1.95MB
robotium学习笔记V02.docx
《robotium学习笔记V02.docx》由会员分享,可在线阅读,更多相关《robotium学习笔记V02.docx(69页珍藏版)》请在冰豆网上搜索。
robotium学习笔记V02
目录
简介2
Robotiumprovidesthefollowingbenefits:
2
Instrumentation机制3
Q&A4
DoesRobotiumsupporttestingonrealdevices?
(支持真机)4
Isitpossibletowriteatestcasethatspansover2applications?
(不支持跨App测试)4
CanIuseRobotiumifIonlyhavetheapkfile?
(支持无源码apk测试)5
CanIuseRobotiumonpre-installedapplications?
(支持预装App的测试,需要root)7
CanIuseRobotiumwithhybrid(web)applications?
(4.0支持web测试)8
CanItakescreenshotsfrominsideofRobotium?
(支持截图)8
HowdoIrunRobotiumtestsfromthecommandline?
(从命令行运行测试)8
Robotium的缺点8
局限性9
NativeDrivervs.Robotium9
TMTSvs.Robotiumvs.AndroidNativeDriver10
其它工具11
Robotium自动化测试开发环境搭建11
基本使用方法11
例1–HelloWorld11
例2–官方例子15
java.lang.NoClassDefFoundError:
com.jayway.android.robotium.solo.Solo错误解决18
例3–测试米聊18
多个activity的测试23
测试执行26
对象识别27
uiautomatorviewer27
API27
无源码APK测试方法27
关于apk签名29
框架设计38
测试用例管理40
Robotium数据驱动测试框架42
RemoteControl43
介绍44
安装指引44
测试用例开发47
1、创建AVD49
2、创建JavaProject49
3、在Eclipse中运行测试51
FAQ53
Tips53
参考54
简介
Robotiumisatestframeworkcreatedtomakeiteasytowritepowerfulandrobustautomaticblack-boxtestcasesforAndroidapplications.WiththesupportofRobotium,testcasedeveloperscanwritefunction,systemandacceptancetestscenarios,spanningmultipleAndroidactivities.
RobotiumhasfullsupportforActivities,Dialogs,Toasts,MenusandContextMenus.
Robotiumprovidesthefollowingbenefits:
∙Youcandeveloppowerfultestcases,withminimalknowledgeoftheapplicationundertest.
∙TheframeworkhandlesmultipleAndroidactivitiesautomatically.
∙Minimaltimeneededtowritesolidtestcases.
∙Readabilityoftestcasesisgreatlyimproved,comparedtostandardinstrumentationtests.
∙Testcasesaremorerobustduetotherun-timebindingtoGUIcomponents.
∙Blazingfasttestcaseexecution.
∙IntegratessmoothlywithMavenorAnttoruntestsaspartofcontinuousintegration.
Instrumentation机制
刚好前段时间也研究了一下Android的自动化测试框架。
感觉用起来还是比较方便的。
几点体会也一起和大家交流下,有一些内容还在慢慢学习中:
1.Java5(2004-10)开始推出了Instrumentation,这是一个可以在main之前Java虚拟机加载类时改变Java类字节码或类classpath等内容的工具,同时JDK1.6还提供了运行过程中的动态改变,如在方法执行前后加入度量时间的代码,使Java代码可度量就是一个很典型的应用。
不过这需要涉及到Java字节码有较深入的理解进行字节码直接编辑改写,或者需要借助开源字节码项目如bcel,ASM或javassist等,以简化对字节码的操作。
2.Instrumentation与Btrace。
Btrace是基于Instrumentation和ASM的,只要理解了Instrumentation的原理和ASM对字节码的操作原理,了解Btrace就不困难了。
3.Android的测试框架robotium框架,使用的类也是Instrumentation,其原理应该也类似。
为某工程新建了一个测试工程,在安装原有工程项目时,也将测试的工程项目安装到AVD(模拟器)上面,同时通过测试的工程项目来与运行时的项目交互,触发其组件的动作等。
这种方法的缺点是要求两个项目同时安装到AVD上面。
Google将会考虑采取RemoteControl的方式实现自动化测试框架,类似于selenium的RemoteControl,即在AVD上运行一个监控程序,而测试项目只需要连接这个监控程序,并发送相应的指令即可与程序进行交互,进行测试。
希望早日实现这种方式~,目前的自动化测试使用前种方法也可。
Robotium其底层仍是采用Android的Instrumentation!
4.Android的Instrumentation对某个监控程序进行交互时,其大致采用如下步骤:
1)启动时将项目配置文件AndroidManifest.xml文件中的instrumentation标签中的内容进行初始化,其中标明了所使用的测试运行类,目标项目的包名等
2)执行测试时(可用adb命令触发),将启动目标应用的Activity,同时将待测试ActivityThread作为一个引用进行初始化,如果找不到目标应用则会报错
3)在测试时测试项目的任何对目标项目进行的操作,都会用异步的方式,将消息体放在目标程序的MessageQueue里面,这样目标程序在看到自己的MessageQueue里有内容时,就会执行之。
整个初始化过程还有待研究,关键应该是在于AndroidManifest.xml文件中内容的标识
Q&A
DoesRobotiumsupporttestingonrealdevices?
(支持真机)
Yesitdoes.Onejustneedstoconnectthedevicetothecomputerandexecutethetestsasusual.TherecanbeissueswithsomevendorcustomizationsofAndroid,butmanytimesitispossibletogetaroundtheincompatibilitiesbyusingotherRobotiummethods.
Isitpossibletowriteatestcasethatspansover2applications?
(不支持跨App测试)
No,thatisnotpossible.IntheAndroidManifest.xmlyoustatewhichtargetapplicationyouwanttotest.Anexampleofwhatitcanlooklike:
targetPackage="com.example.android.notepad"android: name="android.test.InstrumentationTestRunner"/> Thatmeansthatthetestprojectislockedtothe targetPackage.GoingoutsideofthattargetpackageisnotallowedbytheAndroidplatform.Thereforeyouwillneed2testprojects,oneforeachapplication. CanIuseRobotiumifIonlyhavetheapkfile? (支持无源码apk测试) Yesyoucan.Youdonotneedtohavethesourcecode.Moreinformationis foundhere. WithRobotiumitispossibletoruntestcasesonapplicationswhereyouonlyhavetheapkfile. Forstepbystepinstructionswithimagesdownloadthis tutorial. Introduction The.apkfilehastohavethesamesignatureasyourtestproject.Ifyoudonothavethesignaturekeyofthe.apkfilethenyouneedtoremovethesignatureandresignitwithyouownkey,androiddebugkeycanbeused.Adraganddropjavatoolcanbedownloaded fromhere whichstripstheapkfilefromitssignatureandthensignsitwithyourandroiddebugkey. Ifthenewapkisnotsavedthentrytorunthere-signtoolasanadministrator.Inwindowsthatwouldbedonebyrightclickingthere-sign.jarandselectrunasadministrator.InOSXitcanbedonebyopeninguptheterminalandthen"sudojava-jarre-sign.jar". TheandroiddebugkeyisusedbyEclipsewhensigningapplicationsandtestprojectsbeforeinstallingthemontheemulator/device.Manytimesitiseasiertojustusethatkeywhenresigningtheapk. Details Tomakethisworkyouneedtoknowthepackagenameandthelauncheractivityname.Thosecanbeobtainedbystartingtheapplicationintheemulatorandwhatchingthelogs(adblogcat).Thelogshowswhatthepackagenameandtheactivitynameare.Anexampleofhowthelogmessagecanlooklike: "Startingactivity: Intent{act=android.intent.action.MAINcat=android.intent.category.LAUNCHER? flg=0x10200000cmp=com.example.android.notepad/.NotesList" Thatmeansthatthepackagenameis: com.example.android.notepadandthelauncheractivityname(LAUNCHER_ACTIVITY_FULL_CLASSNAMEintheexamplebelow)is: com.example.android.notepad.NotesList Whenyouhavethatinformationyoudothefollowing: Inyourtestproject'sAndroidManifest.xmlinEclipse,setthetargetpackagetothepackagenameyoufoundabove. Writeyourtestclasslikethis: (theexamplehereisforNewsRob) packagecom.yourcompany.yourtestname; importcom.jayway.android.robotium.solo.Solo; importandroid.test.ActivityInstrumentationTestCase2; @SuppressWarnings("rawtypes") publicclassReallyBlackboxTestextendsActivityInstrumentationTestCase2{ privatestaticfinalStringLAUNCHER_ACTIVITY_FULL_CLASSNAME="com.newsrob.DashboardListActivity"; privatestaticClass >launcherActivityClass; static{ try{ launcherActivityClass=Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME); }catch(ClassNotFoundExceptione){ thrownewRuntimeException(e); } } @SuppressWarnings("unchecked") publicReallyBlackboxTest()throwsClassNotFoundException{ super(launcherActivityClass); } privateSolosolo; @Override protectedvoidsetUp()throwsException{ solo=newSolo(getInstrumentation(),getActivity()); } publicvoidtestCanOpenSettings(){ solo.pressMenuItem(0); } @Override publicvoidtearDown()throwsException{ solo.finishOpenedActivities(); } } CanIuseRobotiumonpre-installedapplications? (支持预装App的测试,需要root) Yesyoucanifyouhavearootedphone.Moreinformationis foundhere. 需要root! ! ! 重签名 WithRobotiumitispossibletoruntestcasesonapplicationsthatarepre-installed.Forthistoworkyouneedtoresignthepre-installedapplicationwiththesamecertificatesigningofyourtestproject.Thatrequiresyoutohavearootedphoneasyoumusthaveaccesstothe/system/appfolderonthedevice. Observethatsomepre-installedapplicationsdonotfunctionproperlywhenre-installedwithanewcertificatesigning.Anexampleisthecontactsapplication(Contacts.apk)thatdoesnotshowupwhenre-signed. Details Therearesomestepsthatyouneedtofollowtomakeitwork: 1.Loginasroot: adbroot 2.Remount: adbremount 3.adbpull/system/app/X.apk(ReplaceXwiththenameoftheapplication) 4. ResignX.apk sothatithasthesamecertificatesigningasthetestproject 5.adbpull/data/system/packages.xml 6.Openpackages.xmlandremove: ..... 7.Pushpackages.xmlbacktodevice: adbpushpackages.xml/data/system 8.Restartyourdevice 9.PushtheresignedX.apkbacktothedevice: adbpushX.apk/system/app 10.Followthe detailssection CanIuseRobotiumwithhybrid(web)applications? (4.0支持web测试) Yesyoucan.SinceRobotium4.0,applicationswithwebcontentaresupported. CanItakescreenshotsfrominsideofRobotium? (支持截图) Yesyoucan.UsetakeScreenshot()tosaveascreenshotin"/sdcard/Robotium-Screenshots/".Observethatthisfunctionalityrequireswritepermission(android.permission.WRITE_EXTERNAL_STORAGE)intheAndroidManifest.xmloftheapplicationundertest. HowdoIrunRobotiumtestsfromthecommandline? (从命令行运行测试) Byusingthiscommand: adbshellaminstrument-wcom.android.foo/android.test.InstrumentationTestRunner Where com.android.foo isthenameofyourtestproject'spackage.Moreonthiscanbe foundhere. ForUsersNotDevelopingInEclipse Androidprovidestoolsforcreatingtestapplicationsusingacodeeditorandcommand-linetools. Robotium的缺点 无法对WebView进行操作 Robotium提供的API是面向过程的,测试代码的可扩展性差 Instrumentation框架下testapp和app运行在一个进程中,appcrash会导致testapp一并crash 参考: http: //www.taobaot
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- robotium 学习 笔记 V02