是否存在dependsOnMethods TestNG功能的隐含替代方案? (按相关顺序运行测试)

时间:2013-10-10 10:22:21

标签: java selenium groovy testng easyb

让我们进行以下TestNG测试:

@Test 
public void Test1() {

}

@Test (dependsOnMethods={"Test1"}) 
public void Test2() {

}

@Test (dependsOnMethods={"Test2"}) 
public void Test3() {

}

测试用作端到端webui测试的功能(使用Selenium Webdriver)。每种测试方法都是长期e2e场景的一个步骤。

我们如何重构测试以使其更具可读性?最好的解决方案可能是在注释中删除所有这些'dependsOnMethods'参数,并隐式提供这个'dependsOnMethods'功能。问题是如何? 对优先顺序的期望:

  • 找到保持TestNG的解决方案
  • 保留TestNG,但涉及任何其他工具,例如easyb中?使用groovy而不是java ...我可以使用带easyb的TestNG组吗?是否有可能,easyb不是bdd风格,而是'junit'风格,如:
  

如果“用户已登录并设置专家模式”,{

//... setup, a la @BeforeClass 
     

}

     

然后“用户可以启用bla bla bla”{

//... 
     

}

     

然后“用户可以查看poo poo poo”{

//... 
     

}

     

然后“用户保存更改”{

//... 
     

}

     

然后“用户还原更改”,{

// Tear Down, a la @AfterClass 
     

}

“刚开始在同一个java项目中的groovy中编写其他测试类”有什么问题吗?

  • Kick TestNG,但使用什么?需要TestNG组功能。

其中一个疯狂的解决方案可能是 - 打破一切并转移到修昔底德。但在我的情况下,这不是一个选择。

PS 我知道依赖测试是一种“不良做法”。但我相信“自己测试依赖关系”也是自动化的一个好点......

2 个答案:

答案 0 :(得分:1)

是的......还有一种替代方案取决于... 不要这样做!

我回答here...

这是一个糟糕的测试逻辑..作为一名经验丰富的专业软件测试工程师。我建议您立即从这条自动化路径中分散出来。

良好的测试架构要求每个方法都是自足的,并且在继续之前不应依赖其他测试来完成。为什么?因为说测试2取决于测试1.说测试1失败..现在测试2将失败..最终,你将测试1,2,3,4,5测试失败,你甚至不知道什么原因是。

我向你提出的建议是创建自给自足,可维护和短期的测试。

这是一本很好的阅读材料,可以帮助您完成工作:http://www.lw-tech.com/q1/ug_concepts.htm

答案 1 :(得分:1)

  

保留TestNG,但涉及任何其他工具,例如easyb中?运用   groovy而不是java ...我可以使用easyb的TestNG组吗?是吗   可能,easyb不是bdd风格,但'junit'风格

这是我使用的选择。

你将没有像easyb这样的群组(至少开箱即用),到目前为止我没有找到任何方式来'anotate'easyb / groovy'测试方法'。

但是,现在我有:

  • 隐式依赖方法。虽然它们并非完全依赖 - 如果某些方法将被“禁用”,下一个方法仍将被执行。但是我的实际目标可以实现:由于测试文件是一个groovy脚本,所有'测试方法'将按照它们的编写顺序执行。一旦您需要禁用任何“测试方法”,您只需评论其代码 - 这将禁止执行测试并在报告中将其显示为“待处理”。
  • 测试方法具有可读的“刺痛”名称。

这是测试的外观:

beforeAllSetup()

before "each method setup", {
  //implementation
}
after "each method tear down", {
  //...
}

it "first test this", {
  //...
}

it "this will be shown as pending in the report", /*{
  //...
}*/

it "then test this", {
  //...
}

afterAllTearDown()