fix(接口测试): 修复串行执行偶发异常造成阻塞问题

Signed-off-by: fit2-zhao <yong.zhao@fit2cloud.com>
This commit is contained in:
fit2-zhao 2023-04-21 18:45:24 +08:00 committed by fit2-zhao
parent b63af54422
commit d2f30562b3
5 changed files with 12 additions and 28 deletions

View File

@ -83,7 +83,7 @@ public class ApiCaseSerialService {
runRequest.getExtendedParameters().put(PROJECT_ID, queue.getProjectIds()); runRequest.getExtendedParameters().put(PROJECT_ID, queue.getProjectIds());
jMeterService.run(runRequest); jMeterService.run(runRequest);
} catch (Exception e) { } catch (Exception e) {
RequestParamsUtil.rollback(runRequest, e); LoggerUtil.error("串行执行用例失败", e);
} }
} }

View File

@ -18,6 +18,7 @@ import io.metersphere.commons.utils.GenerateHashTreeUtil;
import io.metersphere.commons.utils.HashTreeUtil; import io.metersphere.commons.utils.HashTreeUtil;
import io.metersphere.commons.utils.JSON; import io.metersphere.commons.utils.JSON;
import io.metersphere.commons.utils.RequestParamsUtil; import io.metersphere.commons.utils.RequestParamsUtil;
import io.metersphere.constants.RunModeConstants;
import io.metersphere.dto.JmeterRunRequestDTO; import io.metersphere.dto.JmeterRunRequestDTO;
import io.metersphere.environment.service.BaseEnvironmentService; import io.metersphere.environment.service.BaseEnvironmentService;
import io.metersphere.utils.LoggerUtil; import io.metersphere.utils.LoggerUtil;
@ -30,6 +31,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
@ -60,6 +62,7 @@ public class ApiScenarioSerialService {
reportId = queue.getReportId(); reportId = queue.getReportId();
} }
JmeterRunRequestDTO runRequest = RequestParamsUtil.init(executionQueue, queue, reportId); JmeterRunRequestDTO runRequest = RequestParamsUtil.init(executionQueue, queue, reportId);
runRequest.setRunType(RunModeConstants.SERIAL.toString());
// 更新报告状态 // 更新报告状态
updateReportToRunning(queue, runRequest); updateReportToRunning(queue, runRequest);
try { try {
@ -98,7 +101,7 @@ public class ApiScenarioSerialService {
runRequest.getExtendedParameters().put("projectId", queue.getProjectIds()); runRequest.getExtendedParameters().put("projectId", queue.getProjectIds());
jMeterService.run(runRequest); jMeterService.run(runRequest);
} catch (Exception e) { } catch (Exception e) {
RequestParamsUtil.rollback(runRequest, e); LoggerUtil.error("串行执行失败", e);
} }
} }

View File

@ -13,10 +13,12 @@ import io.metersphere.base.mapper.TestResourcePoolMapper;
import io.metersphere.commons.constants.ElementConstants; import io.metersphere.commons.constants.ElementConstants;
import io.metersphere.commons.constants.ResourcePoolTypeEnum; import io.metersphere.commons.constants.ResourcePoolTypeEnum;
import io.metersphere.constants.RunModeConstants; import io.metersphere.constants.RunModeConstants;
import io.metersphere.dto.*; import io.metersphere.dto.BaseSystemConfigDTO;
import io.metersphere.dto.JmeterRunRequestDTO;
import io.metersphere.dto.ProjectJarConfig;
import io.metersphere.dto.RunModeConfigDTO;
import io.metersphere.environment.service.BaseEnvGroupProjectService; import io.metersphere.environment.service.BaseEnvGroupProjectService;
import io.metersphere.plugin.core.MsTestElement; import io.metersphere.plugin.core.MsTestElement;
import io.metersphere.service.ApiExecutionQueueService;
import io.metersphere.service.RemakeReportService; import io.metersphere.service.RemakeReportService;
import io.metersphere.utils.LoggerUtil; import io.metersphere.utils.LoggerUtil;
import io.metersphere.vo.BooleanPool; import io.metersphere.vo.BooleanPool;
@ -161,23 +163,15 @@ public class GenerateHashTreeUtil {
LoggerUtil.info("场景资源:" + item.getName() + ", 生成执行脚本JMX成功", runRequest.getReportId()); LoggerUtil.info("场景资源:" + item.getName() + ", 生成执行脚本JMX成功", runRequest.getReportId());
} catch (Exception ex) { } catch (Exception ex) {
remakeException(runRequest, ex);
LoggerUtil.error("场景资源:" + item.getName() + ", 生成执行脚本失败", runRequest.getReportId(), ex); LoggerUtil.error("场景资源:" + item.getName() + ", 生成执行脚本失败", runRequest.getReportId(), ex);
return null; RemakeReportService remakeReportService = CommonBeanFactory.getBean(RemakeReportService.class);
remakeReportService.testEnded(runRequest, ex.getMessage());
} }
LogUtil.info(testPlan.getJmx(jmeterHashTree)); LogUtil.info(testPlan.getJmx(jmeterHashTree));
return jmeterHashTree; return jmeterHashTree;
} }
public static void remakeException(JmeterRunRequestDTO runRequest, Exception e) {
RemakeReportService remakeReportService = CommonBeanFactory.getBean(RemakeReportService.class);
remakeReportService.testEnded(runRequest, e.getMessage());
ResultDTO dto = new ResultDTO();
BeanUtils.copyBean(dto, runRequest);
CommonBeanFactory.getBean(ApiExecutionQueueService.class).queueNext(dto);
}
public static boolean isSetReport(RunModeConfigDTO config) { public static boolean isSetReport(RunModeConfigDTO config) {
return config != null && isSetReport(config.getReportType()) && StringUtils.isNotEmpty(config.getReportName()); return config != null && isSetReport(config.getReportType()) && StringUtils.isNotEmpty(config.getReportName());
} }

