我已在AWS设备群上成功上传并运行我的测试。在本地,我正在使用像@Test(enabled = false,dependsOnGroups =“Login”)这样的有趣的东西来标记当时要运行的测试,以及它们应该执行的顺序。在本地,这一切都很好,花花公子如预期的那样。将maven构建的zip上传到设备场并执行测试运行后,问题就出现了。
查看来自设备服务器场的日志,它并不关心“enabled”是设置为true还是false,它无论如何都会运行。它还忽略了“group =”和“dependsOnGroups”注释。这非常重要,因为如果我没有先登录,所有其他测试都将失败。更糟糕的是,随后的失败测试不会被跳过,因此AWS很乐意向我收取更多的资金。
我尝试使用@Test(priority = blah),但它也忽略了这一点。它似乎唯一尊重的是@BeforeSuite和@AfterSuite。
任何人都遇到这个问题,或者有任何想法为什么会这样?
答案 0 :(得分:3)
我是AWS Device Farm的工程师。
1)“启用”注释标记
我刚刚验证了你对我们的TestNG解析器是正确的,忽略了注释上的“enabled”标志,并且总是包括测试,即使它已被禁用。乍一看,这似乎是一个简单的问题,直接修复。假设最佳情况,我们会尝试将其修复并尽快投入生产。
2)“dependsOnGroups”注释字段
这个问题的答案有点复杂。截至今天,AWS Device Farm不支持 dependsOnGroups 或 dependsOnMethods 注释字段。
这有几个原因,主要原因是AWS Device Farm单独执行每个@Test
方法,每个方法都使用Appium服务器的新实例。我不会在这里深入研究这种方法的优点/缺点,但我会说它确实在技术和功能方面都有好处。使用TestNG
运行程序执行单个方法时,它只会加载单个方法的上下文,而不会加载.jar
文件中找到的指定依赖项的所有测试/套件/组。此外,由于每次这些测试方法中的每一个都在不同的Java
进程中执行,因此TestNG
运行器不会在内存中保持任何“状态”。这意味着它不知道它之前已经执行过测试(在不同的进程中),因此它将尝试再次运行它。
3)执行测试的“组”
我们目前不向用户公开groups/excludegroups
,以允许他们选择要执行或跳过的特定测试集合。但是,这应该可以通过在<groups>
文件的根目录中配置testng.xml
条目来实现,该文件位于您的测试包存档中。在这种情况下,我们的解析器应该只“发现”在这些组中定义的测试而不是所有*-tests.jar
注释的方法。但是我没有尝试过这个具体案例,所以你的YMMV。
希望有所帮助!如果您有任何其他问题,或者您希望我们查看特定的运行/测试包,请随时联系或粘贴以前执行的运行的URL。
答案 1 :(得分:-2)
我在* -tests.jar的根目录中添加了testng.xml并进行了检查。
但是设备场没有运行testng.xml中列出的测试。它仍然使用@Test注释运行所有类