多线程测试中TestNG DataProvider执行顺序设置及问题排查
问题1:多Excel测试用例的多线程执行顺序控制
我将所有测试用例存储在多个Excel文件中,每个Excel工作表对应一个测试用例,通过Java类作为DataProvider读取所有工作表。测试中仅定义了一个测试方法:
@Test(dataProvider = "testcases", dataProviderClass = TestCaseProvider.class) public void test(TestSheet sheet) { String name = "File: " + sheet.getFilename() + " -> Sheet: " + sheet.getSheet(); CaseExecutor executor = new CaseExecutor(sheet); executor.start(); executor.assertPostCondition(); }
现新增需求:必须保证同一Excel文件内的工作表按顺序执行(如文件A的SheetA1→SheetA2→SheetA3,文件B的SheetB1→SheetB2),不同文件间的执行顺序无要求,且测试采用多线程运行。我设想了两种解决方案:
- 将同一文件的所有工作表绑定到一个执行线程,按工作表索引设置顺序。
- 为所有工作表设置优先级,工作表0优先级为0,工作表1优先级为1……按优先级执行,即所有文件的第一个工作表优先执行,全部完成后再执行第二个工作表。
请问哪种方案更易实现?具体如何操作?
问题2:TestNG线程设置不生效导致串行执行
针对@Krishnan Mahadevan的方案,我尝试不使用suite文件,在Java代码中设置线程数为5:
@BeforeSuite public void setupClassName(ITestContext context) { context.getCurrentXmlTest().getSuite().setDataProviderThreadCount(5); context.getCurrentXmlTest().getSuite().setPreserveOrder(true); context.getCurrentXmlTest().getSuite().setParallel(XmlSuite.ParallelMode.INSTANCES); context.getCurrentXmlTest().getSuite().setGroupByInstances(true); }
并为每个用例添加休眠:
@Test(dataProvider = "getAllTestCases") public void testCase(JsonObject testCase) { System.err.println("Running test case: " + testCase.toString() + " on thread " + Thread.currentThread().getId()); ThreadUtil.sleep(3, TimeUnit.SECONDS); }
但发现所有测试用例均串行执行,输出如下:
File1 Test1 Pause 3 seconds File1 Test2 Pause 3 seconds File2 Test1 Pause 3 seconds ......
而期望输出为:
File1 Test1 File2 Test1 File3 Test1 Pause 3 second File1 Test2 File2 Test2 File3 Test2 Pause 3 second ......
请问线程数设置存在什么问题?
内容的提问来源于stack exchange,提问作者Bin
相关产品推荐
相关产品推荐

