4

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

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

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

任何人遇到这种情况或有任何想法为什么会发生这种情况?

4

2 回答 2

3

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

1)“启用”注释标志

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

2)“dependsOnGroups”注释字段

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

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

3) 执行“组”测试

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


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

于 2016-01-08T18:52:24.170 回答
-2

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

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

于 2016-02-19T11:21:46.720 回答