refactor(测试计划): 本地执行数据入库优化
This commit is contained in:
parent
294ce2ce59
commit
2bd59cbcb2
|
@ -74,10 +74,10 @@ public class ApiDefinitionExecResultService {
|
|||
RedisTemplate<String, Object> redisTemplate;
|
||||
|
||||
|
||||
public void saveApiResult(List<RequestResult> requestResults, ResultDTO dto) {
|
||||
LoggerUtil.info("接收到API/CASE执行结果【 " + requestResults.size() + " 】");
|
||||
public void saveApiResult(ResultDTO dto) {
|
||||
LoggerUtil.info("接收到API/CASE执行结果【 " + dto.getRequestResults().size() + " 】");
|
||||
|
||||
for (RequestResult item : requestResults) {
|
||||
for (RequestResult item : dto.getRequestResults()) {
|
||||
if (item.getResponseResult() != null && item.getResponseResult().getResponseTime() <= 0) {
|
||||
item.getResponseResult().setResponseTime((item.getEndTime() - item.getStartTime()));
|
||||
}
|
||||
|
@ -302,10 +302,10 @@ public class ApiDefinitionExecResultService {
|
|||
* 定时任务触发的保存逻辑
|
||||
* 定时任务时,userID要改为定时任务中的用户
|
||||
*/
|
||||
public void saveApiResultByScheduleTask(List<RequestResult> requestResults, ResultDTO dto) {
|
||||
if (CollectionUtils.isNotEmpty(requestResults)) {
|
||||
LoggerUtil.info("接收到定时任务执行结果【 " + requestResults.size() + " 】");
|
||||
for (RequestResult item : requestResults) {
|
||||
public void saveApiResultByScheduleTask(ResultDTO dto) {
|
||||
if (CollectionUtils.isNotEmpty(dto.getRequestResults())) {
|
||||
LoggerUtil.info("接收到定时任务执行结果【 " + dto.getRequestResults().size() + " 】");
|
||||
for (RequestResult item : dto.getRequestResults()) {
|
||||
if (!StringUtils.startsWithAny(item.getName(), "PRE_PROCESSOR_ENV_", "POST_PROCESSOR_ENV_")) {
|
||||
//对响应内容进行进一步解析。如果有附加信息(比如误报库信息),则根据附加信息内的数据进行其他判读
|
||||
RequestResultExpandDTO expandDTO = ResponseUtil.parseByRequestResult(item);
|
||||
|
@ -336,8 +336,8 @@ public class ApiDefinitionExecResultService {
|
|||
}
|
||||
updateTestCaseStates(dto.getTestId());
|
||||
Map<String, String> apiIdResultMap = new HashMap<>();
|
||||
long errorSize = requestResults.stream().filter(requestResult -> requestResult.getError() > 0).count();
|
||||
String status = errorSize > 0 || requestResults.isEmpty() ? TestPlanApiExecuteStatus.FAILD.name() : TestPlanApiExecuteStatus.SUCCESS.name();
|
||||
long errorSize = dto.getRequestResults().stream().filter(requestResult -> requestResult.getError() > 0).count();
|
||||
String status = errorSize > 0 || dto.getRequestResults().isEmpty() ? TestPlanApiExecuteStatus.FAILD.name() : TestPlanApiExecuteStatus.SUCCESS.name();
|
||||
if (StringUtils.isNotEmpty(dto.getReportId())) {
|
||||
apiIdResultMap.put(dto.getReportId(), status);
|
||||
}
|
||||
|
|
|
@ -326,6 +326,7 @@ public class ApiExecutionQueueService {
|
|||
for (ApiExecutionQueueDetail item : queueDetails) {
|
||||
ApiExecutionQueue queue = queueMapper.selectByPrimaryKey(item.getQueueId());
|
||||
if (queue == null) {
|
||||
executionQueueDetailMapper.deleteByPrimaryKey(item.getId());
|
||||
continue;
|
||||
}
|
||||
// 在资源池中执行
|
||||
|
@ -345,6 +346,10 @@ public class ApiExecutionQueueService {
|
|||
ApiRunMode.SCHEDULE_SCENARIO.name(),
|
||||
ApiRunMode.JENKINS_SCENARIO_PLAN.name())) {
|
||||
ApiScenarioReport report = apiScenarioReportMapper.selectByPrimaryKey(item.getReportId());
|
||||
// 报告已经被删除则队列也删除
|
||||
if (report == null) {
|
||||
executionQueueDetailMapper.deleteByPrimaryKey(item.getId());
|
||||
}
|
||||
if (report != null && StringUtils.equalsAnyIgnoreCase(report.getStatus(), TestPlanReportStatus.RUNNING.name(), APITestStatus.Waiting.name())
|
||||
&& report.getUpdateTime() < timeout) {
|
||||
report.setStatus(ScenarioStatus.Timeout.name());
|
||||
|
@ -433,7 +438,11 @@ public class ApiExecutionQueueService {
|
|||
});
|
||||
}
|
||||
|
||||
public void checkExecutionQueneByLoadTest(LoadTestReport loadTestReport) {
|
||||
/**
|
||||
* 性能测试监听检查
|
||||
* @param loadTestReport
|
||||
*/
|
||||
public void checkExecutionQueueByLoadTest(LoadTestReport loadTestReport) {
|
||||
ApiExecutionQueueDetailExample detailExample = new ApiExecutionQueueDetailExample();
|
||||
detailExample.createCriteria().andReportIdEqualTo(loadTestReport.getId());
|
||||
executionQueueDetailMapper.deleteByExample(detailExample);
|
||||
|
|
|
@ -35,14 +35,28 @@ public class ApiScenarioReportResultService {
|
|||
|
||||
public void save(String reportId, List<RequestResult> queue) {
|
||||
if (CollectionUtils.isNotEmpty(queue)) {
|
||||
queue.forEach(item -> {
|
||||
// 事物控制器出来的结果特殊处理
|
||||
if (StringUtils.isNotEmpty(item.getName()) && item.getName().startsWith("Transaction=") && CollectionUtils.isEmpty(item.getSubRequestResults())) {
|
||||
LoggerUtil.debug("合并事物请求暂不入库");
|
||||
} else {
|
||||
apiScenarioReportResultMapper.insert(this.newApiScenarioReportResult(reportId, item));
|
||||
if (queue.size() == 1) {
|
||||
queue.forEach(item -> {
|
||||
// 事物控制器出来的结果特殊处理
|
||||
if (StringUtils.isNotEmpty(item.getName()) && item.getName().startsWith("Transaction=") && CollectionUtils.isEmpty(item.getSubRequestResults())) {
|
||||
LoggerUtil.debug("合并事物请求暂不入库");
|
||||
} else {
|
||||
apiScenarioReportResultMapper.insert(this.newApiScenarioReportResult(reportId, item));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
|
||||
ApiScenarioReportResultMapper batchMapper = sqlSession.getMapper(ApiScenarioReportResultMapper.class);
|
||||
queue.forEach(item -> {
|
||||
if (StringUtils.isEmpty(item.getName()) || !item.getName().startsWith("Transaction=") || !CollectionUtils.isEmpty(item.getSubRequestResults())) {
|
||||
batchMapper.insert(this.newApiScenarioReportResult(reportId, item));
|
||||
}
|
||||
});
|
||||
sqlSession.flushStatements();
|
||||
if (sqlSession != null && sqlSessionFactory != null) {
|
||||
SqlSessionUtils.closeSqlSession(sqlSession, sqlSessionFactory);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,7 +126,7 @@ public class ApiScenarioReportResultService {
|
|||
if (CollectionUtils.isNotEmpty(errorCodeDTO.getErrorCodeList())) {
|
||||
report.setErrorCode(errorCodeDTO.getErrorCodeStr());
|
||||
}
|
||||
if(StringUtils.equalsIgnoreCase(errorCodeDTO.getRequestStatus(),ExecuteResult.errorReportResult.name())){
|
||||
if (StringUtils.equalsIgnoreCase(errorCodeDTO.getRequestStatus(), ExecuteResult.errorReportResult.name())) {
|
||||
status = errorCodeDTO.getRequestStatus();
|
||||
}
|
||||
report.setStatus(status);
|
||||
|
|
|
@ -87,9 +87,9 @@ public class ApiScenarioReportService {
|
|||
@Resource
|
||||
RedisTemplate<String, Object> redisTemplate;
|
||||
|
||||
public void saveResult(List<RequestResult> requestResults, ResultDTO dto) {
|
||||
public void saveResult(ResultDTO dto) {
|
||||
// 报告详情内容
|
||||
apiScenarioReportResultService.save(dto.getReportId(), requestResults);
|
||||
apiScenarioReportResultService.save(dto.getReportId(), dto.getRequestResults());
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -65,7 +65,6 @@ public class TestResultService {
|
|||
if (dto.getArbitraryData() != null && dto.getArbitraryData().containsKey("ENV")) {
|
||||
environmentList = (List<String>) dto.getArbitraryData().get("ENV");
|
||||
}
|
||||
List<RequestResult> requestResults = dto.getRequestResults();
|
||||
//处理环境参数
|
||||
if (CollectionUtils.isNotEmpty(environmentList)) {
|
||||
apiEnvironmentRunningParamService.parseEnvironment(environmentList);
|
||||
|
@ -73,15 +72,15 @@ public class TestResultService {
|
|||
}
|
||||
//测试计划定时任务-接口执行逻辑的话,需要同步测试计划的报告数据
|
||||
if (StringUtils.equalsAny(dto.getRunMode(), ApiRunMode.SCHEDULE_API_PLAN.name(), ApiRunMode.JENKINS_API_PLAN.name(), ApiRunMode.MANUAL_PLAN.name())) {
|
||||
apiDefinitionExecResultService.saveApiResultByScheduleTask(requestResults, dto);
|
||||
apiDefinitionExecResultService.saveApiResultByScheduleTask(dto);
|
||||
} else if (StringUtils.equalsAny(dto.getRunMode(), ApiRunMode.DEFINITION.name(), ApiRunMode.JENKINS.name(), ApiRunMode.API_PLAN.name(), ApiRunMode.SCHEDULE_API_PLAN.name(), ApiRunMode.JENKINS_API_PLAN.name(), ApiRunMode.MANUAL_PLAN.name())) {
|
||||
apiDefinitionExecResultService.saveApiResult(requestResults, dto);
|
||||
apiDefinitionExecResultService.saveApiResult(dto);
|
||||
} else if (StringUtils.equalsAny(dto.getRunMode(), ApiRunMode.SCENARIO.name(), ApiRunMode.SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO.name(), ApiRunMode.JENKINS_SCENARIO_PLAN.name())) {
|
||||
apiScenarioReportService.saveResult(requestResults, dto);
|
||||
apiScenarioReportService.saveResult(dto);
|
||||
} else if (StringUtils.equalsAny(dto.getRunMode(), ApiRunMode.UI_SCENARIO.name(), ApiRunMode.UI_SCENARIO_PLAN.name(), ApiRunMode.UI_JENKINS_SCENARIO_PLAN.name(), ApiRunMode.UI_SCHEDULE_SCENARIO.name(), ApiRunMode.UI_SCHEDULE_SCENARIO_PLAN.name())) {
|
||||
apiScenarioReportService.saveUiResult(requestResults, dto);
|
||||
apiScenarioReportService.saveUiResult(dto.getRequestResults(), dto);
|
||||
}
|
||||
updateTestCaseStates(requestResults, dto.getRunMode());
|
||||
updateTestCaseStates(dto.getRequestResults(), dto.getRunMode());
|
||||
}
|
||||
|
||||
public void batchSaveResults(Map<String, List<ResultDTO>> resultDtoMap) {
|
||||
|
|
|
@ -18,7 +18,7 @@ public class PerformanceQueueEvent implements LoadTestFinishEvent {
|
|||
public void sendNotice(LoadTestReport loadTestReport) {
|
||||
//删除性能测试在执行队列中的数据 (在测试计划执行中会将性能测试执行添加到执行队列,用于判断整个测试计划到执行进度)
|
||||
try {
|
||||
apiExecutionQueueService.checkExecutionQueneByLoadTest(loadTestReport);
|
||||
apiExecutionQueueService.checkExecutionQueueByLoadTest(loadTestReport);
|
||||
} catch (Exception e) {
|
||||
LogUtil.error("PerformanceQueueEvent error. id:" + loadTestReport.getId());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue