TestNG - 按顺序运行测试吗?

时间:2017-02-05 13:04:35

标签: testing testng

我尝试了许多方法但没有成功,我开始相信这在TestNG中无法实现,我只想与您确认。

我有网络服务我正在测试,我需要运行一些基本方案。



我目前的测试方法,每个都有@Test注释(每个都需要作为单个测试进行测试):

  • dbResetTest
  • clearCacheTest
  • openURLTest
  • loginTest
  • actionXTest
  • actionYTest



我还需要运行这些场景,包括上面的测试运行IN ORDER:

  1. 测试登录功能( openURLTest - &gt; dbResetTest - &gt; clearCacheTest - &gt; loginTest )< / LI>
  2. 登录后测试X( openURLTest - &gt; dbResetTest - &gt; clearCacheTest - &gt; loginTest - &gt; actionXTest
  3. 清除缓存后测试Y( clearCacheTest - &gt; actionYTest


  4. 问题是,如果我从第1点和第1点进行测试2依赖于其他人我无法运行方案3,因为 clearCacheTest 在此特定方案中不依赖于任何其他方案。我已尝试通过xml和依赖关系运行这些测试,但没有成功。

    当然我可以让 actionYTest 直接调用 clearCacheTest ,但如果 clearCacheTest 失败,报告会显示 actionYTest 是失败的,这是我试图避免的。

    我很确定现在我需要的东西在TestNG中无法实现,但也许我错了......

1 个答案:

答案 0 :(得分:0)

我认为你应该稍微改变一下你的战术。您不应将这些〜(dbResetTest等)视为测试类,而应将其作为测试方法,并以编程方式(而非XML)使用dependsOnMethods而不是dependsOnGroups。然后,您将能够轻松地实现所需的逻辑(每个测试都是唯一的 - &gt; @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,所以您甚至不需要创建一个对象来访问内部方法;你可以直接打电话给他们。

希望这能为您解决,如果您需要更多信息,请随时写评论。