robotium从不会到精通.docx

上传人:小飞机 文档编号:3165225 上传时间:2023-03-11 格式:DOCX 页数:12 大小:41.31KB
返回 下载 相关 举报
robotium从不会到精通.docx_第1页
第1页 / 共12页
robotium从不会到精通.docx_第2页
第2页 / 共12页
robotium从不会到精通.docx_第3页
第3页 / 共12页
robotium从不会到精通.docx_第4页
第4页 / 共12页
robotium从不会到精通.docx_第5页
第5页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《robotium从不会到精通.docx》由会员分享,可在线阅读,更多相关《robotium从不会到精通.docx(12页珍藏版)》请在三一办公上搜索。

1、robotium从不会到精通 一、Robotium简介 Robotium是一个测试框架,能够方便你为Android应用程序编写强大、健壮的自动化黑盒测试用例。利用Robotium的支持,用例开发人员能够编写功能、系统和验收测试方案,跨越多个 Android activities。Robotium支持Activities、Dialogs、Toasts、Menus和Context Menus。 Robotium自动化测试方法能够模仿普通用户行为,可以试着把一些原来由测试工程师做的测试变成Robotium自动化实现。 Robotium 提供下列好处 1.以最小的应用程序知识,开发功能强大的测试案例。

2、 2.框架支持多个activities 自动活动。 3.最短的时间需求写出测试用例。 4.测试案例的可读性比标准的仪器测试大大提高。 5.通过运行时绑定GUI组件使测试用例更强大。 6.执行测试用例速度快。 7.顺利整合了Maven或Ant来运行测试,持续集成的一部分。 8.该工具用于黑盒的自动化测试。可以在有源码或者只有APK的情况下对目标应用进行测试,提供了模仿用户操作行为的API,比如在某个控件上点击,输入 Text 等等。 二、Robotium测试工程创建 建立工程有两种: 1、依赖工程建立:如notePadTest 2、建立独立的测试工程,这样的工程需要将apk包重新签名,之后安装到

3、模拟器或真机上。然后就可以运行了。 确保环境 1.已经安装eclipse 2.Eclipse已经配置好android相关环境 3.存在已经创建模拟器 4.存在一个编译通过的被测工程 这里以AndroidSDK/samples/android-9/NotePad为例: 在Eclipse中导入该工程 File - New - Project - Android Project - Create Project from existing source - NotePad. 步骤 1. 在官方down栏下下载所需要的jar包 地址: 2.创建一个Test Project 1)打开eclipse,选择

4、File - New - Project - Android - Android Test Project,点击Next。2)在Test Project Name中输入测试工程的名称,如:NotePadTest。选择An existing Android Project,点击下一步。 3)选择被测工程notePad。 4)点击Finish按钮,一个新建的测试工程就创建好了。 3.创建一个Test Case 1)在NotePadTest - src - com.example.android.notepad.test上,右击选择New - JUnit Test Case,创建一个Test Cas

5、e。 2)在Name中输入Test Case的名字NotePadTest。 3)Superclass改为android.test.ActivityInstrumentationTestCase2。 4)选择创建setUp、tearDown和constructor后,点击Finish按钮。 4.导入robotium.jar 1)选择测试工程NotePadTest右击,选择Build Path- Configure Build Path 2)在打开的Properties for NotePadTest中点击Add External JARs按钮。 3)导入本机中的robotium-solo-2.2

6、.jar文件,在build path中, Order and Export, 勾选 robotium 的两个jar包在击OK按钮。 5.修改java Compiler 1)选择测试工程NotePadTest右击,选择Properties - java Compiler - Enable project specific settings。Compiler complicance level选择1.6,点击OK按钮。 2)Clean my test project.Properties Java Build Path Libraries, delete Android Dependencies

7、in my test project 6.编写Robotium测试程序 1)导包 /导入需要测试的工程import com.example.android.notepad.NotesList; /robotium提供的测试用类import com.jayway.android.robotium.solo.Solo; /测试工程要继承用来测试activity的父类 import android.test.ActivityInstrumentationTestCase2; 2)泛型写需要测试的工程的入口 private static Class launcherActivityClass;/定义类

