TestNG条件配置方法

时间:2014-01-20 11:04:26

标签: testng

我想知道是否有一种方法可以使用不同的配置方法(比如在类级别,@ Before / AfterClass),这将使用户能够选择在测试用例中使用哪种配置方法。 例如:

@BeforeClass
public void configuration1 () {
   // Do your configuration1
}

@BeforeClass
public void configuration2 () {
   // Do your configuration2
}

我希望能够选择使用哪种配置方法。当然,这可以通过配置方法中的条件来完成,但我想知道是否可以避免运行不包含特定运行中所需配置的方法。

提前致谢!

2 个答案:

答案 0 :(得分:2)

TestNG提供Listeners来自定义默认功能。根据您的要求,需要实施IInvokedMethodListener。我不认为命令行参数可以传递给testng xml,但试试你的运气。在下面的代码中,“配置”被假定为来自testng xml的参数。

示例代码(未测试)

public class CustomListener implements IInvokedMethodListener {
  @Override
  public void beforeInvocation(IInvokedMethod method, ITestResult itr) {
    if (method.isConfigurationMethod()) {
      String userPassed = method.getTestMethod().getXmlTest()
                .getLocalParameters().get("configuration");
      if(based on userPassed , call configuration() method){

      }
     }
   }

  @Override
  public void afterInvocation(IInvokedMethod arg0, ITestResult arg1) {
    // TODO Auto-generated method stub
  }
}

如果您决定从java类调用此Listener,则可以读取cmd行args并将其传递给CustomListener。只是一个想法。

答案 1 :(得分:0)

根据您的测试设置,您可能只使用群组:

public class Test {

  @BeforeClass(groups = {"A"})
  public void configuration1() {...}

  @BeforeClass(groups = {"B"})
  public void configuration2() {...}

  @Test(groups = {"A", "B"})
 public void testFoo() {...} 

  @Test(groups = {"A"})
  public void testFoo() {...} 
}

或者您可能会考虑参数化您的测试/使用数据提供程序。