为 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 测试
上传测试的步骤:
使用 启动测试运行中的说明生成 App Center 测试上传命令。
将测试类和所有依赖项打包到
target/upload文件夹中:mvn -DskipTests -P prepare-for-upload package运行上传命令:
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 以加快测试执行。 有关详细信息,请参阅 重置策略 。
网络任务
本地网络任务更快,因为服务器更接近且更专用于远程主机。