因为业务中是以任务流的方式交互的,而某些任务同时产生的,没有先后顺序的依赖关系,
这就要求在测试时,去关注不同的任务,先后提交是否有影响?
如果要并发执行一条以上的用例,又该怎么做呢?
for (Map.Entry<Integer, APITestCase> oneTC : JsonTestUtils.getAllTestCaseMap().entrySet()) {
log.debug(oneTC.getValue().getName() + " : " + oneTC.getValue().getDescription());
TestNG testNG = new TestNG(false);
testNG.setSuiteThreadPoolSize(1);
testNG.setThreadCount(1);
testNG.setTestClasses(new Class[]{TestExecutor.class});
JsonTestUtils.getTestCase();
testNG.run();
}
这里是一条一条按顺序执行的,如果想要不按顺序执行,怎么搞?
将用例解析出来后,自己再写一个随机调用的方法,随机调用用例执行
TestNG testNG = new TestNG(false);
// testNG.setSuiteThreadPoolSize(5);
testNG.setPreserveOrder(false);
testNG.setParallel(XmlSuite.ParallelMode.CLASSES);
testNG.setTestClasses(new Class[]{calzz1, clazz});
testNG.run();
在 testNG 中是可以指定测试类的执行顺序的,
如上代码所示,preserveOrder 是指定执行顺序的,默认是 true,按字母顺序排列
此外,设计线程池的数量在一定程度上,也能达到类似的效果,因为是并发执行的,执行的顺序并不固定
另外这里的 clazz 和 clazz1 是在用例执行前动态生成的,参考:使用 java 动态加载机制模拟脚本语言的效果
把这里的顺序执行与并发支持做成参数,开放给用户在 web 页面上勾选,以提高用例执行的灵活度
JAVA 测试新技术-TestNG 和高级概念