diff --git a/backend/src/main/java/io/metersphere/api/jmeter/TestResult.java b/backend/src/main/java/io/metersphere/api/jmeter/TestResult.java index 5dbb53f19e..cb73f1f092 100644 --- a/backend/src/main/java/io/metersphere/api/jmeter/TestResult.java +++ b/backend/src/main/java/io/metersphere/api/jmeter/TestResult.java @@ -124,19 +124,7 @@ public class TestResult { subItem.setName(array[0]); }); } else { - item.getSubRequestResults().forEach(subItem -> { - if (StringUtils.isNotEmpty(subItem.getName()) && subItem.getName().indexOf(SEPARATOR) != -1) { - String array[] = subItem.getName().split(SEPARATOR); - subItem.setName(array[0]); - try { - if (StringUtils.isNotEmpty(subItem.getScenario())) { - List<String> id_names = JSON.parseObject(subItem.getScenario(), List.class); - this.setStatus(id_names, subItem.getError() > 0); - } - } catch (Exception e) { - } - } - }); + this.genScenarioInSubReqeustResult(item); } this.setStepStatus(itemAndScenarioName,item.getError()>0); }); @@ -172,4 +160,26 @@ public class TestResult { this.setScenarioStepTotal(this.scenarioStepMap.size()); } + + //一般多层的事务控制器会出现这种情况 + private String genScenarioInSubReqeustResult(RequestResult item) { + + if (StringUtils.isNotEmpty(item.getName()) && item.getName().indexOf(SEPARATOR) != -1) { + String array[] = item.getName().split(SEPARATOR); + item.setName(array[0]); + } + + if(StringUtils.isNotEmpty(item.getScenario())){ + List<String> id_names = JSON.parseObject(item.getScenario(), List.class); + this.setStatus(id_names, item.getError() > 0); + return item.getScenario(); + }else{ + if(CollectionUtils.isNotEmpty(item.getSubRequestResults())){ + for (RequestResult requestResult:item.getSubRequestResults()) { + String result = this.genScenarioInSubReqeustResult(requestResult); + } + } + return null; + } + } } \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java index bc37c3fbdc..640f8943cd 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java @@ -1001,16 +1001,8 @@ public class TestPlanReportService { * 更新TestPlanReportData的PerformanceInfo * * @param testPlanReport - * @param performaneReportIDList */ public void updatePerformanceInfo(TestPlanReport testPlanReport, Map<String,String> performaneReportIDMap, String triggerMode) { -// TestPlanReportDataExample example = new TestPlanReportDataExample(); -// example.createCriteria().andTestPlanReportIdEqualTo(testPlanReport.getId()); -// List<TestPlanReportDataWithBLOBs> reportDataList = testPlanReportDataMapper.selectByExampleWithBLOBs(example); -// for (TestPlanReportDataWithBLOBs models : reportDataList) { -// models.setPerformanceInfo(JSONArray.toJSONString(performaneReportIDList)); -// testPlanReportDataMapper.updateByPrimaryKeyWithBLOBs(models); -// } /** * 虽然kafka已经设置了topic推送,但是当执行机器性能不够时会影响到报告状态当修改 @@ -1023,29 +1015,42 @@ public class TestPlanReportService { List<String> performaneReportIDList = new ArrayList<>(performaneReportIDMap.keySet()); while (performaneReportIDList.size() > 0) { List<String> selectList = new ArrayList<>(performaneReportIDList); + testPlanLog.info("TestPlanReportId["+testPlanReport.getId()+"] SELECT performance BATCH START:"+JSONArray.toJSONString(selectList)); for (String loadTestReportId : selectList) { - LoadTestReportWithBLOBs loadTestReportFromDatabase = loadTestReportMapper.selectByPrimaryKey(loadTestReportId); - if (loadTestReportFromDatabase == null) { - //检查错误数据 - if (errorDataCheckMap.containsKey(loadTestReportId)) { - if (errorDataCheckMap.get(loadTestReportId) > 10) { - performaneReportIDList.remove(loadTestReportId); - if(performaneReportIDMap.containsKey(loadTestReportId)){ - finishLoadTestId.put(performaneReportIDMap.get(loadTestReportId), TestPlanApiExecuteStatus.FAILD.name()); + try{ + LoadTestReportWithBLOBs loadTestReportFromDatabase = loadTestReportMapper.selectByPrimaryKey(loadTestReportId); + if (loadTestReportFromDatabase == null) { + testPlanLog.info("TestPlanReportId["+testPlanReport.getId()+"] SELECT performance ID:"+loadTestReportId+",RESULT IS NULL"); + //检查错误数据 + if (errorDataCheckMap.containsKey(loadTestReportId)) { + if (errorDataCheckMap.get(loadTestReportId) > 10) { + performaneReportIDList.remove(loadTestReportId); + if(performaneReportIDMap.containsKey(loadTestReportId)){ + finishLoadTestId.put(performaneReportIDMap.get(loadTestReportId), TestPlanApiExecuteStatus.FAILD.name()); + } + } else { + errorDataCheckMap.put(loadTestReportId, errorDataCheckMap.get(loadTestReportId) + 1); } } else { - errorDataCheckMap.put(loadTestReportId, errorDataCheckMap.get(loadTestReportId) + 1); + errorDataCheckMap.put(loadTestReportId, 1); + } + } else{ + testPlanLog.info("TestPlanReportId["+testPlanReport.getId()+"] SELECT performance ID:"+loadTestReportId+",RESULT :"+loadTestReportFromDatabase.getStatus()); + if (StringUtils.equalsAny(loadTestReportFromDatabase.getStatus(), + PerformanceTestStatus.Completed.name(), PerformanceTestStatus.Error.name())) { + finishLoadTestId.put(loadTestReportFromDatabase.getTestId(), TestPlanApiExecuteStatus.SUCCESS.name()); + performaneReportIDList.remove(loadTestReportId); } - } else { - errorDataCheckMap.put(loadTestReportId, 1); } - } else if (StringUtils.equalsAny(loadTestReportFromDatabase.getStatus(), - PerformanceTestStatus.Completed.name(), PerformanceTestStatus.Error.name())) { - finishLoadTestId.put(loadTestReportFromDatabase.getTestId(), TestPlanApiExecuteStatus.SUCCESS.name()); + }catch (Exception e){ performaneReportIDList.remove(loadTestReportId); + finishLoadTestId.put(performaneReportIDMap.get(loadTestReportId), TestPlanApiExecuteStatus.FAILD.name()); + testPlanLog.error(e.getMessage()); } } + testPlanLog.info("TestPlanReportId["+testPlanReport.getId()+"] SELECT performance BATCH OVER:"+JSONArray.toJSONString(selectList)); if (performaneReportIDList.isEmpty()) { + testPlanLog.info("TestPlanReportId["+testPlanReport.getId()+"] performance EXECUTE OVER. TRIGGER_MODE:"+triggerMode+",REsult:"+JSONObject.toJSONString(finishLoadTestId)); if (StringUtils.equals(triggerMode, ReportTriggerMode.API.name())) { for (String string : finishLoadTestId.keySet()) { TestPlanLoadCaseEventDTO eventDTO = new TestPlanLoadCaseEventDTO(); @@ -1054,10 +1059,8 @@ public class TestPlanReportService { eventDTO.setStatus(PerformanceTestStatus.Completed.name()); this.updatePerformanceTestStatus(eventDTO); } - } else { - this.updateExecuteApis(testPlanReport.getId(), null, null, finishLoadTestId); } - + this.updateExecuteApis(testPlanReport.getId(), null, null, finishLoadTestId); } else { try { //查询定时任务是否关闭