View File

@ -1,15 +1,11 @@
package io.metersphere.commons.utils; package io.metersphere.commons.utils;
import io.metersphere.service.ApiExecutionQueueService;
import io.metersphere.service.RemakeReportService;
import io.metersphere.base.domain.ApiExecutionQueue; import io.metersphere.base.domain.ApiExecutionQueue;
import io.metersphere.base.domain.ApiExecutionQueueDetail; import io.metersphere.base.domain.ApiExecutionQueueDetail;
import io.metersphere.constants.RunModeConstants; import io.metersphere.constants.RunModeConstants;
import io.metersphere.dto.BaseSystemConfigDTO; import io.metersphere.dto.BaseSystemConfigDTO;
import io.metersphere.dto.JmeterRunRequestDTO; import io.metersphere.dto.JmeterRunRequestDTO;
import io.metersphere.dto.ResultDTO;
import io.metersphere.service.SystemParameterService; import io.metersphere.service.SystemParameterService;
import io.metersphere.utils.LoggerUtil;
public class RequestParamsUtil { public class RequestParamsUtil {
@ -28,13 +24,4 @@ public class RequestParamsUtil {
runRequest.setPlatformUrl(GenerateHashTreeUtil.getPlatformUrl(baseInfo, runRequest, queue.getId())); runRequest.setPlatformUrl(GenerateHashTreeUtil.getPlatformUrl(baseInfo, runRequest, queue.getId()));
return runRequest; return runRequest;
} }
public static void rollback(JmeterRunRequestDTO runRequest, Exception e) {
RemakeReportService remakeReportService = CommonBeanFactory.getBean(RemakeReportService.class);
remakeReportService.testEnded(runRequest, e.getMessage());
ResultDTO dto = new ResultDTO();
BeanUtils.copyBean(dto, runRequest);
CommonBeanFactory.getBean(ApiExecutionQueueService.class).queueNext(dto);
LoggerUtil.error("执行队列[" + runRequest.getQueueId() + "]入队列失败:", runRequest.getReportId(), e);
}
} }

View File

@ -138,6 +138,7 @@ public class ApiJMeterFileService {
if (detail != null) { if (detail != null) {
runRequest.setRetryEnable(detail.getRetryEnable()); runRequest.setRetryEnable(detail.getRetryEnable());
runRequest.setRetryNum(detail.getRetryNumber()); runRequest.setRetryNum(detail.getRetryNumber());
runRequest.setRunType(detail.getType());
} }
Map<String, String> processEnvMap = new LinkedHashMap<>(); Map<String, String> processEnvMap = new LinkedHashMap<>();
if (detail != null && StringUtils.isNotEmpty(detail.getEvnMap())) { if (detail != null && StringUtils.isNotEmpty(detail.getEvnMap())) {
@ -165,7 +166,6 @@ public class ApiJMeterFileService {
} catch (Exception e) { } catch (Exception e) {
remakeReportService.testEnded(runRequest, "生成执行脚本异常:" + e.getMessage()); remakeReportService.testEnded(runRequest, "生成执行脚本异常:" + e.getMessage());
} }
remakeReportService.testEnded(runRequest, "未找到测试资源【" + remoteTestId + "】,资源类型:" + runMode);
return new byte[0]; return new byte[0];
} }