《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

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

相关文章
|
4月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
208 6
|
8月前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
353 64
|
7月前
|
存储 人工智能 测试技术
HarmonyOS Next~HarmonyOS应用测试全流程解析:从一级类目上架到二级类目专项测试
本文深入解析HarmonyOS应用测试全流程,涵盖从一级类目通用测试到二级类目专项测试的技术方案。针对兼容性、性能、安全测试及分布式能力验证等关键环节,提供详细实践指导与代码示例。同时,结合典型案例分析常见问题及优化策略,帮助开发者满足华为严苛的质量标准,顺利上架应用。文章强调测试在开发中的核心地位,助力打造高品质HarmonyOS应用。
376 2
|
3月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
496 11
|
4月前
|
机器学习/深度学习 存储 分布式计算
Java 大视界 --Java 大数据机器学习模型在金融风险压力测试中的应用与验证(211)
本文探讨了Java大数据与机器学习模型在金融风险压力测试中的创新应用。通过多源数据采集、模型构建与优化,结合随机森林、LSTM等算法,实现信用风险动态评估、市场极端场景模拟与操作风险预警。案例分析展示了花旗银行与蚂蚁集团的智能风控实践,验证了技术在提升风险识别效率与降低金融风险损失方面的显著成效。
|
4月前
|
人工智能 IDE 测试技术
Browser-Use在UI自动化测试中的应用
Browser-Use是一款浏览器自动化工具,具备视觉与HTML解析、多标签管理、操作记录与复现、自定义操作、自我纠正及并行执行等功能,助力AI智能体高效完成网页任务。
352 0
|
7月前
|
安全 测试技术 Linux
Flawnter 5.9.1 (macOS, Linux, Windows) - 应用程序安全测试软件
Flawnter 5.9.1 (macOS, Linux, Windows) - 应用程序安全测试软件
253 2
Flawnter 5.9.1 (macOS, Linux, Windows) - 应用程序安全测试软件
|
7月前
|
测试技术 数据库 Python
解释测试中setup和teardown函数的应用。
总结起来,`setup`和 `teardown`函数就像扔宴会的主人,他们保障了宴会的流畅进行。他们是准备环境和清理现场的重要工作人员,他们的工作直接影响着我们的测试效率和质量。我们可以把 `setup`和 `teardown`想象成隐藏在幕后,默默为我们服务的工作者,他们做着我们需要但是往往忽视的工作。所以,下次当你写测试的时候,别忘了给你的 `setup`和 `teardown`留出足够的位置,因为他们的作用可能是你成功的保证。
166 14
|
7月前
|
存储 5G 测试技术
时钟同步测试校验仪的应用介绍
时间同步测试仪是一种高精度、高可靠性的设备,用于测量和评估时间同步系统的性能。它广泛应用于电力系统(如电网调度、继电保护)、通信网络(如5G基站、光传输网络)、铁路交通(如列车运行控制、信号系统)、工业自动化(如生产线、控制系统)以及科学研究(如天文观测、粒子物理实验)等领域。其功能包括高精度时间测量、多信号接口支持、自动测量与分析、数据存储导出及性能评估输出,确保各领域设备间的时间同步精度与稳定性,保障系统高效运行。
|
10月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
668 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex