[Android]官网《Testing Support Library》中文翻译


以下内容为原创,欢迎转载,转载请注明
来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5048524.html

翻译自 Android Developer 官网:http://developer.android.com/tools/testing-support-library/index.html

Testing Support Library

Android Testing Support Library为Android app的测试提供了一个广泛的框架。 这个库提供了一系列的API可以让你快速build和run你app的代码,它包括了JUnit 4和功能性的用户界面(UI)测试。你可以通过Android Studio IDE或者命令行的方式运行你使用这些API创建的测试。

Android Testing Support Library已经可以通过Android SDK Manager下载使用了。详情可见Testing Support Library Setup

这页中会提供一些关于Android Testing Support Library中所提供的工具的信息,怎样在你的测试环境中使用它们,还有库发布的相关信息。

Testing Support Library的特性

Android Testing Support Library提供包括了以下自动化测试工具:

  • AndroidJUnitRunner:兼容Android的JUnit 4。
  • Espresso:UI测试框架,适用于app内的功能性UI测试。
  • UI Automator:UI测试框架,适用于系统和安装app间跨app的功能性UI测试。

AndroidJUnitRunner

AndroidJUnitRunner 类是一个 JUnit 测试runner,它可以让你在Android设备上运行JUnit 3或者JUnit 4-style的测试类,包括使用了 EspressoUI Automator 测试框架的。test runner处理的事情有 加载你的测试package和需要在设备上测试的app,运行你的测试,还有报告测试结果。这个类会替换掉只支持JUnit 3测试的InstrumentationTestRunner类。

这个test runner的关键特性包括:

需要 Android2.2(API level 8) 或者更高。

JUnit的支持

Rest runner兼容JUnit 3JUnit 4(最高到JUnit 4.10)的测试。不管怎样,你应该避免在一个package中混合使用JUnit 3和 JUnit 4的代码,因为这样做可能会引发一些预料之外的问题。如果你创建了一个JUnit 4的测试类在设备或者模拟器上运行时,你的测试类必须要加上@RunWith(AndroidJUnit4.class)注解作为前缀。

下面的代码片段展示了你应该怎么去编写一个JUnit 4测试来验证CalculatorActivity类中的add操作是正确执行的。

import android.support.test.runner.AndroidJUnit4;
import android.support.test.runner.AndroidJUnitRunner;
import android.test.ActivityInstrumentationTestCase2;

@RunWith(AndroidJUnit4.class)
public class CalculatorInstrumentationTest
        extends ActivityInstrumentationTestCase2<CalculatorActivity> {

    @Before
    public void setUp() throws Exception {
        super.setUp();

        // 当你使用`AndroidJUnitRunner`运行测试时,
        // 注入Instrumentation实例是必要的。
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        mActivity = getActivity();
    }

    @Test
    public void typeOperandsAndPerformAddOperation() {
        // 调用CalculatorActivity add()方法并传入一些操作数据,
        // 然后检查返回值是否是期望值
    }

    @After
    public void tearDown() throws Exception {
        super.tearDown();
    }
}

访问instrumentation信息

你可以使用 InstrumentationRegistry 类来访问你测试的app的相关信息。这个类包含一个 Instrumentation 对象,目标app的 Context 对象,还有你通过命令行传入到该测试的参数。这个数据在你使用UI Automator框架编写测试或者编写一些依赖 Instrumentation 或者 Context 对象的测试的时候是很有用的。

测试过滤

在你的 JUnit 4 测试中, 你可以使用注解来配置你的测试的运行。这会最大限度地减少你测试中需要的模版代码和有条件的代码。除了 JUnit 4 支持的标准注解,test runner也支持一些针对Android的特殊的注解,包括:

  • @RequiresDevice:指明这个测试只能运行的物理设备上面,而不是模拟器上面。
  • @SdkSupress:限制这个测试运行在低于给定的Android API level。举个例子,限制测试运行在API level低于18的环境下,使用注解 @SDKSupress(minSdkVersion=18)
  • @SmallTest@MediumTest,和@LargeTest:对测试需要的时间运行来分类,因此,可以决定是否可以经常运行该测试。

测试拆分

