TestNg官方手册中对于这2个标记的说明为:
invocationCount 当前方法被调用的次数;
threadPoolSize 当前方法的线程池大小。方法将被多线程调用,次数由invocationCount参数指定;
注意:
threadPoolSize的设定要依赖invocationCount的设定,如果invocationCount的设定值小于threadPoolSize的设定值,多于的设定是无效的,举个极端的例子,如果你threadPoolSize设定是100,而invocationCount没有设定(默认为1次),那么系统只有开启一个线程来运行。反过invocationCount的设定不依赖threadPoolSize,testNG会以默认值1来运行。
实例:
@Test(dataProvider ="CsvDataProvider",
invocationCount = 8, threadPoolSize = 5, description ="资金业务-同步执行-正常业务场景测试")
这是我目前使用的一段代码摘要。标记表达的意思便是起5个线程并发,总共执行方法8次
在使用debug观察线程的时候可以看到thread启动了5条。测试代码执行的日志显示在同一时间内方法被调用了5次
11:12:00,531
[TestNG] INFO DriverDataProvider : =============== START [02N01]
===============
11:12:00,532
[TestNG] INFO DriverDataProvider : =============== START [02N01]
===============
11:12:00,532
[TestNG] INFO DriverDataProvider : =============== START [02N01]
===============
11:12:00,532
[TestNG] INFO DriverDataProvider : =============== START [02N01]
===============
11:12:00,531
[TestNG] INFO DriverDataProvider : =============== START [02N01]
===============
到这里为止,大家可以发现这个标签可以非常方便的让我们执行并发测试,不再需要额外的录制脚本来压测。对于小当量及和一些日常的并发测试可以非常灵活的就运用上。
最后附上一个发散的东西。
publicstaticvoidt() {
longstart = System.currentTimeMillis();
while(true)
{
//you can do something at here
System.out.println("222");
if((System.currentTimeMillis()
- start) > 10000) {
break;
}
}
}
这是一个10秒循环的方法,当然你也可以变成10分钟,也可以变成10小时。结合标记invocationCount = 1000000,
threadPoolSize = 10你们都懂得。