《Android 应用测试指南》——第2章,第2.6节测试执行

简介:

本节书摘来自异步社区《Android 应用测试指南》一书中的第2章,第2.6节测试执行,作者 【阿根廷】Diego Torres Milano(迭戈 D.),更多章节内容可以访问云栖社区“异步社区”公众号查看

2.6 测试执行
执行测试用例的方法有很多种,我们这里一个个地分析。

另外,我们在前面的章节中提到的注释,可以让测试用例按照组或者种类执行,这种方式要按实际需求来执行。

2.6.1 在Eclipse里执行所有的测试用例
如果你采用了Elicpse作为开发环境,从Eclipse中执行测试用例可能是最简便的方式了。这种方式会执行包中所有的用例。

选择测试工程,然后单击 Run As -> Andriod Junit Test。

如果没有找到合适的设备或者模拟器,那么会自动启动一个。然后,测试用例开始执行,最后执行的结果会在Eclipse中的DDMS中展示出来。这个窗口需要手工打开,如图2.6所示。


85f667dd55725223a1f022c88b18043806467681

图2.6 Eclipse中DDMS展示测试用例的执行结果

从Eclipse DDMS窗口的LogCat视图中,你可以看到更加详尽的执行过程信息和结果,如图2.7所示。


f1583dec92b999c1ff0f99fb01a51dd2c2928b27

图2.7 DDMS中的logCat视图

2.6.2 执行单个测试用例
你可以选择执行单个测试用例,在测试过程中经常会遇到这种需求。选择测试工程,然后单击 执行1——执行设置选项。

然后,创建一个新的测试配置,配置如表2.5所示。

表2.5 测试配置


f76ee2a0cda4ef39f8e6ae636ff6e26865449396

当你像往常一样执行测试用例的时候,只有这个用例会被执行。这种情况下,我们只执行了一个用例,执行后的结果跟之前发的截屏类似。

在Eclipse编辑器中,还有另一种快捷方式可以执行单个用例。选中你的函数名,然后按Shift+Alt+XT组合键,或者右键,然后选择Run as-Junit Test。

2.6.3 在模拟器里执行用例
模拟器默认的系统里面安装了开发工具,提供一些手动工具和设置。在这些工具中,我们可以找到一个特别长的列表,如图2.8所示。

现在我们研究下设备,因为需要利用设备来执行测试用例。上述的应用列表展示了AndriodManifest.xml中instrumentation标签下定义的所有包。默认情况下,会展示默认设备的配置,也就是andriod.test.InstrumentationTestRunner里面的默认配置。在这个文件里,如果有两个以上的包配置,那么识别到底用哪套配置就成问题了。为了解决这个问题,你可以手工添加一个选项,在设备标签下,如图2.9所示。


ef3719ffe8d1ab10158c0675b99a2c95c3543171

图2.8 工具列表

一旦设置成功,设备配置列表将会重新展示,我们的包将会在新标签下面显示,在执行之前,选择好就可以了,如图2.10所示。

如果测试用例按照这种方式执行,那么你就可以通过LogCat来看执行结果。


2330415e508d897f691c1f8c966204a0178554e6

图2.10 新标签

你可以看到,如果你不设置可选标签,那所有设备都会在默认的标签andriod.test.InstrumentationTestRunner下面展示出来,这点之前也提到过。

2.6.4 用命令行来执行测试用例
最后,我们还可以从命令行来执行测试用例。如果你想自动化或者用脚本来控制测试,命令行很有用。

我们用 am instrument 命令来执行测试用例(严格地说是 am 命令和instrument子命令),这个命令能够唤起设备、指定包名,还有其他功能选项。

你可能在想,am是什么?am是Activity Manager的缩写,它是Android系统内部的一个主要部件。在系统启动的时候,系统服务将会唤起这个行为管理器。行为管理器负责管理所有的行为以及行为的生命周期。另外,我们可以看到,它要负责行为设备的控制。

am instrument 命令行的一般用法如框2.2中所示。

框2.2 am instrument命令用法

am instrument [flags] < COMPONENT>
-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
-e < NAME> < VALUE>: set argument < NAME> to < VALUE>
-p < FILE>: write profiling data to < FILE>
-w: wait for instrumentation to finish before returning

下面的表2.6中总结了最常用的选项。

表2.6 am命令常用选项


c8f3007cc1c5b75745f8ffd189d45817b6d8ebfa

