准备 Appium 测试以上传

重要

Visual Studio App Center 计划于 2025 年 3 月 31 日停用。 虽然可以继续使用 Visual Studio App Center,直到它完全停用,但你可以考虑迁移到几个建议的替代方法。

详细了解支持时间线和替代方案。

准备应用及其用于上传的测试套件的步骤因测试框架而异。 本指南介绍如何使用 Java 和 JUnit 准备 Appium 测试,以便上传到 App Center。 有关创作 Appium 测试的指导,请参阅 Appium 文档

请注意 Appium 支持的以下限制:

注意

支持 WebView 上下文、Chrome Web 驱动程序和具有 browserName 功能的 Chrome 浏览器测试!

  • 不支持 TestNG () 仅支持 JUnit 测试。
  • 不支持 Android 4.2 或更早版本。 不支持已弃用的 UIAutomator 驱动程序。
  • 不支持 iOS 9.2.1 或更早版本。 不支持已弃用的 UIAutomation iOS 驱动程序。
  • JUnit @Category attribute不支持 。 (可以改用 包含/排除)
  • Maven 版本必须至少为 3.3.9。
  • 当前 Appium 版本为 1.22.0。 它定期使用新版本进行更新。
  • 支持 JUnit 4.9 - 4.12;我们不支持 JUnit 5。
  • 测试必须恰好针对一个应用。 MobileCapabilityType.FULL_RESET) 支持 (

注意

在某些情况下,如果使用不受支持的工具或功能,则测试仍然可以在 App Center 中运行。 但是,该不支持的功能在将来的更新中不是 QA,并且可能会在没有警告的情况下中断。

先决条件

将使用 Maven Surefire 运行测试,这要求测试遵循 某些命名约定

"**/Test*.java" - includes all of its subdirectories and all Java filenames that start with "Test".
"**/*Test.java" - includes all of its subdirectories and all Java filenames that end with "Test".
"**/*Tests.java" - includes all of its subdirectories and all Java filenames that end with "Tests".
"**/*TestCase.java" - includes all of its subdirectories and all Java filenames that end with "TestCase".

在尝试上传到 App Center 测试之前,请确保使用 Maven 在计算机上本地运行测试:

➜  AppiumTest git:(main) ✗ mvn verify
...
Running MainTest
started: SimpleTest (MainTest)
Setting up capabilities
failed
finished
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.728 sec <<< FAILURE!
SimpleTest(MainTest)  Time elapsed: 0.594 sec  <<< ERROR!
...

如果无法使用命令行在本地运行测试,则测试在 App Center Test 中也不起作用。

1. 对生成系统的更改

步骤 1 - 添加依赖项

需要为 Appium 测试扩展添加依赖项:

<dependency>
    <groupId>com.microsoft.appcenter</groupId>
    <artifactId>appium-test-extension</artifactId>
    <version>1.6</version>
</dependency>

此代码将确保增强的 Android 和 iOS 驱动程序在编译时可用。 提供增强的驱动程序主要用于启用 label 该功能。 有关该功能的更多详细信息, label 请参阅步骤 4。

步骤 2 - 添加上传配置文件

将此代码片段复制到 pom.xml 标记中的 <profiles> 中。 如果 pom 中没有 <profiles> 分区,请制作一个。 配置文件在激活后,会将测试类和所有依赖项打包到 target/upload 文件夹中,准备上传到 Test。

2. 测试的更改

步骤 1 - 添加导入

将这些包导入测试类:

import com.microsoft.appcenter.appium.Factory;
import com.microsoft.appcenter.appium.EnhancedAndroidDriver;
import org.junit.rules.TestWatcher;
import org.junit.Rule;

步骤 2 - 实例化 TestWatcher

在每个测试类中插入此声明:

    @Rule
    public TestWatcher watcher = Factory.createWatcher();

步骤 3 - 更新驱动程序声明

声明AndroidDriver<MobileElement>替换为 EnhancedAndroidDriver<MobileElement>IOSDriver<MobileElement>EnhancedIOSDriver<MobileElement>

    private static EnhancedAndroidDriver<MobileElement> driver;

步骤 4 - 更新驱动程序实例化

替换 实例化 驱动程序的方式,使行的形式为:

    driver = new AndroidDriver<MobileElement>(url, capabilities);

...更改为:

    driver = Factory.createAndroidDriver(url, capabilities);

使用这些驱动程序仍然可以在本地运行测试,而无需进行其他修改,但允许使用 driver.label("text")在测试执行中“标记”测试步骤。 来自设备的文本和屏幕截图将在 App Center 的测试报告中可见。

建议在 方法中@After调用 driver.label ,该方法会获取应用最终状态的屏幕截图。 测试的示例 @After 方法可能类似于以下代码:

    @After
    public void TearDown(){
        driver.label("Stopping App");
        driver.quit();
    }

3. 上传到 App Center 测试

上传测试的步骤:

  1. 使用 启动测试运行时的说明生成 App Center 测试上传命令。

  2. 将测试类和所有依赖项打包到 target/upload 文件夹中:

    mvn -DskipTests -P prepare-for-upload package
    
  3. 运行 upload 命令:

    appcenter test run appium --app "APP_ID" --devices "DEVICE_SET_ID" --app-path PATH_TO_FILE.apk  --test-series "main" --locale "en_US" --build-dir target/upload
    

4. 性能故障排除

在 App Center 中的设备上测试的执行速度会略慢于本地设备。 通常,由于有更多的设备可用,允许并行测试运行,因此执行速度会超过速度。

测试运行速度较慢main有三个源:重新签名、重新安装和网络任务。

在 iOS) 上重新签名 (

在 iOS 设备上安装之前,应用需要经历一个称为重新签名的过程。 若要使预配配置文件与云中的设备匹配,必须执行此过程。 重新签名需要一些时间,通常大约 1-2 分钟。 极少数情况下,重新签名还会导致性能降低,因为会缓存重新签名的应用。 每个二进制文件仅运行一次耗时的进程。

如果持续交付设置在生成和测试之前更新 IPA 版本,则每个测试的二进制文件将有所不同,并且重新签名处罚将更频繁地发生。

重新安装

在共享设备云中,我们必须确保在每次测试之间清理设备。 使用该设备的下一个客户可能是另一个组织的人。 在 App Center 测试中,应用会在测试运行完成后自动卸载。

可以省略 MobileCapabilityType.FULL_RESET 并将 设置为 MobileCapabilityType.NO_RESETtrue 以加快测试执行。 有关详细信息 ,请参阅重置策略

网络任务

本地网络任务速度更快,因为服务器更靠近远程主机且更专用。