Android Robotium自动化测试二

来源:互联网 发布:淘宝女打底衫 编辑:程序博客网 时间:2024/05/21 19:33
[java] view plaincopy
  1. /* 
  2.  * This is an example test project created in Eclipse to test NotePad which is a sample  
  3.  * project located in AndroidSDK/samples/android-11/NotePad 
  4.  *  
  5.  *  
  6.  * You can run these test cases either on the emulator or on device. Right click 
  7.  * the test project and select Run As --> Run As Android JUnit Test 
  8.  *  
  9.  * @author Renas Reda, renas.reda@jayway.com 
  10.  *  
  11.  */  
  12.   
  13. package com.jayway.test;  
  14.   
  15. import com.example.android.notepad.NotesList;  
  16. import com.jayway.android.robotium.solo.Solo;  
  17. import android.test.ActivityInstrumentationTestCase2;  
  18.   
  19.   
  20. public class NotePadTest extends ActivityInstrumentationTestCase2<NotesList>{  
  21.   
  22.     private Solo solo;  
  23.   
  24.     public NotePadTest() {  
  25.         super(NotesList.class);  
  26.   
  27.     }  
  28.       
  29.     @Override  
  30.     public void setUp() throws Exception {  
  31.         //setUp() is run before a test case is started.   
  32.         //This is where the solo object is created.  
  33.         solo = new Solo(getInstrumentation(), getActivity());  
  34.     }  
  35.       
  36.     @Override  
  37.     public void tearDown() throws Exception {  
  38.         //tearDown() is run after a test case has finished.   
  39.         //finishOpenedActivities() will finish all the activities that have been opened during the test execution.  
  40.         solo.finishOpenedActivities();  
  41.     }  
  42.   
  43.   
  44.     public void testAddNote() throws Exception {  
  45.         solo.clickOnMenuItem("Add note");  
  46.         //Assert that NoteEditor activity is opened  
  47.         solo.assertCurrentActivity("Expected NoteEditor activity""NoteEditor");   
  48.         //In text field 0, add Note 1  
  49.         solo.enterText(0"Note 1");  
  50.         solo.goBack();   
  51.         //Clicks on menu item  
  52.         solo.clickOnMenuItem("Add note");  
  53.         //In text field 0, add Note 2  
  54.         solo.enterText(0"Note 2");  
  55.         //Go back to first activity named "NotesList"  
  56.         solo.goBackToActivity("NotesList");   
  57.         //Takes a screenshot and saves it in "/sdcard/Robotium-Screenshots/".  
  58.         solo.takeScreenshot();  
  59.         boolean expected = true;  
  60.         boolean actual = solo.searchText("Note 1") && solo.searchText("Note 2");  
  61.         //Assert that Note 1 & Note 2 are found  
  62.         assertEquals("Note 1 and/or Note 2 are not found", expected, actual);   
  63.   
  64.     }  
  65.   
  66.     public void testEditNote() throws Exception {  
  67.         // Click on the second list line  
  68.         solo.clickInList(2);   
  69.         // Change orientation of activity  
  70.         solo.setActivityOrientation(Solo.LANDSCAPE);  
  71.         // Change title  
  72.         solo.clickOnMenuItem("Edit title");  
  73.         //In first text field (0), add test  
  74.         solo.enterText(0" test");    
  75.         solo.goBack();  
  76.         boolean expected = true;  
  77.           
  78.         // (Regexp) case insensitive  
  79.         boolean actual = solo.waitForText("(?i).*?note 1 test");   
  80.         //Assert that Note 1 test is found  
  81.         assertEquals("Note 1 test is not found", expected, actual);   
  82.   
  83.         solo.  
  84.     }  
  85.   
  86.     public void testRemoveNote() throws Exception {  
  87.         //(Regexp) case insensitive/text that contains "test"  
  88.         solo.clickOnText("(?i).*?test.*");  
  89.         //Delete Note 1 test  
  90.         solo.clickOnMenuItem("Delete");  
  91.         //Note 1 test & Note 2 should not be found  
  92.         boolean expected = false;     
  93.         boolean actual = solo.searchText("Note 1 test");  
  94.         //Assert that Note 1 test is not found  
  95.         assertEquals("Note 1 Test is found", expected, actual);    
  96.         solo.clickLongOnText("Note 2");  
  97.         //Clicks on Delete in the context menu  
  98.         solo.clickOnText("Delete");    
  99.         actual = solo.searchText("Note 2");  
  100.         //Assert that Note 2 is not found  
  101.         assertEquals("Note 2 is found", expected, actual);    
  102.     }  
  103. }  


