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

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

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

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

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

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

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

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

图2.7 DDMS中的logCat视图

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

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

表2.5 测试配置

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

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

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

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

图2.8 工具列表

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

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

图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命令常用选项

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

要触发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 用例执行方式选项

在我们举的例子中,将测试用例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 性能测试用例命令选项

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

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

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

时间: 2024-10-22 06:52:21

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

《移动App测试的22条军规》——第23章,第14节测试微信App的增量升级

23.14 测试微信App的增量升级 我们可以直接使用微信App提供的检查更新功能升级App,并确保升级后用户信息和消息都显示正常(如图23.35所示). 我们还可以在Android操作系统App应用程序信息页面中清除微信App的数据,以验证微信App是否能在清除数据后恢复到初始状态(如图23.36所示).

《移动App测试的22条军规》——第23章,第5节测试微信App的用户体验

23.5 测试微信App的用户体验 我们可以选择对微信App的横屏显示功能,是否遵守操作系统的设计规范,页面中使用Webview的功能,以及微信App的辅助功能进行测试. (1)当对微信App的横屏功能进行测试时,我们首先需要打开横屏显示的设置(如图23.10所示),然后进行横屏显示的测试(如图23.11所示). 开启横屏模式之后即可验证微信App在各页面对于横屏显示的支持了 这里给大家展示几个关于微信App横屏显示的问题. "Discover"(发现)页面可以横屏显示,但是进入&qu

《移动App测试的22条军规》——第23章,第17节测试微信App对于最新操作系统特性的支持

23.17 测试微信App对于最新操作系统特性的支持微信App对于iOS操作系统升级提供的新特性支持得很不错,包括对于手势操作和沉浸式任务栏的支持(如图23.42所示). 微信App在iOS操作系统上支持新版本引入的手势操作和沉浸式任务栏 相比之下,微信App在Android操作系统上对新版本的特性支持就要差一些,比如微信App在Android 4.4.4操作系统上都不支持Widget和沉浸式模式(如图23.43所示).

《移动App测试的22条军规》——第23章,第15节测试微信App中集成和调用第三方App

23.15 测试微信App中集成和调用第三方App微信App中集成了不少第三方的App和服务,例如"钱包"页面的各项功能(如图23.37所示). 微信App中还有不少集成得比较深入的第三方App和服务. (1)在聊天界面中,用户可以分享地理位置信息.这个功能就集成了腾讯地图的相关功能(如图23.38所示). (2)微信App的分享照片功能不仅集成了Android操作系统图库的相关功能,还集成了相机的功能(如图23.39所示). 微信App的分享照片功能集成了Android操作系统图库和

《移动App测试的22条军规》——第23章,第3节测试微信App的多任务和意外情况处理

23.3 测试微信App的多任务和意外情况处理我们需要测试在切换微信App时,多任务界面显示的页面是否和App所显示的页面一致(如图23.6所示). Android 4.4.4原生操作系统的多任务界面的微信App运行状态和实际显示界面是一致的 另外,还可以测试在使用微信App时接听电话,是否还能继续使用App(如图23.7所示). )Android 4.4.4原生操作系统中,使用微信App时,有电话呼入时,微信App的界面是不能操作的:当电话接通之后,包括在用户挂断电话前,用户都是可以正常使用微

《移动App测试的22条军规》——第23章,第7节测试微信App对于操作系统特性的支持程度

23.7 测试微信App对于操作系统特性的支持程度由于微信App不支持Android操作系统的Widget,所以没有办法对微信App的Widget进行测试. 不过由于Android 4.4.4支持选择ART运行环境,我们可以针对微信App在ART运行环境上的表现进行测试.具体来说,在"Developer options"(开发者选项)中选择使用ART运行环境(如图23.20所示),我们就可以对微信App的各项功能进行测试了.除此之外,我们还可以对微信App在ART运行环境下的安装进行测

《移动App测试的22条军规》——第23章,第6节测试微信App的消息显示和通知展示

23.6 测试微信App的消息显示和通知展示以Android操作系统为例,我们不仅需要检查安装微信App时向用户申请的权限(如图23.18所示),还需要验证在微信App收到新的消息时,如何通过通知向用户进行消息展示(如图23.19所示).

《移动App测试的22条军规》——第23章,第4节测试微信App的手势操作

23.4 测试微信App的手势操作我们可以测试在iOS 6以上版本,微信App对于右滑返回和左滑呼出菜单等手势操作是否支持(如图23.8所示). iOS 8.1.2上微信App能够支持右滑返回和左滑呼出菜单的手势操作 对于Android操作系统上的微信App,我们可以测试微信App对于长按屏幕呼出菜单的手势操作的支持(如图23.9所示). 在Android操作系统上,在微信App中长按会出现操作菜单

《移动App测试的22条军规》——第23章,第8节测试微信App能否及时显示和同步消息

23.8 测试微信App能否及时显示和同步消息我们可以通过同时在多个设备上登录微信App,例如在iPad和Android手机上登录微信App进行测试:然后再验证App能否及时显示和同步消息,比如,当微信App收到消息时,检查这两部设备上的消息是否同步进行了显示(如图23.21所示).

《移动App测试的22条军规》——第23章,第9节测试微信App能否适应不同设备的不同用户界面

23.9 测试微信App能否适应不同设备的不同用户界面测试App是否适应不同的用户界面,我们只能使用真实设备来进行测试.比如测试HTC Sense用户界面底部的黑色导航栏(如图23.22所示),魅族Flyme用户界面的SmartBar(如图23.23所示),以及小米米柚MIUI用户界面的角标系统(如图23.24所示).