5

我有一个方法要使用 TestNG 进行测试,并用以下注释对其进行了标记:

@Test(invocationCount=10, threadPoolSize=5)

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

更恰当的例子:

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

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

4

6 回答 6

9

您可以通过在测试方法中添加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);
}
于 2017-05-29T12:24:46.133 回答
2

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

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 源类来获取实际的当前调用计数

于 2013-06-17T02:20:54.483 回答
2

你可以使用这样的东西:

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)

  }
}
于 2016-06-02T07:14:22.200 回答
1

您可以通过调用getCurrentInvocationCount() 方法获取ITestNGMethod

于 2014-10-16T07:22:08.420 回答
0

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

  1. java.lang.reflect.Method

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

  2. ITestContext

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

最后,使用.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;
于 2020-05-20T21:11:01.607 回答
-1

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

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

  }
于 2020-09-25T05:49:47.180 回答