让我们进行以下TestNG测试:
@Test
public void Test1() {
}
@Test (dependsOnMethods={"Test1"})
public void Test2() {
}
@Test (dependsOnMethods={"Test2"})
public void Test3() {
}
测试用作端到端webui测试的功能(使用Selenium Webdriver)。每种测试方法都是长期e2e场景的一个步骤。
我们如何重构测试以使其更具可读性?最好的解决方案可能是在注释中删除所有这些'dependsOnMethods'参数,并隐式提供这个'dependsOnMethods'功能。问题是如何? 对优先顺序的期望:
如果“用户已登录并设置专家模式”,{
//... setup, a la @BeforeClass
}
然后“用户可以启用bla bla bla”{
//...
}
然后“用户可以查看poo poo poo”{
//...
}
然后“用户保存更改”{
//...
}
然后“用户还原更改”,{
// Tear Down, a la @AfterClass
}
“刚开始在同一个java项目中的groovy中编写其他测试类”有什么问题吗?
其中一个疯狂的解决方案可能是 - 打破一切并转移到修昔底德。但在我的情况下,这不是一个选择。
PS 我知道依赖测试是一种“不良做法”。但我相信“自己测试依赖关系”也是自动化的一个好点......
答案 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'测试方法'。
但是,现在我有:
这是测试的外观:
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()