为 Upload 准备 Appium 测试

为上载准备应用及其测试套件的步骤因测试框架的不同而异。 本指南介绍了如何使用 Java 通过 Java 准备 Appium 测试,并将其上载到 App Center。 有关创作 Appium 测试的指南,请参阅 Appium 文档

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

备注

支持 web 视图上下文、Chrome Web 驱动程序和带功能的 Chrome 浏览器测试 browserName

  • 不支持 TestNG (仅支持) 的 JUnit 测试。
  • 不支持 Android 4.2 或更早版。 不支持不推荐使用的 UIAutomator 驱动程序。
  • 不支持 iOS 9.2.1 或更早。 不支持不推荐使用的 UIAutomation iOS 驱动程序。
  • 不支持 JUnit @Category 特性。 (可以改为使用 " 包括/排除 ")
  • 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 测试中也不起作用。

1. 对生成系统所做的更改

步骤 1-添加依赖项

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

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

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

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

此代码片段 复制到 pom.xml 标记中的 <profiles> 。 如果 <profiles> pom 没有部分,请创建一个。 当配置文件激活时,它会将测试类和所有依赖项打包到 target/upload 文件夹中,并将其上载到测试。

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 的测试报表中可见。

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

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

3. Upload App Center 测试

上传测试的步骤:

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

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

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

    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 中的设备上的测试执行速度略慢于本地设备上。 通常,通过使更多设备可用,可有点执行速度较慢,同时允许并行运行测试。

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

在 iOS) 上重新签名 (

在 iOS 设备上安装之前,你的应用程序会经历一个称为 "重新签名" 的过程。 要使预配配置文件与云中的设备相匹配,此过程是必需的。 重新签名确实需要一些时间,通常约为1-2 分钟。 很少,重新签名还会导致性能下降,因为会缓存重新签名的应用。 每个二进制文件只运行一次。

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

重新安装

在共享设备云上,必须确保在每个测试之间清理设备,这一点非常重要。 使用该设备的下一个客户可能是来自其他组织的用户。 在 App Center 测试中,测试运行完成后,应用会自动卸载。

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

网络任务

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