Test runner 支持把一个测试套件分割成多个碎片,所以你可以很简单地运行属于通过碎片分组的所有测试,并且它们使用同一个 Instrumentation 实例。每一个碎片都有一个索引编号(index number)作为它的唯一识别。当运行测试时,使用 -e numShards 选项来指定要创建的碎片的数量和 -e shardIndex 选项来指定哪些碎片运行。

举个例子,把一个测试套件分割成10个碎片,并且只运行被分组的测试中的第二个碎片,使用以下的命令:

adb shell am instrument -w -e numShards 10 -e shardIndex 2

这个 test runner 的更多相关学习,见 API reference

Espresso

Espresso 测试框架提供了一系列的API用于构建UI测试来测试app内用户流操作。这些API让你可以编写简洁可靠的自动化UI测试。Espresso非常适合用来编写白盒测试,其中测试代码的编写是利用了被测试app中程序代码实现细节。

Espresso测试框架的关键特性包括:

  • 提供了灵活的API用于匹配目标app中viewadapter。更多的信息,见 View 匹配
  • 大而全的 行为 api(action APIs) 用于自动化UI交互。更多的信息,见 行为 APIs
  • UI线程同步来提高测试可靠性。更多信息,见 UI 线程同步

需要 Android2.2(API level 8) 或者更高。

View 匹配

Espresso.onView() 方法可以让你访问目标app中的一个UI组件并与它交互。这个方法接收一个 Matcher 作为参数,然后根据我们给定的条件在view的层次结构中搜索出对应相符的View实例。你可以使用如下的条件来优化你的搜索结果:

  • View的类名
  • View内容的描述(content description
  • View的R.id
  • View显示的文本

举个例子,寻找一个ID为my_button的目标button,你可以如以下一样指定一个matcher:

onView(withId(R.id.my_button));

如果搜索是成功的,onView() 方法会返回一个可以让你执行用户行为和测试目标中对view断言的引用。

Adapter 匹配

在一个 AdapterView 的布局中,布局是在运行时根据children动态填充的。如果目标view是在 AdapterView 子类(比如ListView 或者 GridView)的布局中的,onView() 方法可能就不起作用了,因为当前加载的view层次结构可能只是layout的一个子集。

替代方案是使用 Espresso.onData() 方法去访问一个目标view元素。Espresso.onData() 方法返回一个可以让你执行用户行为和测试目标 AdapterView 中对元素断言的引用。

行为 APIs

典型的,你可以通过对app的用户界面执行一些用户交互来测试app。在你的测试中使用 ViewActions API 可以让你很容易地自动化这些行为。你可以通过以下方式执行这些UI交互:

  • View的点击
  • 滑动
  • 按键和按钮的按下
  • 输入文本
  • 打开一个链接

举个例子,模拟输入一个字符串数据并按下按钮来提交这个值,你可以像这样编写一个自动化测试脚本。 ViewInteraction.preform()DataInteraction.perform() 方法接收一个或者多个ViewAction 参数并且按照提供的顺序执行这些actions

// 在一个EditText中输入文本信息,然后关闭软键盘
onView(withId(R.id.editTextUserInput))
    .perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());

// 按下按钮来提交改变的文本
onView(withId(R.id.changeTextBt)).perform(click());

UI线程同步

在Android设备上测试可能由于时间的关系会随机性地失败。这个测试问题称为test flakiness(测试片状)。在Espresso之前,变通的办法是在测试中插入足够长的睡眠或者一段时间后超时,或者增加在操作失败之后保持重试的代码。Espresso测试框架会在Instrumentation和UI线程之间保持同步;这样就可以去掉之前因为时间问题使用的变通的方法,并且确保你测试的行为和断言运行更加可靠。

更多Espresso的相关学习,见 API reference针对单个App的UI测试 练习。

UI Automator

UI Automator测试框架提供了一系列的API来构建在用户app和系统app之间的UI测试。UI Automator APIs 允许你在测试设备中执行例如打开设置菜单或者launcher等操作。UI Automator 测试框架非常适合用来写黑盒测试,其中测试代码的编写不需要依赖于目标app的内部实现细节。

UI Automator测试框架的关键特性包括:

