Android JUnit test 进行自动化测试

 一. 被test的工程:

  新建一个android工程:D_session;它有一个activity:D_sessionActivity;package名:com.mysession

  二.测试工程:

  新建一个测试工程:D_sessionTest, 类型是android test project;

  1. menifest文件:


<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.mysession.test"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<instrumentation

android:name="android.test.InstrumentationTestRunner"

android:targetPackage="com.mysession" />

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

<uses-library android:name="android.test.runner" />

</application>

</manifest>

  2. 一个base activity 来定义各种模拟测试者的动作和判断测试结果,各个测试类都继承该类:


package com.mysession.test;

import android.app.Activity;

import android.app.Instrumentation;

import android.app.Instrumentation.ActivityMonitor;

import android.content.Intent;

import android.test.InstrumentationTestCase;

import android.test.TouchUtils;

import android.widget.Button;

import android.widget.TextView;

import com.mysession.D_sessionActivity;

public class SessionActivityTest extends InstrumentationTestCase {

private Instrumentation mInstrumentation;

private ActivityMonitor mSessionMonitor;

private Activity mCurrentActivity, mSessionActivity;

private String TextNotEqual = "text not equal.";

private static final String PackageName = "com.mysession";

@Override

protected void setUp() throws Exception {

// 初始化

super.setUp();

if (mInstrumentation == null) {

mInstrumentation = getInstrumentation();

}

mSessionActivity = null;

}

@Override

protected void tearDown() throws Exception {

super.tearDown();

//释放资源

closeActivity(mSessionActivity);

mCurrentActivity = null;

}

private void closeActivity(Activity activity) {

if(activity != null){

activity.finish();

activity = null;

}

}

public void openSessionActivity() {

// 打开session activity

try {

setUp();

} catch (Exception e) {

e.printStackTrace();

}

mSessionMonitor = mInstrumentation.addMonitor(

D_sessionActivity.class.getName(), null, false);

Intent intent = new Intent(Intent.ACTION_MAIN);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setClassName(PackageName, D_sessionActivity.class.getName());

mInstrumentation.startActivitySync(intent);

mSessionActivity = getInstrumentation().waitForMonitor(mSessionMonitor);

assertNotNull(mSessionActivity);

mCurrentActivity = mSessionActivity;

}

//判断text是否正确

public void assertTextEqual(int resId, String strText) {

TextView textView = (TextView) mCurrentActivity.findViewById(resId);

assertNotNull(textView);

assertEquals(TextNotEqual,

strText,

textView.getText().toString());

};

// 模拟按钮点击事件

public void clickButton(int resId){

Button button = (Button) mCurrentActivity.findViewById(resId);

assertNotNull(button);

TouchUtils.clickView(this, button);

}

}

 3. 各个测试类:

  测试类一:


package com.mysession.test.cases;

import com.mysession.R;

import com.mysession.test.SessionActivityTest;

public class MyCase1 extends SessionActivityTest {

public void testCase1() {

openSessionActivity();

assertTextEqual(R.id.etUrl,

"http://172.20.230.5/iportal/samples/jsapi/mobile.html");

}

public void testCase3() {

openSessionActivity();

clickButton(R.id.btnLoad);

clickButton(R.id.btnHistory);

}

}

  测试类二:


package com.mysession.test.cases;

import com.mysession.R;

import com.mysession.test.SessionActivityTest;

public class MyCase2 extends SessionActivityTest{

public void testCase2() {

openSessionActivity();

clickButton(R.id.btnLoad);

}

}

  三. 有些动作(如点击menu)需要通过包robotium-solo-1.8.0.jar来完成。

  所以要在Build Path->Configure Build Path…中导入:robotium-solo-1.8.0.jar

  程序中:

  private Solo solo;

  solo = new Solo(getInstrumentation(),getActivity);

  就可以使用solo了, 如:

  solo.clickOnMenuItem(text);

  solo.goBack();

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-05 22:43:20

Android JUnit test 进行自动化测试的相关文章

Android Junit Test 单元测试

单元测试有两种方法:根据具体情况而选择 1.在项目本身创建单元测试类,需要对项目清单文件:AndroidManifest.xml进行配置. 在<application></application>之间加<uses-library android:name="android.test.runner" /> 之后加 <instrumentation android:name="android.test.InstrumentationTes

Android App开发的自动化测试框架UI Automator使用教程_Android

Android的自动化测试有很多框架,其中ui automator是google官方提供的黑盒UI相关的自动化测试工具,(GitHub主页:case使用java写,今天实践了一下官方文档中样例程序,其中还是有一些小问题需要总结一下的. 环境准备: 1.JDK(是的,你没看错,基础的android开发环境必备),以及对应的环境变量配置,不会的可以自己百度下下 2.Android Studio(IDE尊崇个人意愿) 3.android SDK以及配置 4.ANT(主要用于build我们的脚本,生成j

Android App开发的自动化测试框架UI Automator使用教程

Android的自动化测试有很多框架,其中ui automator是google官方提供的黑盒UI相关的自动化测试工具,(GitHub主页:case使用java写,今天实践了一下官方文档中样例程序,其中还是有一些小问题需要总结一下的. 环境准备: 1.JDK(是的,你没看错,基础的android开发环境必备),以及对应的环境变量配置,不会的可以自己百度下下 2.Android Studio(IDE尊崇个人意愿) 3.android SDK以及配置 4.ANT(主要用于build我们的脚本,生成j

腾讯Android自动化测试实战

腾讯Android自动化测试实战 丁如敏 盛娟 等著 图书在版编目(CIP)数据 腾讯Android自动化测试实战 / 丁如敏等著. -北京:机械工业出版社,2016.10 ISBN 978-7-111-54875-1 Ⅰ. 腾-   Ⅱ. 丁-   Ⅲ. 移动终端-应用程序–程序设计   Ⅳ. TN929.53 中国版本图书馆CIP数据核字(2016)第223713号 腾讯Android自动化测试实战 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037) 责任编辑:

《精通移动App测试实战:技术、工具和案例》一2.3 应用JUnit对Android项目进行单元测试

2.3 应用JUnit对Android项目进行单元测试 2.3.1 JUnit基于Android项目TestCase的应用 如果我们对基于Android系统项目开发有一定了解的话,相信一定能看出来,其核心代码是计算两个整数相加的函数.我们做单元测试当然也挑选其最核心的函数来进行测试.可以按照如下的步骤来创建一个基于Android项目的测试用例(TestCase). 第一步:选中"CalculatorOfTwoNum"项目下的"src"目录中的"com.yu

Appium移动自动化测试(三) 安装Android模拟器

本文中如果直接安装时不出现错误,则可以忽略(一.二.三.四.五),我安装的是5.1.1,直接成功,就是有点慢,要有耐心. 如果到最后一步,启动不起来,报错: emulator: ERROR: x86 emulation currently requires hardware acceleration! Please ensure Intel HAXM is properly installed and usable. CPU acceleration status: HAX kernel mod

Appium移动自动化测试(二) 安装Android开发环境

继续Appium环境的搭建. 第二节  安装Android开发环境 如果你的环境是MAC那么可以直接跳过这一节.就像我们在用Selenium进行web自动化测试的时候一样,我们需要一个浏览器来执行测试脚本.那么移动端自动化测试,我们同样需要一部Android手机(手机需要链接电脑)或者Android模拟器. 安装java 环境 众所周知,Android是由Java语言开发的,所以想开发Android应用首先需要Java环境,所以,我们首先需要安装Java环境. java下载地址:http://w

Android中JUnit测试的配置

第一步:首先在AndroidManifest.xml中加入下面代码: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="hb.learn.junit" android:versionCode="1" andr

logcat- 当运行Android的JUnit测试时,LogCat&amp;amp;#39;s Log.x() 在哪里输出?

问题描述 当运行Android的JUnit测试时,LogCat's Log.x() 在哪里输出? 当我通过测试TestCase和AndroidTestCase中的派生类来测试普通的java类时,LogCat输出消失. 那它是否仍然可以捕获这些输出信息?或者说我只能使用更缓慢的ActivityInstrumentationTestCase2 < >作为基类? 解决方案 我在 Android 2.1中也遇见相似的问题.Eclipse中可查看logcat,但在Android Junit模式中运行程序