现在的位置: 首页 > 综合 > 正文

【android自动化测试】robotium 初体验

2013年09月03日 ⁄ 综合 ⁄ 共 3648字 ⁄ 字号 评论关闭

robotium 进行android自动化测试初体验,本文包含的内容:

一,只有APK,没有源码的情况下robotium测试:

二 有待测试apk的源码测试:

robotium网址:  http://code.google.com/p/robotium/

 

 

一,只有APK,没有源码的情况下robotium测试:

1)确保apk是debug签名;

      下载re-sign.jar,下载地址:http://www.troido.de/re-sign.jar;下载之后双击jar,拖拽apk到上面根据提示操作即可的到myApp_debug.apk;同时也会得到包名等信息;

2)新建测试工程;

   (1)新建工程,选择  Android Test Project ;

   (2)Test Target 选择“This Project”:

   (3)包名写同测试的apk同样的包名,或者加上.test 均可;

     例如,待测试的apk包名是 com.myapk ,则测试工程的包名可以是com.myapk  或者 com.myapk.tset

 3)加载 robotium-solo-2.1.jar;

      Download Robotium jar from

http://code.google.com/p/robotium/downloads/list

 4)写测试类;

   如下:

package com.trunk.ticket.act.test;

import com.jayway.android.robotium.solo.Solo;

import android.test.ActivityInstrumentationTestCase2;

public class TestApk extends ActivityInstrumentationTestCase2 {
	private static final String TARGET_PACKAGE_ID = "com.trunk.ticket.act";
	private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.trunk.ticket.act.MainActivity";
	private static Class launcherActivityClass;

	static {
		try {
			launcherActivityClass = Class
					.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
		} catch (ClassNotFoundException e) {
			throw new RuntimeException(e);
		}
	}

	public TestApk() throws ClassNotFoundException {
		super(TARGET_PACKAGE_ID, launcherActivityClass);
	}

	private Solo solo;

	@Override
	protected void setUp() throws Exception {
		solo = new Solo(getInstrumentation(), getActivity());
	}

	/*
	 * 我的测试函数
	 */
	public void testDisplayBlackBox() { // Enter any integer/decimal value for
										// first editfield, we are writing 10
		solo.enterText(0, "10"); // Enter any interger/decimal value for first
									// editfield, we are writing 20
		solo.clickOnButton("查询");
		// Verify that resultant of 10 x 20
//		assertTrue(solo.searchText("200"));
	}


	@Override
	public void tearDown() throws Exception {
		try {
			solo.finalize(); 	//Robotium will finish all the activities that have been open
		} catch (Throwable e) {
			e.printStackTrace();
		}
		getActivity().finish();
		super.tearDown();
	} 
}

 

     5)修改AndroidManifest.xml文件

 <instrumentation android:targetPackage="com.myapk" android:name="android.test.InstrumentationTestRunner" />
   instrumentation android:targetPackage 必须是待测试的包。

 

    在手机上安装待测试的apk,然后Run As AndroidJUnit Test 即可。

   参考资料:http://code.google.com/p/robotium/wiki/RobotiumForAPKFiles

二 有待测试apk的源码测试:

  1) 新建测试工程,同上,在选择Test Target 的时候选择待测试工程:

  其它信息会默认写好,点击 “Finish”即可。

2)写测试类

如下:

/*
 * This is an example test project created in Eclipse to test NotePad which is a sample 
 * project located in AndroidSDK/samples/android-9/NotePad
 * Just click on File --> New --> Project --> Android Project --> Create Project from existing source and
 * select NotePad.
 * 
 * Then you can run these test cases either on the emulator or on device. You right click
 * the test project and select Run As --> Run As Android JUnit Test
 * 
 * @author Renas Reda, renas.reda@jayway.com
 * 
 */

package com.mytest.app.test;

import com.mytest.app.test.MainActivity;
import com.jayway.android.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.Smoke;
import android.util.Log;


public class MyTest extends ActivityInstrumentationTestCase2<MainActivity>{
	
	private Solo solo;

	public MyTest() {
		super("com.mytest.app", MainActivity.class);
	}
	
	 public void setUp() throws Exception {
		 solo = new Solo(getInstrumentation(), getActivity());
		  }

	 /*
	  * 我的测试函数
	  */
	 @Smoke
	 public void testAddNote() throws Exception {
		 solo.clickOnMenuItem("Add note");
		 solo.enterText(0, "Note 2"); //In text field 0, add Note 2
		 solo.goBackToActivity("NotesList"); //Go back to first activity named "NotesList"
		 boolean expected = true;
		 boolean actual = solo.searchText("Note 1") && solo.searchText("Note 2");
		 assertEquals("Note 1 and/or Note 2 are not found", expected, actual); //Assert that Note 1 & Note 2 are found
		
	 }


	@Override
	public void tearDown() throws Exception {
		try {
			solo.finalize(); 	//Robotium will finish all the activities that have been open
		} catch (Throwable e) {
			e.printStackTrace();
		}
		getActivity().finish();
		super.tearDown();
	} 
}

3)AndroidManifest.xml 文件已经自动配置好,不用做修改,直接运行即可;

 

 

抱歉!评论已关闭.