需要 Android4.3(API level 18) 或者更高。

UI Automator Viewer

uiautomatorviewer 工具提供了一个方便的GUI来扫描和分析当前在Android设备上显示的UI组件。你可以使用这些工具来检查layout层次结构和查看在设备前台可见的组件的属性。这个信息可以让你使用UI Automator创建更加细粒度的测试,比如创建一个匹配指定的可见性属性的UI选择器。

uiautomatorviewer 工具在 <android-sdk>/tools/ 目录下。

访问设备状态

UI Automator测试框架提供了一个 UIDevice 类在目标app运行的设备上访问和执行操作。你可以调用它的方法来访问如当前的设备定向活着显示尺寸等设备属性。 UIDevice 类也可以让你执行一些如下的行为:

  • 旋转设备
  • 按下 D-pad
  • 按下返回键、Home键、菜单键
  • 打开通知栏
  • 当前的窗口截图

举个例子,模拟按下Home按钮,调用 UiDevice.pressHome() 方法。

UI Automator APIs

UI Automator APIs 允许你在不需要知道目标app实现细节的情况下去编写强大的测试。你可以使用这些APIs来捕获和操作跨越多个app的UI组件:

  • UiCollection:枚举容器中的UI元素来计数,或者通过子元素的可见text或content-description属性来作为一个目标。
  • UiObject:代表在设备上一个可见的UI元素。
  • UiScrollable:对可滚动的UI容器中搜索UI元素提供支持。
  • UiSelector:代表一个设备上对一个或者多个目标UI元素的查询。
  • Configurator:允许你设置UI Automator测试的关键参数。

举个例子,下面的代码展示了怎么样去编写一个测试脚本来获取默认的app launcher:

// 初始化 UiDevice 实例
mDevice = UiDevice.getInstance(getInstrumentation());

// 在 HOME 按钮上执行一个短暂的按压
mDevice().pressHome();

// 通过匹配启动按钮的content-description来搜索一个UI组件
// 得到默认的launcher
UiObject allAppsButton = mDevice
        .findObject(new UiSelector().description("Apps"));

// 在得到的launcher 按钮上面执行一个点击
allAppsButton.clickAndWaitForNewWindow();

更多UI Automator相关学习,见 API reference多App的UI测试 练习。

Testing Support Library Setup

Android Testing Support Library package已经包含在最新版本的作为补充库、可在SDK Manager中下载的Android Support Repository中。

通过SDK Manager下载Android Support Repository:

  1. 启动 Android SDK Manager
  2. 在SDK Manager窗口,滚动到Packages列表的最底部,找到Extras目录,如果需要,把它展开显示它的内容。
  3. 找到 Android Support Repository 项。
  4. 点击 Install packages... 按钮。

下载完之后,工具把Support Repository文件安装在存在的Android SDK目录。库文件会被放置在你SDK目录的子目录中:<sdk>/extras/android/m2respository 目录。

Android Testing Support Library 类被放置在android.support.test包下面。

为了在你的Gradle项目中使用Android Testing Support Library,在你的build.gradle文件中增加如下依赖:

dependencies {
  androidTestCompile 'com.android.support.test:runner:0.4'
  // Set this dependency to use JUnit 4 rules
  androidTestCompile 'com.android.support.test:rules:0.4'
  // Set this dependency to build and run Espresso tests
  androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
  // Set this dependency to build and run UI Automator tests
  androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}

为了在你的Gradle项目中默认使用AndroidJUnitRunner作为默认的instrumentation runner,在你的build.gradle文件中指定这个依赖:

android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

强烈推荐你与Android Studio IDE一起使用Android Testing Support Library。Android Studio提供了支持测试开发的功能,比如:

  • 灵活并基于Gradle构建系统,支持对你测试代码的依赖管理。
  • 单元和instrumented测试代码与你的app的源代码放置在单个项目结构中。
  • 支持从命令行或者GUI来部署和运行你的测试在虚拟或者物理设备中。

更多Android Studio相关和下载,见 下载Android Studio和SDK Tools

时间: 2024-10-23 17:37:52

[Android]官网《Testing Support Library》中文翻译的相关文章

