我有一个使用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插件。
答案 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个参数:
java.lang.reflect.Method
使用.getName()
获取当前方法名称。
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)
}