TestNG中的当前InvocationCount

时间:2013-06-17 01:39:02

标签: eclipse testng

我有一个使用TestNG进行测试的方法,我用下面的注释标记了它:

@Test(invocationCount=10, threadPoolSize=5)

现在,在我的测试方法中,我想获取正在执行的当前invocationCount。那可能吗?如果是,那么我很高兴知道如何。

更恰当的例子:

@Test(invocationCount=10, threadPoolSize=5)
public void testMe() {
   System.out.println("Executing count: "+INVOCATIONCOUNT); //INVOCATIONCOUNT is what I am looking for
}

作为参考,我在Eclipse中使用TestNG插件。

6 个答案:

答案 0 :(得分:7)

您可以通过在测试方法中添加 ITestContext 参数来使用TestNG依赖项注入功能。请参阅http://testng.org/doc/documentation-main.html#native-dependency-injection

从ITestContext参数中,您可以调用 getAllTestMethods(),它返回 ITestNGMethod 数组。它应该只返回一个元素的数组,它引用当前/实际的测试方法。最后,您可以调用ITestNGMethod的 getCurrentInvocationCount()

您的测试代码应该更像下面的示例

@Test(invocationCount=10, threadPoolSize=5)
public void testMe(ITestContext testContext) {
   int currentCount = testContext.getAllTestMethods()[0].getCurrentInvocationCount();
   System.out.println("Executing count: " + currentCount);
}

答案 1 :(得分:1)

您可以通过调用ITestNGMethod

getCurrentInvocationCount()方法来获取

答案 2 :(得分:1)

您可以使用以下内容:

public class getCurrentInvocationCount {

  AtomicInteger i = new AtomicInteger(0);

  @Test(invocationCount = 10, threadPoolSize=5)
  public void testMe()  {
   int count= i.addAndGet(1);
   System.out.println("Current Invocation count "+count)

  }
}

答案 3 :(得分:0)

您可以获得如下所述的当前调用计数

public class getCurrentInvocationCount {
int count;

 @BeforeClass
 public void initialize() {
     count = 0;
  }

 @Test(invocationCount = 10)
 public void testMe()  {
   count++;
   System.out.println("Current Invocation count "+count)

  }
 }

我知道这是一种愚蠢的方式。但它会服务于你的目的。您可以参考testNG源类来获取实际当前invocationCount

答案 4 :(得分:0)

尝试在@Test方法中放入2个参数:

  1. java.lang.reflect.Method

    使用.getName()获取当前方法名称。

  2. ITestContext

    使用.getAllTestMethods()获取所有测试方法。然后使用forEach通过ITestNGMethod提取它们,并在第1点与.getName()进行比较。

最后,使用.getCurrentInvocationCount()实现这一目标。

@Test(invocationCount=10)
public void testMe(ITestContext context, Method method) {
    int invCountNumber = 0;
    for(ITestNGMethod iTestMethod: context.getAllTestMethods()) {
        if(iTestMethod.getMethodName().equals(method.getName())){
            invCountNumber = iTestMethod.getCurrentInvocationCount();
            break;
        }
    }
    System.out.println(invCountNumber);
}

正在导入:

import java.lang.reflect.Method;
import org.testng.ITestContext;
import org.testng.ITestNGMethod;

答案 5 :(得分:0)

使用invocationCount时,测试将像for循环一样运行。 我发现这是获得测试执行次数的最简单方法。

int count;
@Test(invocationCount = 3)
 public void yourTest()  {
   counter++;
   System.out.println("test executed count is: " + count)

  }