现在我们的问题是我们经常有几个需要按特定顺序运行的测试,例如:
>登录应用程序
>输入一些数据
>编辑数据
>检查它是否正确显示
现在很明显,这些测试需要以精确的顺序运行.
与此同时,我们还有许多其他测试完全独立于上述测试列表.
所以我们希望能够以某种方式将测试放入“组”(不一定是TestNG意义上的组),然后运行它们:
>一个“组”内的测试总是以相同的顺序一起运行
>但是不同的测试“组”作为一个整体可以以任何顺序运行
第二点很重要,因为我们希望避免不同组中测试之间的依赖关系(因此可以独立使用和开发不同的测试“组”).
有没有办法使用TestNG实现这一目标?
解决方案我们尝试
>首先,我们只将属于一起的测试放在一个类中,并使用dependsOnMethods使它们以正确的顺序运行.这曾经在TestNG V5中工作,但在V6中,TestNG有时会交错来自不同类的测试(同时尊重dependsOnMethods强加的排序).似乎没有办法告诉TestNG“始终从一个类一起运行测试”.
>我们考虑编写一个method interceptor.但是,这样做的缺点是从IDE内部运行测试变得更加困难(因为直接调用类上的测试不会使用拦截器).此外,拦截器无法对使用dependsOnMethods的测试进行排序,因此我们必须停止使用它.我们可能必须创建自己的注释来指定排序,我们希望尽可能使用标准的TestNG功能.
> TestNG docs建议使用保留订单来订购测试.这看起来很有希望,但只有在你单独列出每个测试方法时才有效,这似乎是多余的,难以维护.
有没有更好的方法来实现这一目标?
我也对如何处理彼此构建的测试的任何其他建议持开放态度,而不必对所有测试强加总订单.
PS
alanning的回答指出,我们可以通过在每个测试中进行必要的设置来简单地保持所有测试的独立性.原则上这是个好主意(有些测试会这样做),但有时我们需要测试一个完整的工作流程,每个步骤都取决于之前的所有步骤(如我的例子所示).使用“独立”测试来做到这一点意味着反复运行相同的多步设置,这将使我们已经慢的测试更慢.而不是三个测试:
>测试1:登录应用程序
>测试2:输入一些数据
>测试3:编辑数据
我们会得到的
>测试1:登录应用程序
>测试2:登录应用程序,输入一些数据
>测试3:登录应用程序,输入一些数据,编辑数据
等等
除了不必要地增加测试时间之外,这也感觉不自然 – 应该可以将工作流建模为一系列测试.
如果没有其他办法,这可能就是我们要做的,但我们正在寻找更好的解决方案,而不必重复相同的设置调用.
您正在混合“功能”和“测试”.分开它们将解决您的问题.例如,创建一个帮助程序类/方法来执行登录步骤,然后在Login测试中调用该类/方法以及需要用户登录的所有其他测试.
您的其他测试实际上并不需要依赖您的登录“测试”,只需要依赖登录类/方法.
如果后来的后端修改在登录过程中引入了一个错误,那么依赖于Login帮助程序类/方法的所有测试仍将按预期失败.
更新:
事实证明,这已经有了一个名称,即Page Object模式.这是一个包含使用此模式的Java示例的页面:
http://code.google.com/p/selenium/wiki/PageObjects