等待设备结束后退出。通常在命令行中使用,虽然不是一定要这样写,但是在手工执行时,如果不这样写,执行完用例后看不到测试结果

要触发am命令,我们使用adb shell命令或者你打开模拟器,你可以直接在shell命令窗口执行am命令。

2.6.5 执行所有测试用例
除了性能测试用例,下面的命令行将会执行所有的测试用例,如框2.3所示。

框2.3 测试用例执行结果

diego@bruce:\~$ adb shell am instrument -w com.example.aatg.
myfirstproject.test/android.test.InstrumentationTestRunner

com.example.aatg.myfirstproject.test.MyFirstProjectTests:
Failure in testSomething:
junit.framework.AssertionFailedError: Not implemented yet
  at com.example.aatg.myfirstproject.test.MyFirstProjectTests.testSomethi
ng(MyFirstProjectTests.java:22)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRu
nner.java:430)
  at android.app.Instrumentation$InstrumentationThread.
run(Instrumentation.java:1447)

Test results for InstrumentationTestRunner=.F
Time: 0.2

FAILURES!!!
Tests run: 1, Failures: 1, Errors: 0

2.6.6 执行一个特殊测试用例文件中的所有用例
为了执行某个具体的测试文件中所有测试用例,你可以用下面的命令,如框2.4中所示。

框2.4 Shell命令:执行特殊用例文件的所有用例

diego@bruce:\~$ adb shell am instrument -w -e class com.example.aatg.
myfirstproject.test.MyFirstProjectTests com.example.aatg.myfirstproject.
test/android.test.InstrumentationTestRunner

2.6.7 通过用例名称来执行用例
另外,我们可以选择具体哪个测试用例要在命令行下执行,如框2.5中所示。

框2.5 Shell命令:执行单个用例**

diego@bruce:\~$ adb shell am instrument -w -e class com.example.aatg.
myfirstproject.test.MyFirstProjectTests\#testSomething com.example.aatg.
myfirstproject.test/android.test.InstrumentationTestRunner

这种方式只能执行不带参数的构造函数的测试文件,这就是我们需要在命令行上加测试方法名的原因。

2.6.8 按用例分类来执行用例
我们前面提到了,测试用例可以被分为不同的种类,利用注释(测试注释)来标明它属于哪个种类。在执行命令的时候,可以通过下面的选项来指定执行某个种类下所有测试用例,选项详情如表2.7所示。

表2.7 用例执行方式选项


4848b4370943da468d657df5e074bc8d75d74c3d

在我们举的例子中,将测试用例testSomething()标记为@SmallTest。这个测试用例就属于Small这类了。因此,在按照测试集合规模的大小来执行用例时,这个用例将和所有标记为SmallTest的用例一起执行。

框2.6所示的命令行将会执行所有带@SmallTest标记的测试用例。

框2.6 执行带SmallTest标记的命令

diego@bruce:\~$ adb shell am instrument -w -e size small com.example.
aatg.myfirstproject.test/android.test.InstrumentationTestRunner

2.6.9 创建个性化标签
为了满足客户有另外的需求,比如说,有更大的测试集合需要标记,现有的尺寸标识不了。大家可以创建一个自己的个性标签,然后按命令行的方式具体定义。

比如,我想把一些非常重要的测试用例放在一起,于是我们可以创建一个叫做@VeryImportantTest的标签,如框2.7中所示。

框2.7 新建VeryImportantTest标签

package com.example.aatg.myfirstproject.test;
/**
* Annotation for very important tests.
*
* @author diego
*
*/
public @interface VeryImportantTest {
}

接下来,我们将创建另一个测试用例,并标记为@VeryImportantTest,如框2.8所示。

框2.8 新建测试用例,打新标签**

@VeryImportantTest
public void testOtherStuff() {
fail("Not implemented yet");
}

因此,像我们上面提到的,我们可以在am instrument命令行中执行带有这个标签的测试用例如框2.9所示。

框2.9 am instrument命令执行新标签下的用例

diego@bruce:\~$ adb shell am instrument -w -e annotation VeryImportantTest \
com.example.aatg.myfirstproject.test/android.test.
InstrumentationTestRunner

2.6.10 执行性能测试
我们将在第9章“性能测试”中复习一下性能测试的细节,这里我们会介绍下am instrument命令中的一些选择项。

