AWS 设备场似乎忽略了 TestNG 注释

Posted

技术标签:

【中文标题】AWS 设备场似乎忽略了 TestNG 注释【英文标题】:AWS Device farm seems to be ignoring TestNG annotations 【发布时间】:2016-04-08 13:22:46 【问题描述】:

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

查看来自设备场的日志,它并不关心“启用”是否设置为 true 或 false,无论如何它都会运行。它还忽略了“group=”和“dependsOnGroups”注释。这非常重要,因为如果我没有先登录,所有其他测试都会失败。更糟糕的是,后续失败的测试不会被跳过,因此 AWS 很乐意为此向我收取更多费用。

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

有人遇到这种情况或知道为什么会发生这种情况吗?

【问题讨论】:

【参考方案1】:

我是一名在 AWS Device Farm 工作的工程师。

1) “启用”注释标志

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

2) “dependsOnGroups”注释字段

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

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

3) 执行“组”测试

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


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

【讨论】:

感谢您的回复。我认为如果在相关的 amazon TestNG 页面上指出缺少注释支持,这将对未来的开发人员有所帮助。这样做可以使一些人不必费力地解决这个问题。 谢谢你,我花了很长时间试图找出你在#2中描述的由于缺乏依赖支持而导致的错误。我同意将其添加到 Device Farm 文档中是一件好事。 我们的团队在尝试指定执行顺序时遇到了完全相同的问题。我们尝试在 testng.xml 文件中将其指定为 Test 注解 @Test(priority=n) 的优先级属性。两者都失败了。现在我们正在努力回答@ahawker 的问题是,Device Farm 是否会完全忽略 Testng.xml 文件或只是它的某些方面。到目前为止,它似乎完全忽略了它。您能对此发表评论吗? 这个问题两年后... 这个问题有更新吗?是否会支持这种注释?【参考方案2】:

我在 *-tests.jar 的根目录中添加了 testng.xml 并检查了。

但是设备场没有运行 testng.xml 中列出的测试。它仍在运行所有带有 @Test 注释的类

【讨论】:

这是评论,不是答案。

以上是关于AWS 设备场似乎忽略了 TestNG 注释的主要内容,如果未能解决你的问题,请参考以下文章

Appium:如何在开始测试运行 appium-testng 之前使用 java 在 aws 设备场设备上以编程方式创建 google 帐户

在 aws-device 场中运行特定的 TestNG testng.xml 套件文件

AWS DeviceFarm 忽略 TestNG 注释

无法使用 AWS 设备场打开和关闭通知面板

如何在aws设备场中为android espresso每次测试运行后清除设备数据

是否可以将空手道与 AWS 设备场一起用于 Android 和 iOS 测试?