AWS Device farm 似乎忽略了 TestNG 注释

AWS Device farm seems to be ignoring TestNG annotations

我已成功上传 运行 我在 AWS 设备场上的测试。在本地,我正在使用 @Test(enabled = false, dependsOnGroups = "Login") 之类的有趣的东西来标记当时哪些测试要 运行 ,以及它们应该执行的顺序。在本地,这一切都按预期正常工作。问题发生在我将 Maven 构建的 zip 上传到设备场并执行测试 运行.

查看 device farm 的日志,它不关心 "enabled" 设置为 true 还是 false,它 运行 无关紧要。它还会忽略 "group=" 和 "dependsOnGroups" 注释。这非常重要,因为如果我没有先登录,所有其他测试都会失败。更糟糕的是,后续失败的测试将不会被跳过,所以 AWS 很乐意从中收取更多费用。

我尝试使用@Test(priority=blah),但它也忽略了它。它似乎唯一尊重的是@BeforeSuite 和@AfterSuite 之类的东西。

有人 运行 对此感兴趣或知道为什么会这样吗?

我是 AWS Device Farm 的工程师。

1) "enabled" 注释标志

我刚刚验证了您关于我们的 TestNG 解析器忽略注释上的 "enabled" 标志并始终包括测试(即使它被禁用)的说法是正确的。乍一看,这似乎是一个简单的问题,可以直接修复。假设最好的情况,我们将尽快修复它并投入生产。

2) "dependsOnGroups" 注释字段

这个问题的答案有点复杂。截至今天,AWS Device Farm 不支持 dependsOnGroupsdependsOnMethods 注释字段。

这有几个原因,主要原因是 AWS Device Farm 单独执行每个 @Test 方法,每个方法都使用 Appium 服务器的新实例。这种方法有 pros/cons 我不会在这里深入探讨,但我会说它确实在技术和功能层面都有好处。当使用 TestNG 运行ner 执行单个方法时,它只会加载单个方法的上下文,而不是 .jar 文件中找到的所有 tests/suites/groups 指定依赖项.此外,由于这些测试方法中的每一个每次都在不同的 Java 进程中执行,因此 TestNG 运行ner 不会在内存中维护任何 "state"。这意味着它不知道它之前已经执行过测试(在不同的进程中),因此它将再次尝试 运行 它。

3) 执行 "groups" 测试

我们目前不向用户公开 groups/excludegroups 以允许他们选择要执行或跳过的特定测试集合。但是,这应该可以通过在 testng.xml 文件中配置 <groups> 条目来实现,该文件位于 *-tests.jar 文件的根目录中,该文件已上传到测试包存档中。在这种情况下,我们的解析器应该只 "discover" 测试在这些组中定义的而不是所有 @Test 注释的方法。但是我没有尝试过这个具体案例,所以你的 YMMV。


希望对您有所帮助!如果您有任何其他问题或希望我们查看特定的 run/test 软件包,请随时联系我们或将 URL 粘贴到之前执行的 运行.

我在*-tests.jar的根部加了testng.xml,查了下

但是 device farm 不是 运行 testng.xml 中列出的测试。它仍然是运行所有带有@Test注解类的