创建自动化测试项目
打开Eclipse,点击File->New一个Android Test Project mitalktest(之前用新浪微博但发现re-sign后装上去打开不了),然后点击下一步的时候选择This project(因为我们没有米聊应用的源码),然后选择要在哪个android版本上测试
在该项目下创建一个包,com.mitalk.test,在该包下创建LoginTest类,如下
package com.mitalk.test;
import org.junit.Test;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import com.jayway.android.robotium.solo.Solo;
@SuppressWarnings("rawtypes")
public class LoginTest extends ActivityInstrumentationTestCase2 {
public Solo solo;
public Activity activity;
private static Class<?> launchActivityClass;
//对应re-sign.jar生成出来的信息框里的两个值
private static String mainActiviy = "com.xiaomi.channel.ui.ChannelLauncherActivity";
private static String packageName = "com.xiaomi.channel";
static {
try {
launchActivityClass = Class
.forName(mainActiviy);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public LoginTest() {
super(packageName, launchActivityClass);
}
@Override
protected void setUp() throws Exception {
super.setUp();
this.activity = this.getActivity();
this.solo = new Solo(getInstrumentation(), getActivity());
}
public void testLoginWithIncorrentUsernameAndPassword() {
}
@Override
public void tearDown() throws Exception {
try {
this.solo.finishOpenedActivities();
} catch (Throwable e) {
e.printStackTrace();
}
this.activity.finish();
super.tearDown();
}
}
右键该项目,选择property然后选择
java build path, 选择 Add External JARs,选择下到的robotium.jar
往 testLoginWithIncorrentUsernameAndPassword()方法添加入下代码 主要要来验证下输入错误用户名和密码给出的提示信息是否和预期相符
solo.waitForText("Login", 1, 10000);
solo.clickOnText("Login");
solo.waitForText("OK", 1, 2000);
solo.enterText(0, "13559494170");
solo.enterText(1, "123456");
solo.clickOnText("OK");
solo.waitForText("Incorrect ID number or password.", 1, 10000);
assertTrue(solo.searchText("Incorrect ID number or password.",true));
在跑
测试用例之前,还需要修改下AndroidManifest.xml文件的android:targetPackage为被测应用的根的包名
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.xiaomi.channel" />
以上都弄完了,run as android junit test,就可以跑了
使用junit TestSuite可以用例管理我们测试脚本的执行
在上面的基础上再新建一个测试脚本 如下:
package com.mitalk.test;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import com.jayway.android.robotium.solo.Solo;
@SuppressWarnings("rawtypes")
public class LoginTest2 extends ActivityInstrumentationTestCase2 {
public Solo solo;
public Activity activity;
private static Class<?> launchActivityClass;
//对应re-sign.jar生成出来的信息框里的两个值
private static String mainActiviy = "com.xiaomi.channel.ui.ChannelLauncherActivity";
private static String packageName = "com.xiaomi.channel";
static {
try {
launchActivityClass = Class
.forName(mainActiviy);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public LoginTest2() {
super(packageName, launchActivityClass);
}
@Override
protected void setUp() throws Exception {
super.setUp();
this.activity = this.getActivity();
this.solo = new Solo(getInstrumentation(), getActivity());
}
public void testLoginWithEmptyUsernameAndPassword() {
solo.waitForText("Login", 1, 8000);
solo.clickOnText("Login");
solo.waitForText("OK", 1, 2000);
solo.clickOnText("OK");
assertTrue(solo.searchText("Info is missing.",true));
}
@Override
public void tearDown() throws Exception {
try {
this.solo.finishOpenedActivities();
} catch (Throwable e) {
e.printStackTrace();
}
this.activity.finish();
super.tearDown();
}
}
然后新建一个TestSuit类,配置使其可以跑这两个cases
package com.mitalk.testsuit;
import junit.framework.Test;
import junit.framework.TestSuite;
import com.mitalk.test.LoginTest;
import com.mitalk.test.LoginTest2;
public class MyTestSuit {
public static Test suite() {
TestSuite suite = new TestSuite("Sample Tests");
suite.addTestSuite(LoginTest.class);
suite.addTestSuite(LoginTest2.class);