Android 设备生态系统不断扩展,这给测试应用程序带来了独特的挑战。Spoon 旨在通过分发插桩测试执行并以有意义的方式显示结果来简化此任务。
Spoon 并非试图成为一种新的测试形式,而是让现有的插桩测试更加实用。Spoon 使用应用程序 APK 和插桩 APK,在多台设备上同时运行测试。所有测试完成后,将生成一个静态 HTML 摘要,其中包含每台设备和测试的详细信息。
通过高级别的输出,您可以立即查看测试失败是特定于单个设备还是所有设备。此视图设计用于在专用显示器或电视上显示。
Spoon 将在 adb devices
可见的所有目标上运行。连接多部不同的手机和平板电脑,启动不同配置的模拟器,或使用它们的组合!
使用的目标设备类型越多样化,输出在可视化应用程序方面就越有用。
设备视图概述了单个设备上每个测试的结果。这对于追踪单个测试的设备特定失败非常有用。
测试视图显示了单个测试在其上执行过的所有设备上的结果。
除了简单地运行插桩测试外,Spoon 还能够在测试的关键点截取屏幕截图,然后将其包含在输出中。这允许对不同设备上的测试执行进行可视化检查。
截取屏幕截图需要您在插桩应用程序中包含 spoon-client
JAR。在您的测试中,使用人类可读的标签调用 screenshot
方法。
Spoon.screenshot(activity, "initial_state"); /* Normal test code... */ Spoon.screenshot(activity, "after_login");
指定的标签将用于标识和比较多次测试运行中捕获的屏幕截图。
屏幕截图在设备视图和测试视图中均按顺序显示
您还可以将每个测试的屏幕截图作为动态 GIF 查看,以衡量实际的交互顺序。
↓ 最新版 Runner JAR ↓ 最新版 Client JAR
runner、客户端库、示例应用程序以及本网站的源代码可在 GitHub 上找到。
如果您使用 Maven 进行编译,可以将截图库声明为依赖项。
<dependency>
<groupId>com.squareup.spoon</groupId>
<artifactId>spoon-client</artifactId>
<version>(insert latest version)</version>
</dependency>
Spoon 附带了一个示例应用程序和插桩测试,用于演示其用法并提供输出示例。
该示例展示了一个简单的登录屏幕和一个订购向导,在几台设备上运行。应用程序和测试经过构建,以便某些样式损坏或在各种设备上失败。这样做是为了更好地了解真实世界中的输出是什么样子。
Spoon 设计为既可以作为独立工具运行,也可以直接作为构建系统的一部分运行。
您可以使用应用程序和插桩 APK 将 Spoon 作为独立工具运行。
java -jar spoon-runner-(insert latest version)-jar-with-dependencies.jar \
--apk example-app.apk \
--test-apk example-tests.apk
默认情况下,输出将放置在当前目录的 spoon-output/
文件夹中。您可以使用其他标志控制执行的额外参数。
Options: --apk Application APK --fail-on-failure Non-zero exit code on failure --output Output path --sdk Path to Android SDK --test-apk Test application APK --title Execution title --class-name Test class name to run (fully-qualified) --method-name Test method name to run (must also use --class-name) --no-animations Disable animated gif generation --size Only run test methods annotated by testSize (small, medium, large) --adb-timeout Set maximum execution time per test in seconds (10min default)
如果您使用 Maven 进行编译,则提供了一个插件以便于执行。在插桩测试模块的 pom.xml
中声明该插件。
<plugin>
<groupId>com.squareup.spoon</groupId>
<artifactId>spoon-maven-plugin</artifactId>
<version>(insert latest version)</version>
</plugin>
该插件将查找相应应用程序的 apk
依赖项。通常这与应用程序的 jar
依赖项并行指定。
<dependency> <groupId>com.example</groupId> <artifactId>example-app</artifactId> <version>${project.version}</version> <type>jar</type> <scope>provided</scope> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>example-app</artifactId> <version>${project.version}</version> <type>apk</type> <scope>provided</scope> </dependency>
您可以通过运行 mvn spoon:run
调用该插件。执行结果将放置在 target/spoon-output/
文件夹中。如果您想指定要运行的测试类,请添加 -Dspoon.test.class=fully.qualified.ClassName
。如果您只想在该类中运行单个测试,请添加 -Dspoon.test.method=testAllTheThings.
有关工作示例,请参见 spoon-sample/
文件夹中的示例应用程序和插桩测试。
如果您想贡献代码,可以通过 GitHub 分叉仓库并发送拉取请求来完成。
提交代码时,请尽一切努力遵循现有约定和风格,以使代码尽可能可读。另请确保您的代码通过运行 mvn clean verify
进行编译。
在您的代码被项目接受之前,您还必须签署个人贡献者许可协议 (CLA)。
Copyright 2013 Square, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://apache.ac.cn/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.