[Android]官网《monkeyrunner》中文翻译

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5050768.html 翻译自 Android Developer 官网:http://developer.android.com/tools/help/monkeyrunner_concepts.html monkeyrunner monkeyrunner工具提供了一套API,在不通过Android代码的情况下编写程序来控制一个Android设备或者模拟器.使

官网专题3.2中文翻译曝光译为“北伐的召唤”

8月19日消息:昨日有玩家 曝光了魔兽世界官网<巫妖王之怒>专题(点击查看专题)为公布的后续内容.从曝光的图片看官网专题共分5大部分,分别是"诺森德概览.地下城.团队地下城.PVP.北伐的召唤".而从曝光中我们也基本确认国服开放的3.2.2版本中文翻译为"北伐的召唤"(台服译:十字军的召唤). 网上曝光的图片 玩家推测国服WLK的开服时间和活动将在此专题完全上线后公布,图片是官网资源库里存在的(官网图片地址),最后一项公布的将会是"北伐的召唤&

一个关于android官网教程的问题

问题描述 一个关于android官网教程的问题 android官网教程中"Taking Photos Simply"这一课.我下载了它的源码,然后自己建了一个android project.完全按照下载的源码写,但是效果很不一样(代码一模一样,包括layout的xml也一样) 效果不一样体现在这些方面: 1.我的背景是白色,而它的(下载的工程的)是黑色 2.我的button的背景是淡灰色,而它的是深灰色 3.我的拍照后不会产生预览的imageView,而它的会弹出预览,我看了代码,控制

框架-如何上Android官网,查看Android源码

问题描述 如何上Android官网,查看Android源码 最近做Android开发,需要了解Android框架原理,但是国内没法上Android官网,求大神告知如何上Android官网或是如何翻墙的方法.谢谢啦 解决方案 下载android-sdk不能满足你这方面的需求吗,或者翻墙吧 解决方案二: 如何查看下载的android源码是哪个版本的android官网无法访问办法做应用开发的如何查看Android源码 解决方案三: android-sdk,是首选. 解决方案四: 翻墙一般要用VPN,建

android-怎么在Android官网找不到包含eclipse ADT的sdk

问题描述 怎么在Android官网找不到包含eclipse ADT的sdk 解决方案 推荐使用Android Studio吧,如果你想用那个adt的话,这个网址有:http://www.androiddevtools.cn/ 解决方案二: 用Android Studio,官方已经不推荐使用Android Studio , 下载:http://www.android-studio.org/,下载android-studio-bundle-141.2288178-windows.exe(Recomm

Android 官网无法访问的解决方法

原文来自:http://jingyan.baidu.com/article/ff42efa91d7abcc19e2202f0.html android的开发需要访问android sdk的官网:"developer.android.com",但是由于连接经常失败,从而导致android sdk的下载很困难,这里提供一种方法,可以免费的访问android developer官网:     方便他人亦是方便自己,如果觉得还行就点右边的投票吧,这样可以帮助其他人更快的找到解决问题的方法:有疑

[Android]官网《UI/Application Exerciser Monkey》中文翻译

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5049041.html 翻译自 Android Developer 官网:http://developer.android.com/tools/help/monkey.html UI/Application Exerciser Monkey Monkey是一个程序,它会运行在你的模拟器或者设备上并且会产生伪随机的用户事件流,比如点击.触摸或手势,以及大量的系统级

广药集团官网现王老吉雷人翻译涉包装专利侵权

"the king is always lucky",这个网络上恶搞的王老吉英文名近期竟然出现在广药集团官网的醒目位置上.不少 网友表示,重获"王老吉"这个利润奶牛让广药集团心情大好,忍不住开始"卖萌".也有网友质疑广药的广告直接用加多宝公司产品照片,由于后者申请了包装专利,因此广药集团有侵权的嫌疑. "一同学问我:the king is always lucky怎么翻译?我不假思索就说:国王总是幸运的.他摇摇头说出了三个字:王老吉.&

android studio 2.0-Android Studio官网下载

问题描述 Android Studio官网下载 在官网点击这个之后,弹出下面这样: 点击同意 重定向到: 为什么没有下载呢? 解决方案 如何从android官网下载开发工具spring.net官网下载