我尝试了许多方法但没有成功,我开始相信这在TestNG中无法实现,我只想与您确认。
我有网络服务我正在测试,我需要运行一些基本方案。
我目前的测试方法,每个都有@Test注释(每个都需要作为单个测试进行测试):
我还需要运行这些场景,包括上面的测试运行IN ORDER:
问题是,如果我从第1点和第1点进行测试2依赖于其他人我无法运行方案3,因为 clearCacheTest 在此特定方案中不依赖于任何其他方案。我已尝试通过xml和依赖关系运行这些测试,但没有成功。
当然我可以让 actionYTest 直接调用 clearCacheTest ,但如果 clearCacheTest 失败,报告会显示 actionYTest 是失败的,这是我试图避免的。
我很确定现在我需要的东西在TestNG中无法实现,但也许我错了......
答案 0 :(得分:0)
我认为你应该稍微改变一下你的战术。您不应将这些〜(dbResetTest等)视为测试类,而应将其作为测试方法,并以编程方式(而非XML)使用dependsOnMethods而不是dependsOnGroups。然后,您将能够轻松地实现所需的逻辑(每个测试都是唯一的 - > @Test注释,每个测试都以特定优先级执行 - >使用优先级参数)。那么1,2,3测试应该是你的测试类。所以这就是你如何做到的:
public class LoginFeature {
@Test (priority=1)
public openURLTest(){
}
@Test (priority=2, dependsOnMethods="openURLTest")
public dbResetTest (){
}
@Test (priority=3, dependsOnMethods="dbResetTest")
public clearCacheTest (){
}
@Test (priority=4, dependsOnMethods="clearCacheTest" )
public loginTest(){
}
}
这样,如果测试之间出现故障,其他方案将自动跳过,您无需直接调用clearCacheTest。
希望这有帮助!
<强> 更新 强>
OP的评论后
我再次认为你有一个设计问题。为了让你的方法被多次调用,他们需要坐在可以访问的地方。你的方法几乎就在那里,但并不完全。所以这是你如何调用方法;多次并从头开始运行它们(我先向您展示代码,然后详细解释):
父类
public class TestBase{
//include here all your important methods *without* @Test Annotation
public void dbReset(){
//perform db reset
}
public void clearCache(){
//clear browser cache
}
public boolean openURL(){
//try to open test URL
return didIreachTestURLSuccessfully;
}
}
儿童班
public class loginFeature extends TestBase{
@Test (priority=1)
public void attemptToResetDataBase(){
dbReset();
}
@Test (priority=2, dependsOnMeth0ds="attemptToResetDataBase")
public void clearCacheTest(){
clearCache();
}
@Test (priority=3, dependsOnMeth0ds="clearCacheTest")
public void verifySuccessfulLogin(){
login();
}
}
因此,您将所有测试方法都包含在父类中,称为TestBase。然后使用扩展TestBase的类创建测试(例如loginTest)。现在你可以多次调用你的方法,每次都将它们作为一个单独的测试对待,并根据你的需要将它们与依赖关系连接起来(即我根据先前的方法将它们中的每一个连接起来;但你可以重新排列它们并将它们全部放入依赖于一个人,或者没有一个人。)
因为您的测试类继承自TestBase,所以您甚至不需要创建一个对象来访问内部方法;你可以直接打电话给他们。
希望这能为您解决,如果您需要更多信息,请随时写评论。