你需要在命令行中添加下面的选项,才能将性能测试用例添加在执行中,如表2.8所示。

表2.8 性能测试用例命令选项


664c4d606246b52937c8e16fb7d74b29f2451e6b

2.6.11 空载测试
有时候你只是想知道测试用例是否能够跑起来,而不是真正想做测试。这时候你可以将下面的选项加到你的命令行中,如表2.9中所示。

表2.9 显示测试用例命令选项


ee67f8f2c87ccc481b13f98557f5ba8e2aefc2ee

这种方式在你写脚本或者编译的时候很有用。

相关文章
|
16天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
17天前
|
数据库 Android开发 开发者
构建高效Android应用:Kotlin协程的实践指南
【4月更文挑战第2天】随着移动应用开发的不断进步,开发者们寻求更流畅、高效的用户体验。在Android平台上,Kotlin语言凭借其简洁性和功能性赢得了开发社区的广泛支持。特别是Kotlin协程,作为一种轻量级的并发处理方案,使得异步编程变得更加简单和直观。本文将深入探讨Kotlin协程的核心概念、使用场景以及如何将其应用于Android开发中,以提高应用性能和响应能力。通过实际案例分析,我们将展示协程如何简化复杂任务,优化资源管理,并为最终用户提供更加流畅的体验。
|
17天前
|
开发框架 安全 Android开发
探索安卓系统的新趋势:智能家居应用的蓬勃发展
随着智能家居概念的兴起,安卓系统在智能家居应用领域的应用日益广泛。本文将探讨安卓系统在智能家居应用开发方面的最新趋势和创新,以及其对用户生活的影响。
13 2
|
2天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
2 0
|
2天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
5 0
|
3天前
|
缓存 移动开发 Java
构建高效的Android应用:内存优化策略
【4月更文挑战第16天】 在移动开发领域,尤其是针对资源有限的Android设备,内存优化是提升应用性能和用户体验的关键因素。本文将深入探讨Android应用的内存管理机制,分析常见的内存泄漏问题,并提出一系列实用的内存优化技巧。通过这些策略的实施,开发者可以显著减少应用的内存占用,避免不必要的后台服务,以及提高垃圾回收效率,从而延长设备的电池寿命并确保应用的流畅运行。
|
5天前
|
搜索推荐 开发工具 Android开发
安卓即时应用(Instant Apps)开发指南
【4月更文挑战第14天】Android Instant Apps让用户体验部分应用功能而无需完整下载。开发者需将应用拆分成模块,基于已上线的基础应用构建。使用Android Studio的Instant Apps Feature Library定义模块特性,优化代码与资源以减小模块大小,同步管理即时应用和基础应用的版本。经过测试,可发布至Google Play Console,提升用户便利性,创造新获客机会。
|
6天前
|
Java API 调度
安卓多线程和并发处理:提高应用效率
【4月更文挑战第13天】本文探讨了安卓应用中多线程和并发处理的优化方法,包括使用Thread、AsyncTask、Loader、IntentService、JobScheduler、WorkManager以及线程池。此外,还介绍了RxJava和Kotlin协程作为异步编程工具。理解并恰当运用这些技术能提升应用效率,避免UI卡顿,确保良好用户体验。随着安卓技术发展,更高级的异步处理工具将助力开发者构建高性能应用。
|
6天前
|
编解码 人工智能 测试技术
安卓适配性策略:确保应用在不同设备上的兼容性
【4月更文挑战第13天】本文探讨了提升安卓应用兼容性的策略,包括理解平台碎片化、设计响应式UI(使用dp单位,考虑横竖屏)、利用Android SDK的兼容工具(支持库、资源限定符)、编写兼容性代码(运行时权限、设备特性检查)以及优化性能以适应低端设备。适配性是安卓开发的关键,通过这些方法可确保应用在多样化设备上提供一致体验。未来,自动化测试和AI将助力应对设备碎片化挑战。
|
12天前
|
移动开发 API Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第7天】 在移动开发领域,性能优化和应用响应性的提升一直是开发者追求的目标。近年来,Kotlin语言因其简洁性和功能性在Android社区中受到青睐,特别是其对协程(Coroutines)的支持,为编写异步代码和处理并发任务提供了一种更加优雅的解决方案。本文将探讨Kotlin协程在Android开发中的应用,揭示其在提高应用性能和简化代码结构方面的潜在优势,并展示如何在实际项目中实现和优化协程。