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你们都懂得。