8、 private static final String PackageName = com.example.android.notepad;/定义包名 private static final String Lanch_activity_full_className=com.example.android.notepad.NotesList;/定义启动activity static /创建异常 try launcherActivityClass = Class.forName(Lanch_activity_full_className); catch (ClassNotFoundExcept

9、ion e) throw new RuntimeException(e); 3)修改构造方法 public Relogin super(PackageName,launcherActivityClass); 4) 在测试方法前覆写父类的setUp方法: 该方法用来初始化solo,绑定对应的Activity。 Override public void setUp throws Exception super.setUp; solo = new Solo(getInstrumentation, getActivity); 5)在测试方法后覆写父类的tearDown方法: 该方法用来清理资源垃圾,关

10、闭activity。 public void tearDown throws Exception solo.finishOpenedActivities; 6)Solo类运用 Solo类中提供了自动点击、取得、拖拽、搜索等各种方法。 声明Solo类型的成员变量private Solo solo; 典型方法: 点击: clickOnButton(int)Clicks on a Button with a given index. clickOnButton(String)Clicks on a Button with a given text. clickOnCheckBox(int)Click

11、s on a CheckBox with a given index. clickOnView(View)Clicks on a given View. clickOnText(String)Clicks on a View displaying a given text. clickLongOnText(String)Long clicks on a given View. clickOnRadioButton(int)Clicks on a RadioButton with a given index. clickOnScreen(float, float)Clicks on a give

12、n coordinate on the screen. 取得: getCurrentActivityReturns the current Activity. getText(String)Returns a TextView which shows a given text. getView(int)Returns a View with a given id. getEditText(String)Returns an EditText which shows a given text. getImage(int)Returns an ImageView with a given inde

13、x. 拖拽: drag(float, float, float, float, int)Simulate touching a given location and dragging it to a new location. 搜索: searchText(String)Searches for a text string and returns true if at least one item is found with the expected text. searchEditText(String)Searches for a text string in the EditText o

14、bjects located in the current Activity. searchButton(String, boolean)Searches for a Button with the given text string and returns true if at least one Button is found. 更多方法请参见Solo的API文档: 7)创建需要的测试方法 可以根据不同目的编写多个测试方法。注意方法名称必须以test开头,程序运行会自动调用以test开头的方法。每次调用测试方法都会运行一次测试工程。下面是测试程序完整代码: import com.examp

15、le.android.notepad.NotesList; import com.jayway.android.robotium.solo.Solo; import android.test.ActivityInstrumentationTestCase2; private static Class launcherActivityClass; private static final String PackageName = com.example.android.notepad; private static final String Lanch_activity_full_classNa

16、me=com.example.android.notepad.NotesList; static try launcherActivityClass = Class.forName(Lanch_activity_full_className); catch (ClassNotFoundException e) throw new RuntimeException(e); public Relogin super(PackageName,launcherActivityClass); Override public void setUp throws Exception super.setUp;

17、 solo = new Solo(getInstrumentation, getActivity); Smoke public void testAddNote throws Exception solo.clickOnMenuItem(Add note); /Assert that NoteEditor activity is opened solo.assertCurrentActivity(Expected NoteEditor activity, NoteEditor); /In text field 0, add Note 1 solo.enterText(0, Note 1); s

18、olo.goBack; /Go back solo.clickOnMenuItem(Add note); /Clicks on menu item solo.enterText(0, Note 2); /In text field 0, add Note 2 /Go back to first activity named NotesList solo.goBackToActivity(NotesList); boolean expected = true; boolean actual = solo.searchText(Note 1) & solo.searchText(Note 2);

19、/Assert that Note 1 & Note 2 are found assertEquals(Note 1 and/or Note 2 are not found, expected, actual); Smoke public void testEditNote throws Exception solo.clickInList(2); / Clicks on the second list line / Change orientation of activity solo.setActivityOrientation(Solo.LANDSCAPE); solo.clickOnM