Robotium代码解析:

1、在Robotium工程中需要引用用robotium-solo-3.6.jar包。

[java] view plaincopy
  1. public class NotePadTest extendsActivityInstrumentationTestCase2<NotesList>  
[java] view plaincopy
  1.   

2、继承类ActivityInstrumentationTestCase2<NotesList>,并在 测试工程中定义一个solo对象,使用此对象做自动化操作。

[java] view plaincopy
  1. private Solo solo;  

3、在构造方法中指定被测程序中的主Activity,即被测项目源代码中查看AndroidManifest.xml文件中注册的activity的action属性为:

[java] view plaincopy
  1. <activity android:name="NotesList"  
  2.            android:label="@string/title_notes_list">  
  3.             <intent-filter>  
  4.                 <actionandroid:name="android.intent.action.MAIN" />  
  5.                 <categoryandroid:name="android.intent.category.LAUNCHER" />  
  6.             </intent-filter>  
  7. </activity>  

在这里对应的是NotePad项目中的NotePad类。

[java] view plaincopy
  1. public NotePadTest() {  
  2.        super(NotesList.class);  
  3.     }  

4、setUp( )方法是在自动化操作前的做一下配置。

    

[java] view plaincopy
  1. @Override  
  2.     public voidsetUp() throws Exception {  
  3.        solo = newSolo(getInstrumentation(), getActivity());  
  4.     }  

5、tearDown()方法在测试用例已经执行完成时,关闭所有在测试过程中的活动事件。

[java] view plaincopy
  1. @Override  
  2.     public voidtearDown() throws Exception {  
  3.        solo.finishOpenedActivities();  
  4.     }  

6、常用操作包括点击、长按、滚动屏幕、设置等待时间等操作。

[java] view plaincopy
  1. public void testAddNote() throws Exception {  
  2.        solo.clickOnMenuItem("Addnote");  
  3.        //Assert thatNoteEditor activity is opened  
  4.        solo.assertCurrentActivity("ExpectedNoteEditor activity""NoteEditor");   
  5.        //In textfield 0, add Note 1  
  6.        solo.enterText(0,"Note 1");  
  7.        solo.goBack();   
  8.        //Clicks onmenu item  
  9.        solo.clickOnMenuItem("Addnote");  
  10.        //Assert thatNoteEditor activity is opened  
  11.        solo.assertCurrentActivity("ExpectedNoteEditor activity""NoteEditor");  
  12.        //In textfield 0, add Note 1  
  13.        solo.enterText(0,"Note 1");  
  14.        solo.goBack();  
  15.        //Clicks onmenu item  
  16.        solo.clickOnMenuItem("Addnote");  
  17.        //In textfield 0, add Note 2  
  18.        solo.enterText(0,"Note 2");  
  19.        //Go back tofirst activity named "NotesList"  
  20.        solo.goBackToActivity("NotesList");  
  21.        //Takes ascreenshot and saves it in "/sdcard/Robotium-Screenshots/".  
  22.        solo.takeScreenshot();  
  23.        booleanexpected = true;  
  24.        booleanactual = solo.searchText("Note 1") &&solo.searchText("Note 2");  
  25.        //Assert thatNote 1 & Note 2 are found  
  26.        assertEquals("Note1 and/or Note 2 are not found", expected, actual);  
  27.    
  28.     }  


7、assertEquals( )验证实际结果和期望结果,如果实际结果和期望结果不一致,则该测试用例执行失败,并停止执行该用例。例子中给出的是三个用例组成的测试集,当其中一个测试用例执行失败,不影响其他测试用例执行。Junit测试结果中给出了详细的执行结果以及执行失败原因的提示。

 

以上是对Android Robotium自动化测试工具的基本解析,大家可以调试体验其他的一些功能。

[java] view plaincopy
  1. <p>  
  2. </p>  
  3. 文章转载来源:http://blog.csdn.net/nick1211/article/details/8585026
  4. 作者:Nick1211