20、enuItem(Edit title); / Change title solo.enterText(0, test);/In first text field (0), add test. solo.goBackToActivity(NotesList); boolean expected = true; / (Regexp) case insensitive boolean actual = solo.searchText(?i).*?note 1 test); /Assert that Note 1 test is found assertEquals(Note 1 test is no

21、t found, expected, actual); Smoke public void testRemoveNote throws Exception /(Regexp) case insensitive/text that contains test solo.clickOnText(?i).*?test.*); solo.clickOnMenuItem(Delete); /Delete Note 1 test /Note 1 test & Note 2 should not be found boolean expected = false; boolean actual = solo

22、.searchText(Note 1 test); /Assert that Note 1 test is not found assertEquals(Note 1 Test is found, expected, actual); solo.clickLongOnText(Note 2); /Clicks on Delete in the context menu solo.clickOnText(?i).*?Delete.*); actual = solo.searchText(Note 2); /Assert that Note 2 is not found assertEquals(

23、Note 2 is found, expected, actual); Override public void tearDown throws Exception solo.finishOpenedActivities; 7.运行测试程序 选择测试工程NotePadTest右击,选择Run As-Android JUnit Test,运行测试程序。测试程序运行log如下: 测试程序运行中的部分截图: 测试成功的情况下,测试结果如下: 测试失败的情况下,测试结果如下: 以上步骤是在eclipse中进行测试的,也可以在模拟器或者手机上测试。如果需要直接在模拟器或者手机上测试,需要将测试包和被测试

24、包改成相同的签名。 这样的话,建立工程时,就不用依赖源原程序了,只要将重新签名的apk包安装到真机或者模拟器上就可以了。建立工程时: 需要修改xml文件: 三、Resign重新签名: re-sign.jar,这是个签名工具,运行时,很简单。 方法1: 安装jdk,然后直接点击,之后将apk包放入其中,可以得到包名,原包名和启动的activity。 方法2: 呼出cmd,输入java -jar resign.jar即可。但你要定位到包含这个.jar的文件夹。 注意:使用这个工具有个条件,你的sdk将debugkey安装到了C:UsersAdministrator.androiddebug.key

25、store这个路径之下,而且,在eclipse里,也是这个路径。这样的话,才能够成功。如果不成功的话,没关系。还有下一个方法,百试不爽。 1、用命令方式,重新签名: 注:拿到一个apk后,首先删除META-INF。 1、如果你的电脑装的是jdk1.6,就用下面的命令: 打开命令符,首先直接输入: Jarsigner -keystore C:UsersAdministrator.androiddebug.keystore -storepass android -keypass android F:robotiumSignc.apk androiddebugkey 之后输入: zipalign 4

26、 F:robotiumSignc.apk F:robotiumSignc_sign.apk 1、C:UsersAdministrator.androiddebug.keystore:debug.keystore路径 2、F:robotiumSignc.apk :需要签名的apk包的路径。 3、F:robotiumSignc_sign.apk:签名后的apk包的路径 2、如果你的电脑装的是jdk1.7,: 打开命令符,首先直接输入: jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore C:UsersAdministrator.androi

27、ddebug.keystore -storepass android -keypass android F:robotiumSignc.apk androiddebugkey 之后输入: zipalign 4 F:robotiumSignc.apk F:robotiumSignc_sign.apk 1、-digestalg SHA1 -sigalg MD5withRSA 添加这行代码。 四、管理多个case 建立如下类,添加:还要添加库,package com.yuan.clientapp.relogin.test; import junit.framework.Test; import ju

28、nit.framework.TestSuite; import com.yuan.clientapp.test.*;/导入测试包 /import com.yuan.clientapp.relogin.test.*; public class TestSuit public static Test suite TestSuite suite = new TestSuite(Sample Tests); suite.addTestSuite(clientappTest.class); /导入测试类 suite.addTestSuite(Relogin.class);/导入测试类 /* 逐一添加test suite(注意,这是递归调用的) */ / suite.addTest(AnotherTestSuite.suite); return suite; public static void main(String args) junit.textui.TestRunner.run(suite); 五、常见问题解答: 1、报错: 没有导入并勾选库,解决: 1、在库中添加并勾选robotium库,点击ok。 2、如果还是不行的话,选中Android Deoendencies,之后Remove。 3、最后,来个彻底的,点击project,点击clean,选中要清理的工程,之后清理。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号