feat(接口测试): 统一执行方式增加失败停止和用例集合报告
--story=1005727 --user=赵勇 接口测试用例支持批量执行后生成聚合报告 https://www.tapd.cn/55049933/s/1104083
This commit is contained in:
parent
1e4a3e9c60
commit
861ebc2e37
|
@ -8,6 +8,7 @@ import io.metersphere.api.dto.QueryAPIReportRequest;
|
||||||
import io.metersphere.api.dto.automation.APIScenarioReportResult;
|
import io.metersphere.api.dto.automation.APIScenarioReportResult;
|
||||||
import io.metersphere.api.dto.automation.ExecuteType;
|
import io.metersphere.api.dto.automation.ExecuteType;
|
||||||
import io.metersphere.api.service.ApiScenarioReportService;
|
import io.metersphere.api.service.ApiScenarioReportService;
|
||||||
|
import io.metersphere.base.domain.ApiScenarioReport;
|
||||||
import io.metersphere.commons.constants.NoticeConstants;
|
import io.metersphere.commons.constants.NoticeConstants;
|
||||||
import io.metersphere.commons.constants.OperLogConstants;
|
import io.metersphere.commons.constants.OperLogConstants;
|
||||||
import io.metersphere.commons.constants.OperLogModule;
|
import io.metersphere.commons.constants.OperLogModule;
|
||||||
|
@ -61,7 +62,7 @@ public class APIScenarioReportController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/reName")
|
@PostMapping("/reName")
|
||||||
public void reName(@RequestBody QueryAPIReportRequest reportRequest) {
|
public void reName(@RequestBody ApiScenarioReport reportRequest) {
|
||||||
apiReportService.reName(reportRequest);
|
apiReportService.reName(reportRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@ package io.metersphere.api.exec.api;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import io.metersphere.api.dto.ApiCaseRunRequest;
|
import io.metersphere.api.dto.ApiCaseRunRequest;
|
||||||
|
import io.metersphere.api.dto.automation.APIScenarioReportResult;
|
||||||
|
import io.metersphere.api.dto.automation.ExecuteType;
|
||||||
import io.metersphere.api.dto.definition.ApiTestCaseRequest;
|
import io.metersphere.api.dto.definition.ApiTestCaseRequest;
|
||||||
import io.metersphere.api.dto.definition.BatchRunDefinitionRequest;
|
import io.metersphere.api.dto.definition.BatchRunDefinitionRequest;
|
||||||
import io.metersphere.api.exec.queue.DBTestQueue;
|
import io.metersphere.api.exec.queue.DBTestQueue;
|
||||||
|
@ -9,13 +11,16 @@ import io.metersphere.api.exec.scenario.ApiScenarioSerialService;
|
||||||
import io.metersphere.api.exec.utils.ApiDefinitionExecResultUtil;
|
import io.metersphere.api.exec.utils.ApiDefinitionExecResultUtil;
|
||||||
import io.metersphere.api.service.ApiCaseResultService;
|
import io.metersphere.api.service.ApiCaseResultService;
|
||||||
import io.metersphere.api.service.ApiExecutionQueueService;
|
import io.metersphere.api.service.ApiExecutionQueueService;
|
||||||
|
import io.metersphere.api.service.ApiScenarioReportService;
|
||||||
|
import io.metersphere.api.service.ApiScenarioReportStructureService;
|
||||||
import io.metersphere.base.domain.*;
|
import io.metersphere.base.domain.*;
|
||||||
|
import io.metersphere.base.mapper.ApiScenarioReportMapper;
|
||||||
import io.metersphere.base.mapper.ApiTestCaseMapper;
|
import io.metersphere.base.mapper.ApiTestCaseMapper;
|
||||||
import io.metersphere.base.mapper.TestPlanApiCaseMapper;
|
import io.metersphere.base.mapper.TestPlanApiCaseMapper;
|
||||||
|
import io.metersphere.base.mapper.TestPlanMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtApiTestCaseMapper;
|
import io.metersphere.base.mapper.ext.ExtApiTestCaseMapper;
|
||||||
import io.metersphere.commons.constants.APITestStatus;
|
import io.metersphere.commons.constants.*;
|
||||||
import io.metersphere.commons.constants.ApiRunMode;
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
import io.metersphere.commons.constants.TriggerMode;
|
|
||||||
import io.metersphere.commons.utils.ServiceUtils;
|
import io.metersphere.commons.utils.ServiceUtils;
|
||||||
import io.metersphere.constants.RunModeConstants;
|
import io.metersphere.constants.RunModeConstants;
|
||||||
import io.metersphere.dto.MsExecResponseDTO;
|
import io.metersphere.dto.MsExecResponseDTO;
|
||||||
|
@ -49,6 +54,12 @@ public class ApiCaseExecuteService {
|
||||||
private EnvironmentGroupProjectService environmentGroupProjectService;
|
private EnvironmentGroupProjectService environmentGroupProjectService;
|
||||||
@Resource
|
@Resource
|
||||||
private ApiCaseResultService apiCaseResultService;
|
private ApiCaseResultService apiCaseResultService;
|
||||||
|
@Resource
|
||||||
|
private ApiScenarioReportService apiScenarioReportService;
|
||||||
|
@Resource
|
||||||
|
private ApiScenarioReportMapper apiScenarioReportMapper;
|
||||||
|
@Resource
|
||||||
|
ApiScenarioReportStructureService apiScenarioReportStructureService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 测试计划case执行
|
* 测试计划case执行
|
||||||
|
@ -80,8 +91,18 @@ public class ApiCaseExecuteService {
|
||||||
Map<String, ApiDefinitionExecResult> executeQueue = new LinkedHashMap<>();
|
Map<String, ApiDefinitionExecResult> executeQueue = new LinkedHashMap<>();
|
||||||
List<MsExecResponseDTO> responseDTOS = new LinkedList<>();
|
List<MsExecResponseDTO> responseDTOS = new LinkedList<>();
|
||||||
String status = request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString()) ? APITestStatus.Waiting.name() : APITestStatus.Running.name();
|
String status = request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString()) ? APITestStatus.Waiting.name() : APITestStatus.Running.name();
|
||||||
|
Map<String, String> planProjects = new HashMap<>();
|
||||||
planApiCases.forEach(testPlanApiCase -> {
|
planApiCases.forEach(testPlanApiCase -> {
|
||||||
ApiDefinitionExecResult report = ApiDefinitionExecResultUtil.addResult(request, testPlanApiCase, status);
|
ApiDefinitionExecResult report = ApiDefinitionExecResultUtil.addResult(request, testPlanApiCase, status);
|
||||||
|
if (planProjects.containsKey(testPlanApiCase.getTestPlanId())) {
|
||||||
|
report.setProjectId(planProjects.get(testPlanApiCase.getTestPlanId()));
|
||||||
|
} else {
|
||||||
|
TestPlan plan = CommonBeanFactory.getBean(TestPlanMapper.class).selectByPrimaryKey(testPlanApiCase.getTestPlanId());
|
||||||
|
if (plan != null) {
|
||||||
|
planProjects.put(plan.getId(), plan.getProjectId());
|
||||||
|
report.setProjectId(plan.getProjectId());
|
||||||
|
}
|
||||||
|
}
|
||||||
executeQueue.put(testPlanApiCase.getId(), report);
|
executeQueue.put(testPlanApiCase.getId(), report);
|
||||||
responseDTOS.add(new MsExecResponseDTO(testPlanApiCase.getId(), report.getId(), request.getTriggerMode()));
|
responseDTOS.add(new MsExecResponseDTO(testPlanApiCase.getId(), report.getId(), request.getTriggerMode()));
|
||||||
});
|
});
|
||||||
|
@ -135,6 +156,26 @@ public class ApiCaseExecuteService {
|
||||||
List<ApiTestCaseWithBLOBs> list = apiTestCaseMapper.selectByExampleWithBLOBs(example);
|
List<ApiTestCaseWithBLOBs> list = apiTestCaseMapper.selectByExampleWithBLOBs(example);
|
||||||
LoggerUtil.debug("查询到执行数据:" + list.size());
|
LoggerUtil.debug("查询到执行数据:" + list.size());
|
||||||
|
|
||||||
|
// 集合报告设置
|
||||||
|
String serialReportId = null;
|
||||||
|
if (StringUtils.equals(request.getConfig().getReportType(), RunModeConstants.SET_REPORT.toString())
|
||||||
|
&& StringUtils.isNotEmpty(request.getConfig().getReportName())) {
|
||||||
|
serialReportId = UUID.randomUUID().toString();
|
||||||
|
APIScenarioReportResult report = apiScenarioReportService.init(request.getConfig().getReportId(), null, request.getConfig().getReportName(),
|
||||||
|
ReportTriggerMode.MANUAL.name(), ExecuteType.Saved.name(), request.getProjectId(),
|
||||||
|
null, request.getConfig());
|
||||||
|
report.setVersionId(list.get(0).getVersionId());
|
||||||
|
report.setName(request.getConfig().getReportName());
|
||||||
|
report.setTestName(request.getConfig().getReportName());
|
||||||
|
report.setId(serialReportId);
|
||||||
|
report.setReportType(ReportTypeConstants.API_INTEGRATED.name());
|
||||||
|
request.getConfig().setAmassReport(serialReportId);
|
||||||
|
report.setStatus(APITestStatus.Running.name());
|
||||||
|
apiScenarioReportMapper.insert(report);
|
||||||
|
|
||||||
|
apiScenarioReportStructureService.save(serialReportId, new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
if (request.getConfig() != null && request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString())) {
|
if (request.getConfig() != null && request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString())) {
|
||||||
if (request.getCondition() == null || !request.getCondition().isSelectAll()) {
|
if (request.getCondition() == null || !request.getCondition().isSelectAll()) {
|
||||||
// 按照id指定顺序排序
|
// 按照id指定顺序排序
|
||||||
|
@ -152,11 +193,15 @@ public class ApiCaseExecuteService {
|
||||||
List<MsExecResponseDTO> responseDTOS = new LinkedList<>();
|
List<MsExecResponseDTO> responseDTOS = new LinkedList<>();
|
||||||
Map<String, ApiDefinitionExecResult> executeQueue = new LinkedHashMap<>();
|
Map<String, ApiDefinitionExecResult> executeQueue = new LinkedHashMap<>();
|
||||||
String status = request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString()) ? APITestStatus.Waiting.name() : APITestStatus.Running.name();
|
String status = request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString()) ? APITestStatus.Waiting.name() : APITestStatus.Running.name();
|
||||||
|
|
||||||
|
String finalSerialReportId = serialReportId;
|
||||||
list.forEach(caseWithBLOBs -> {
|
list.forEach(caseWithBLOBs -> {
|
||||||
ApiDefinitionExecResult report = ApiDefinitionExecResultUtil.initBase(caseWithBLOBs.getId(), APITestStatus.Running.name(), null, request.getConfig());
|
ApiDefinitionExecResult report = ApiDefinitionExecResultUtil.initBase(caseWithBLOBs.getId(), APITestStatus.Running.name(), null, request.getConfig());
|
||||||
report.setStatus(status);
|
report.setStatus(status);
|
||||||
report.setName(caseWithBLOBs.getName());
|
report.setName(caseWithBLOBs.getName());
|
||||||
|
report.setProjectId(caseWithBLOBs.getProjectId());
|
||||||
report.setVersionId(caseWithBLOBs.getVersionId());
|
report.setVersionId(caseWithBLOBs.getVersionId());
|
||||||
|
report.setIntegratedReportId(finalSerialReportId);
|
||||||
executeQueue.put(caseWithBLOBs.getId(), report);
|
executeQueue.put(caseWithBLOBs.getId(), report);
|
||||||
responseDTOS.add(new MsExecResponseDTO(caseWithBLOBs.getId(), report.getId(), request.getTriggerMode()));
|
responseDTOS.add(new MsExecResponseDTO(caseWithBLOBs.getId(), report.getId(), request.getTriggerMode()));
|
||||||
});
|
});
|
||||||
|
@ -165,7 +210,7 @@ public class ApiCaseExecuteService {
|
||||||
|
|
||||||
String reportType = request.getConfig().getReportType();
|
String reportType = request.getConfig().getReportType();
|
||||||
String poolId = request.getConfig().getResourcePoolId();
|
String poolId = request.getConfig().getResourcePoolId();
|
||||||
DBTestQueue deQueue = apiExecutionQueueService.add(executeQueue, poolId, ApiRunMode.DEFINITION.name(), null, reportType, ApiRunMode.DEFINITION.name(), request.getConfig());
|
DBTestQueue deQueue = apiExecutionQueueService.add(executeQueue, poolId, ApiRunMode.DEFINITION.name(), finalSerialReportId, reportType, ApiRunMode.DEFINITION.name(), request.getConfig());
|
||||||
// 开始选择执行模式
|
// 开始选择执行模式
|
||||||
if (request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString())) {
|
if (request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString())) {
|
||||||
LoggerUtil.debug("开始串行执行");
|
LoggerUtil.debug("开始串行执行");
|
||||||
|
|
|
@ -83,6 +83,7 @@ public class ApiExecuteService {
|
||||||
report.setName(caseWithBLOBs.getName());
|
report.setName(caseWithBLOBs.getName());
|
||||||
report.setTriggerMode(ApiRunMode.JENKINS.name());
|
report.setTriggerMode(ApiRunMode.JENKINS.name());
|
||||||
report.setType(ApiRunMode.JENKINS.name());
|
report.setType(ApiRunMode.JENKINS.name());
|
||||||
|
report.setProjectId(caseWithBLOBs.getProjectId());
|
||||||
apiDefinitionExecResultMapper.insert(report);
|
apiDefinitionExecResultMapper.insert(report);
|
||||||
//更新接口案例的最后执行状态等信息
|
//更新接口案例的最后执行状态等信息
|
||||||
caseWithBLOBs.setLastResultId(report.getId());
|
caseWithBLOBs.setLastResultId(report.getId());
|
||||||
|
|
|
@ -25,6 +25,7 @@ import io.metersphere.base.mapper.ext.ExtApiScenarioMapper;
|
||||||
import io.metersphere.commons.constants.APITestStatus;
|
import io.metersphere.commons.constants.APITestStatus;
|
||||||
import io.metersphere.commons.constants.ApiRunMode;
|
import io.metersphere.commons.constants.ApiRunMode;
|
||||||
import io.metersphere.commons.constants.ReportTriggerMode;
|
import io.metersphere.commons.constants.ReportTriggerMode;
|
||||||
|
import io.metersphere.commons.constants.ReportTypeConstants;
|
||||||
import io.metersphere.commons.exception.MSException;
|
import io.metersphere.commons.exception.MSException;
|
||||||
import io.metersphere.commons.utils.FileUtils;
|
import io.metersphere.commons.utils.FileUtils;
|
||||||
import io.metersphere.commons.utils.LogUtil;
|
import io.metersphere.commons.utils.LogUtil;
|
||||||
|
@ -154,6 +155,7 @@ public class ApiScenarioExecuteService {
|
||||||
report.setVersionId(apiScenarios.get(0).getVersionId());
|
report.setVersionId(apiScenarios.get(0).getVersionId());
|
||||||
report.setName(request.getConfig().getReportName());
|
report.setName(request.getConfig().getReportName());
|
||||||
report.setId(serialReportId);
|
report.setId(serialReportId);
|
||||||
|
report.setReportType(ReportTypeConstants.SCENARIO_INTEGRATED.name());
|
||||||
request.getConfig().setAmassReport(serialReportId);
|
request.getConfig().setAmassReport(serialReportId);
|
||||||
report.setStatus(APITestStatus.Running.name());
|
report.setStatus(APITestStatus.Running.name());
|
||||||
apiScenarioReportMapper.insert(report);
|
apiScenarioReportMapper.insert(report);
|
||||||
|
|
|
@ -61,25 +61,28 @@ public class ApiScenarioSerialService {
|
||||||
|
|
||||||
public void serial(ApiExecutionQueue executionQueue, ApiExecutionQueueDetail queue) {
|
public void serial(ApiExecutionQueue executionQueue, ApiExecutionQueueDetail queue) {
|
||||||
LoggerUtil.debug("Scenario run-执行脚本装载-进入串行准备");
|
LoggerUtil.debug("Scenario run-执行脚本装载-进入串行准备");
|
||||||
if (!StringUtils.equals(executionQueue.getReportType(), RunModeConstants.SET_REPORT.toString())) {
|
if (!StringUtils.equals(executionQueue.getReportType(), RunModeConstants.SET_REPORT.toString())
|
||||||
|
|| StringUtils.equalsIgnoreCase(executionQueue.getRunMode(), ApiRunMode.DEFINITION.name())) {
|
||||||
if (StringUtils.equalsAny(executionQueue.getRunMode(), ApiRunMode.SCENARIO.name(), ApiRunMode.SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO.name(), ApiRunMode.JENKINS_SCENARIO_PLAN.name())) {
|
if (StringUtils.equalsAny(executionQueue.getRunMode(), ApiRunMode.SCENARIO.name(), ApiRunMode.SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO.name(), ApiRunMode.JENKINS_SCENARIO_PLAN.name())) {
|
||||||
ApiScenarioReport report = apiScenarioReportMapper.selectByPrimaryKey(queue.getReportId());
|
ApiScenarioReport report = apiScenarioReportMapper.selectByPrimaryKey(queue.getReportId());
|
||||||
report.setStatus(APITestStatus.Running.name());
|
if (report != null) {
|
||||||
report.setCreateTime(System.currentTimeMillis());
|
report.setStatus(APITestStatus.Running.name());
|
||||||
report.setUpdateTime(System.currentTimeMillis());
|
report.setCreateTime(System.currentTimeMillis());
|
||||||
apiScenarioReportMapper.updateByPrimaryKey(report);
|
report.setUpdateTime(System.currentTimeMillis());
|
||||||
|
apiScenarioReportMapper.updateByPrimaryKey(report);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ApiDefinitionExecResult execResult = apiDefinitionExecResultMapper.selectByPrimaryKey(queue.getReportId());
|
ApiDefinitionExecResult execResult = apiDefinitionExecResultMapper.selectByPrimaryKey(queue.getReportId());
|
||||||
if (execResult != null) {
|
if (execResult != null) {
|
||||||
execResult.setStatus(APITestStatus.Running.name());
|
execResult.setStatus(APITestStatus.Running.name());
|
||||||
apiDefinitionExecResultMapper.updateByPrimaryKey(execResult);
|
apiDefinitionExecResultMapper.updateByPrimaryKeySelective(execResult);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LoggerUtil.info("Scenario run-开始执行,队列ID:【 " + executionQueue.getReportId() + " 】");
|
LoggerUtil.info("Scenario run-开始执行,队列ID:【 " + executionQueue.getReportId() + " 】");
|
||||||
String reportId = StringUtils.isNotEmpty(executionQueue.getReportId()) ? executionQueue.getReportId() : queue.getReportId();
|
String reportId = StringUtils.isNotEmpty(executionQueue.getReportId()) ? executionQueue.getReportId() : queue.getReportId();
|
||||||
if (!StringUtils.equals(executionQueue.getRunMode(), ApiRunMode.SCENARIO.name())) {
|
if (!StringUtils.equalsAny(executionQueue.getRunMode(), ApiRunMode.SCENARIO.name())) {
|
||||||
reportId = queue.getReportId();
|
reportId = queue.getReportId();
|
||||||
}
|
}
|
||||||
HashTree hashTree = null;
|
HashTree hashTree = null;
|
||||||
|
|
|
@ -48,6 +48,7 @@ public class ApiDefinitionExecResultUtil {
|
||||||
ApiTestCaseWithBLOBs caseWithBLOBs = CommonBeanFactory.getBean(ApiTestCaseMapper.class).selectByPrimaryKey(key.getApiCaseId());
|
ApiTestCaseWithBLOBs caseWithBLOBs = CommonBeanFactory.getBean(ApiTestCaseMapper.class).selectByPrimaryKey(key.getApiCaseId());
|
||||||
if (caseWithBLOBs != null) {
|
if (caseWithBLOBs != null) {
|
||||||
apiResult.setName(caseWithBLOBs.getName());
|
apiResult.setName(caseWithBLOBs.getName());
|
||||||
|
apiResult.setProjectId(caseWithBLOBs.getProjectId());
|
||||||
}
|
}
|
||||||
apiResult.setTriggerMode(request.getTriggerMode());
|
apiResult.setTriggerMode(request.getTriggerMode());
|
||||||
apiResult.setActuator("LOCAL");
|
apiResult.setActuator("LOCAL");
|
||||||
|
|
|
@ -10,6 +10,7 @@ import io.metersphere.commons.exception.MSException;
|
||||||
import io.metersphere.commons.utils.CommonBeanFactory;
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
import io.metersphere.config.JmeterProperties;
|
import io.metersphere.config.JmeterProperties;
|
||||||
import io.metersphere.config.KafkaConfig;
|
import io.metersphere.config.KafkaConfig;
|
||||||
|
import io.metersphere.constants.RunModeConstants;
|
||||||
import io.metersphere.dto.*;
|
import io.metersphere.dto.*;
|
||||||
import io.metersphere.jmeter.JMeterBase;
|
import io.metersphere.jmeter.JMeterBase;
|
||||||
import io.metersphere.jmeter.LocalRunner;
|
import io.metersphere.jmeter.LocalRunner;
|
||||||
|
@ -79,7 +80,11 @@ public class JMeterService {
|
||||||
if (!FixedCapacityUtils.jmeterLogTask.containsKey(request.getReportId())) {
|
if (!FixedCapacityUtils.jmeterLogTask.containsKey(request.getReportId())) {
|
||||||
FixedCapacityUtils.jmeterLogTask.put(request.getReportId(), System.currentTimeMillis());
|
FixedCapacityUtils.jmeterLogTask.put(request.getReportId(), System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
|
if (StringUtils.isNotEmpty(request.getTestPlanReportId())
|
||||||
|
&& !FixedCapacityUtils.jmeterLogTask.containsKey(request.getTestPlanReportId())
|
||||||
|
&& StringUtils.equals(request.getReportType(), RunModeConstants.SET_REPORT.toString())) {
|
||||||
|
FixedCapacityUtils.jmeterLogTask.put(request.getTestPlanReportId(), System.currentTimeMillis());
|
||||||
|
}
|
||||||
LoggerUtil.debug("监听MessageCache.tasks当前容量:" + FixedCapacityUtils.jmeterLogTask.size());
|
LoggerUtil.debug("监听MessageCache.tasks当前容量:" + FixedCapacityUtils.jmeterLogTask.size());
|
||||||
if (request.isDebug() && !StringUtils.equalsAny(request.getRunMode(), ApiRunMode.DEFINITION.name())) {
|
if (request.isDebug() && !StringUtils.equalsAny(request.getRunMode(), ApiRunMode.DEFINITION.name())) {
|
||||||
LoggerUtil.debug("为请求 [ " + request.getReportId() + " ] 添加同步接收结果 Listener");
|
LoggerUtil.debug("为请求 [ " + request.getReportId() + " ] 添加同步接收结果 Listener");
|
||||||
|
|
|
@ -136,6 +136,7 @@ public class ApiDefinitionExecResultService {
|
||||||
public void editStatus(ApiDefinitionExecResult saveResult, String type, String status, Long time, String reportId, String testId) {
|
public void editStatus(ApiDefinitionExecResult saveResult, String type, String status, Long time, String reportId, String testId) {
|
||||||
String name = testId;
|
String name = testId;
|
||||||
String version = "";
|
String version = "";
|
||||||
|
String projectId = "";
|
||||||
if (StringUtils.equalsAnyIgnoreCase(type, ApiRunMode.API_PLAN.name(), ApiRunMode.SCHEDULE_API_PLAN.name(), ApiRunMode.JENKINS_API_PLAN.name(), ApiRunMode.MANUAL_PLAN.name())) {
|
if (StringUtils.equalsAnyIgnoreCase(type, ApiRunMode.API_PLAN.name(), ApiRunMode.SCHEDULE_API_PLAN.name(), ApiRunMode.JENKINS_API_PLAN.name(), ApiRunMode.MANUAL_PLAN.name())) {
|
||||||
TestPlanApiCase testPlanApiCase = testPlanApiCaseMapper.selectByPrimaryKey(testId);
|
TestPlanApiCase testPlanApiCase = testPlanApiCaseMapper.selectByPrimaryKey(testId);
|
||||||
ApiTestCaseWithBLOBs caseWithBLOBs = null;
|
ApiTestCaseWithBLOBs caseWithBLOBs = null;
|
||||||
|
@ -164,11 +165,13 @@ public class ApiDefinitionExecResultService {
|
||||||
if (caseWithBLOBs != null) {
|
if (caseWithBLOBs != null) {
|
||||||
name = caseWithBLOBs.getName();
|
name = caseWithBLOBs.getName();
|
||||||
version = caseWithBLOBs.getVersionId();
|
version = caseWithBLOBs.getVersionId();
|
||||||
|
projectId = caseWithBLOBs.getProjectId();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ApiDefinition apiDefinition = apiDefinitionMapper.selectByPrimaryKey(testId);
|
ApiDefinition apiDefinition = apiDefinitionMapper.selectByPrimaryKey(testId);
|
||||||
if (apiDefinition != null) {
|
if (apiDefinition != null) {
|
||||||
name = apiDefinition.getName();
|
name = apiDefinition.getName();
|
||||||
|
projectId = apiDefinition.getProjectId();
|
||||||
} else {
|
} else {
|
||||||
ApiTestCaseWithBLOBs caseWithBLOBs = apiTestCaseMapper.selectByPrimaryKey(testId);
|
ApiTestCaseWithBLOBs caseWithBLOBs = apiTestCaseMapper.selectByPrimaryKey(testId);
|
||||||
if (caseWithBLOBs != null) {
|
if (caseWithBLOBs != null) {
|
||||||
|
@ -183,9 +186,13 @@ public class ApiDefinitionExecResultService {
|
||||||
}
|
}
|
||||||
name = caseWithBLOBs.getName();
|
name = caseWithBLOBs.getName();
|
||||||
version = caseWithBLOBs.getVersionId();
|
version = caseWithBLOBs.getVersionId();
|
||||||
|
projectId = caseWithBLOBs.getProjectId();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (StringUtils.isEmpty(saveResult.getProjectId()) && StringUtils.isNotEmpty(projectId)) {
|
||||||
|
saveResult.setProjectId(projectId);
|
||||||
|
}
|
||||||
saveResult.setVersionId(version);
|
saveResult.setVersionId(version);
|
||||||
saveResult.setName(name);
|
saveResult.setName(name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1040,6 +1040,7 @@ public class ApiDefinitionService {
|
||||||
CollectionUtils.isNotEmpty(request.getTestElement().getHashTree().get(0).getHashTree()) ?
|
CollectionUtils.isNotEmpty(request.getTestElement().getHashTree().get(0).getHashTree()) ?
|
||||||
request.getTestElement().getHashTree().get(0).getHashTree().get(0).getName() : request.getId();
|
request.getTestElement().getHashTree().get(0).getHashTree().get(0).getName() : request.getId();
|
||||||
ApiDefinitionExecResult result = ApiDefinitionExecResultUtil.add(testId, APITestStatus.Running.name(), request.getId());
|
ApiDefinitionExecResult result = ApiDefinitionExecResultUtil.add(testId, APITestStatus.Running.name(), request.getId());
|
||||||
|
result.setProjectId(request.getProjectId());
|
||||||
result.setTriggerMode(TriggerMode.MANUAL.name());
|
result.setTriggerMode(TriggerMode.MANUAL.name());
|
||||||
apiDefinitionExecResultMapper.insert(result);
|
apiDefinitionExecResultMapper.insert(result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,7 +237,11 @@ public class ApiExecutionQueueService {
|
||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
queueMapper.deleteByPrimaryKey(dto.getQueueId());
|
queueMapper.deleteByPrimaryKey(dto.getQueueId());
|
||||||
if (StringUtils.equals(dto.getReportType(), RunModeConstants.SET_REPORT.toString())) {
|
if (StringUtils.equals(dto.getReportType(), RunModeConstants.SET_REPORT.toString())) {
|
||||||
apiScenarioReportService.margeReport(dto.getReportId());
|
String reportId = dto.getReportId();
|
||||||
|
if (StringUtils.equalsIgnoreCase(dto.getRunMode(), ApiRunMode.DEFINITION.name())) {
|
||||||
|
reportId = dto.getTestPlanReportId();
|
||||||
|
}
|
||||||
|
apiScenarioReportService.margeReport(reportId, dto.getRunMode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -259,7 +263,11 @@ public class ApiExecutionQueueService {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (StringUtils.equals(dto.getReportType(), RunModeConstants.SET_REPORT.toString())) {
|
if (StringUtils.equals(dto.getReportType(), RunModeConstants.SET_REPORT.toString())) {
|
||||||
apiScenarioReportService.margeReport(dto.getReportId());
|
String reportId = dto.getReportId();
|
||||||
|
if (StringUtils.equalsIgnoreCase(dto.getRunMode(), ApiRunMode.DEFINITION.name())) {
|
||||||
|
reportId = dto.getTestPlanReportId();
|
||||||
|
}
|
||||||
|
apiScenarioReportService.margeReport(reportId, dto.getRunMode());
|
||||||
}
|
}
|
||||||
queueMapper.deleteByPrimaryKey(dto.getQueueId());
|
queueMapper.deleteByPrimaryKey(dto.getQueueId());
|
||||||
LoggerUtil.info("Queue execution ends:" + dto.getQueueId());
|
LoggerUtil.info("Queue execution ends:" + dto.getQueueId());
|
||||||
|
|
|
@ -32,7 +32,6 @@ import io.metersphere.utils.LoggerUtil;
|
||||||
import org.apache.commons.beanutils.BeanMap;
|
import org.apache.commons.beanutils.BeanMap;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.ibatis.session.SqlSessionFactory;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -78,7 +77,7 @@ public class ApiScenarioReportService {
|
||||||
@Resource
|
@Resource
|
||||||
private ApiScenarioReportStructureMapper apiScenarioReportStructureMapper;
|
private ApiScenarioReportStructureMapper apiScenarioReportStructureMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private SqlSessionFactory sqlSessionFactory;
|
private ApiDefinitionExecResultMapper definitionExecResultMapper;
|
||||||
|
|
||||||
public void saveResult(List<RequestResult> requestResults, ResultDTO dto) {
|
public void saveResult(List<RequestResult> requestResults, ResultDTO dto) {
|
||||||
// 报告详情内容
|
// 报告详情内容
|
||||||
|
@ -118,7 +117,7 @@ public class ApiScenarioReportService {
|
||||||
APIScenarioReportResult reportResult = extApiScenarioReportMapper.get(reportId);
|
APIScenarioReportResult reportResult = extApiScenarioReportMapper.get(reportId);
|
||||||
if (reportResult != null) {
|
if (reportResult != null) {
|
||||||
if (reportResult.getReportVersion() != null && reportResult.getReportVersion() > 1) {
|
if (reportResult.getReportVersion() != null && reportResult.getReportVersion() > 1) {
|
||||||
reportResult.setContent(JSON.toJSONString(apiScenarioReportStructureService.getReport(reportId)));
|
reportResult.setContent(JSON.toJSONString(apiScenarioReportStructureService.assembleReport(reportId)));
|
||||||
} else {
|
} else {
|
||||||
ApiScenarioReportDetail detail = apiScenarioReportDetailMapper.selectByPrimaryKey(reportId);
|
ApiScenarioReportDetail detail = apiScenarioReportDetailMapper.selectByPrimaryKey(reportId);
|
||||||
if (detail != null && reportResult != null) {
|
if (detail != null && reportResult != null) {
|
||||||
|
@ -319,17 +318,25 @@ public class ApiScenarioReportService {
|
||||||
return report;
|
return report;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void margeReport(String reportId) {
|
public void margeReport(String reportId, String runMode) {
|
||||||
ApiScenarioReport report = apiScenarioReportMapper.selectByPrimaryKey(reportId);
|
ApiScenarioReport report = apiScenarioReportMapper.selectByPrimaryKey(reportId);
|
||||||
if (report != null) {
|
if (report != null) {
|
||||||
// 更新场景状态
|
// 更新场景状态
|
||||||
ApiScenarioReportResultExample example = new ApiScenarioReportResultExample();
|
if (StringUtils.equalsIgnoreCase(runMode, ApiRunMode.DEFINITION.name())) {
|
||||||
example.createCriteria().andReportIdEqualTo(reportId).andStatusEqualTo(ScenarioStatus.Error.name());
|
ApiDefinitionExecResultExample execResultExample = new ApiDefinitionExecResultExample();
|
||||||
long size = apiScenarioReportResultMapper.countByExample(example);
|
execResultExample.createCriteria().andIntegratedReportIdEqualTo(reportId).andStatusEqualTo("Error");
|
||||||
report.setStatus(size > 0 ? ScenarioStatus.Error.name() : ScenarioStatus.Success.name());
|
long size = definitionExecResultMapper.countByExample(execResultExample);
|
||||||
report.setEndTime(System.currentTimeMillis());
|
report.setStatus(size > 0 ? ScenarioStatus.Error.name() : ScenarioStatus.Success.name());
|
||||||
|
} else {
|
||||||
|
ApiScenarioReportResultExample example = new ApiScenarioReportResultExample();
|
||||||
|
example.createCriteria().andReportIdEqualTo(reportId).andStatusEqualTo(ScenarioStatus.Error.name());
|
||||||
|
long size = apiScenarioReportResultMapper.countByExample(example);
|
||||||
|
report.setStatus(size > 0 ? ScenarioStatus.Error.name() : ScenarioStatus.Success.name());
|
||||||
|
}
|
||||||
// 更新控制台信息
|
// 更新控制台信息
|
||||||
apiScenarioReportStructureService.update(reportId, FixedCapacityUtils.getJmeterLogger(reportId));
|
apiScenarioReportStructureService.update(reportId, FixedCapacityUtils.getJmeterLogger(reportId));
|
||||||
|
|
||||||
|
report.setEndTime(System.currentTimeMillis());
|
||||||
// 更新报告
|
// 更新报告
|
||||||
apiScenarioReportMapper.updateByPrimaryKey(report);
|
apiScenarioReportMapper.updateByPrimaryKey(report);
|
||||||
}
|
}
|
||||||
|
@ -695,6 +702,7 @@ public class ApiScenarioReportService {
|
||||||
report.setProjectId(projectId);
|
report.setProjectId(projectId);
|
||||||
report.setScenarioName(scenarioName);
|
report.setScenarioName(scenarioName);
|
||||||
report.setScenarioId(scenarioId);
|
report.setScenarioId(scenarioId);
|
||||||
|
report.setReportType(ReportTypeConstants.SCENARIO_INDEPENDENT.name());
|
||||||
return report;
|
return report;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -753,11 +761,19 @@ public class ApiScenarioReportService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reName(QueryAPIReportRequest reportRequest) {
|
public void reName(ApiScenarioReport reportRequest) {
|
||||||
ApiScenarioReport apiTestReport = apiScenarioReportMapper.selectByPrimaryKey(reportRequest.getId());
|
if (StringUtils.equalsIgnoreCase(reportRequest.getReportType(), ReportTypeConstants.API_INDEPENDENT.name())) {
|
||||||
if (apiTestReport != null) {
|
ApiDefinitionExecResult result = definitionExecResultMapper.selectByPrimaryKey(reportRequest.getId());
|
||||||
apiTestReport.setName(reportRequest.getName());
|
if (result != null) {
|
||||||
apiScenarioReportMapper.updateByPrimaryKey(apiTestReport);
|
result.setName(reportRequest.getName());
|
||||||
|
definitionExecResultMapper.updateByPrimaryKeySelective(result);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ApiScenarioReport apiTestReport = apiScenarioReportMapper.selectByPrimaryKey(reportRequest.getId());
|
||||||
|
if (apiTestReport != null) {
|
||||||
|
apiTestReport.setName(reportRequest.getName());
|
||||||
|
apiScenarioReportMapper.updateByPrimaryKey(apiTestReport);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,11 +6,12 @@ import com.alibaba.fastjson.JSONObject;
|
||||||
import io.metersphere.api.dto.ApiScenarioReportDTO;
|
import io.metersphere.api.dto.ApiScenarioReportDTO;
|
||||||
import io.metersphere.api.dto.RequestResultExpandDTO;
|
import io.metersphere.api.dto.RequestResultExpandDTO;
|
||||||
import io.metersphere.api.dto.StepTreeDTO;
|
import io.metersphere.api.dto.StepTreeDTO;
|
||||||
|
import io.metersphere.api.service.vo.ApiDefinitionExecResultVo;
|
||||||
import io.metersphere.base.domain.*;
|
import io.metersphere.base.domain.*;
|
||||||
import io.metersphere.base.mapper.ApiScenarioMapper;
|
import io.metersphere.base.mapper.*;
|
||||||
import io.metersphere.base.mapper.ApiScenarioReportResultMapper;
|
|
||||||
import io.metersphere.base.mapper.ApiScenarioReportStructureMapper;
|
|
||||||
import io.metersphere.commons.constants.MsTestElementConstants;
|
import io.metersphere.commons.constants.MsTestElementConstants;
|
||||||
|
import io.metersphere.commons.constants.ReportTypeConstants;
|
||||||
|
import io.metersphere.commons.utils.BeanUtils;
|
||||||
import io.metersphere.commons.utils.CommonBeanFactory;
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
import io.metersphere.constants.RunModeConstants;
|
import io.metersphere.constants.RunModeConstants;
|
||||||
import io.metersphere.dto.RequestResult;
|
import io.metersphere.dto.RequestResult;
|
||||||
|
@ -34,6 +35,10 @@ public class ApiScenarioReportStructureService {
|
||||||
private ApiScenarioReportStructureMapper mapper;
|
private ApiScenarioReportStructureMapper mapper;
|
||||||
@Resource
|
@Resource
|
||||||
private ApiScenarioReportResultMapper reportResultMapper;
|
private ApiScenarioReportResultMapper reportResultMapper;
|
||||||
|
@Resource
|
||||||
|
private ApiScenarioReportMapper scenarioReportMapper;
|
||||||
|
@Resource
|
||||||
|
private ApiDefinitionExecResultMapper definitionExecResultMapper;
|
||||||
|
|
||||||
private static final List<String> requests = Arrays.asList("HTTPSamplerProxy", "DubboSampler", "JDBCSampler", "TCPSampler", "JSR223Processor", "AbstractSampler");
|
private static final List<String> requests = Arrays.asList("HTTPSamplerProxy", "DubboSampler", "JDBCSampler", "TCPSampler", "JSR223Processor", "AbstractSampler");
|
||||||
|
|
||||||
|
@ -56,7 +61,7 @@ public class ApiScenarioReportStructureService {
|
||||||
this.save(reportId, dtoList);
|
this.save(reportId, dtoList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void save(String reportId, List<StepTreeDTO> dtoList) {
|
public void save(String reportId, List<StepTreeDTO> dtoList) {
|
||||||
ApiScenarioReportStructureWithBLOBs structure = new ApiScenarioReportStructureWithBLOBs();
|
ApiScenarioReportStructureWithBLOBs structure = new ApiScenarioReportStructureWithBLOBs();
|
||||||
structure.setId(UUID.randomUUID().toString());
|
structure.setId(UUID.randomUUID().toString());
|
||||||
structure.setCreateTime(System.currentTimeMillis());
|
structure.setCreateTime(System.currentTimeMillis());
|
||||||
|
@ -271,7 +276,90 @@ public class ApiScenarioReportStructureService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ApiScenarioReportDTO getReport(String reportId) {
|
private List<ApiDefinitionExecResultVo> formatApiReport(String reportId, List<StepTreeDTO> stepList) {
|
||||||
|
ApiDefinitionExecResultExample example = new ApiDefinitionExecResultExample();
|
||||||
|
example.createCriteria().andIntegratedReportIdEqualTo(reportId);
|
||||||
|
List<ApiDefinitionExecResult> reportResults = definitionExecResultMapper.selectByExampleWithBLOBs(example);
|
||||||
|
List<ApiDefinitionExecResultVo> resultVos = new LinkedList<>();
|
||||||
|
for (int i = 0; i < reportResults.size(); i++) {
|
||||||
|
ApiDefinitionExecResult item = reportResults.get(i);
|
||||||
|
if (StringUtils.equalsIgnoreCase(item.getErrorCode(), "null")) {
|
||||||
|
item.setErrorCode(null);
|
||||||
|
}
|
||||||
|
ApiDefinitionExecResultVo vo = new ApiDefinitionExecResultVo();
|
||||||
|
BeanUtils.copyBean(vo, item);
|
||||||
|
if (StringUtils.isNotEmpty(item.getContent())) {
|
||||||
|
vo.setRequestResult(JSON.parseObject(item.getContent(), RequestResult.class));
|
||||||
|
if (vo.getRequestResult() != null) {
|
||||||
|
vo.setPassAssertions(vo.getRequestResult().getPassAssertions());
|
||||||
|
vo.setTotalAssertions(vo.getRequestResult().getTotalAssertions());
|
||||||
|
vo.getRequestResult().setName(item.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (vo.getRequestResult() == null) {
|
||||||
|
RequestResult requestResult = new RequestResult();
|
||||||
|
BeanUtils.copyBean(requestResult, item);
|
||||||
|
vo.setRequestResult(requestResult);
|
||||||
|
}
|
||||||
|
StepTreeDTO treeDTO = new StepTreeDTO(item.getName(), item.getResourceId(), "API", (i + 1));
|
||||||
|
treeDTO.setValue(vo.getRequestResult());
|
||||||
|
stepList.add(treeDTO);
|
||||||
|
resultVos.add(vo);
|
||||||
|
}
|
||||||
|
return resultVos;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ApiScenarioReportDTO apiIntegratedReport(String reportId) {
|
||||||
|
List<StepTreeDTO> stepList = new LinkedList<>();
|
||||||
|
List<ApiDefinitionExecResultVo> reportResults = this.formatApiReport(reportId, stepList);
|
||||||
|
ApiScenarioReportDTO reportDTO = new ApiScenarioReportDTO();
|
||||||
|
// 组装报告
|
||||||
|
if (CollectionUtils.isNotEmpty(reportResults)) {
|
||||||
|
reportDTO.setTotal(reportResults.size());
|
||||||
|
reportDTO.setError(reportResults.stream().filter(e -> StringUtils.equalsIgnoreCase(e.getStatus(), "Error")).collect(Collectors.toList()).size());
|
||||||
|
reportDTO.setErrorCode(reportResults.stream().filter(e -> StringUtils.isNotEmpty(e.getErrorCode())).collect(Collectors.toList()).size());
|
||||||
|
reportDTO.setPassAssertions(reportResults.stream().mapToLong(ApiDefinitionExecResultVo::getPassAssertions).sum());
|
||||||
|
reportDTO.setTotalAssertions(reportResults.stream().mapToLong(ApiDefinitionExecResultVo::getTotalAssertions).sum());
|
||||||
|
|
||||||
|
// 统计场景数据
|
||||||
|
AtomicLong totalScenario = new AtomicLong();
|
||||||
|
AtomicLong scenarioError = new AtomicLong();
|
||||||
|
AtomicLong totalTime = new AtomicLong();
|
||||||
|
AtomicLong errorReport = new AtomicLong();
|
||||||
|
|
||||||
|
calculate(stepList, totalScenario, scenarioError, totalTime, errorReport, true);
|
||||||
|
reportDTO.setTotalTime(totalTime.longValue());
|
||||||
|
reportDTO.setScenarioTotal(totalScenario.longValue());
|
||||||
|
reportDTO.setScenarioError(scenarioError.longValue());
|
||||||
|
reportDTO.setScenarioErrorReport(errorReport.longValue());
|
||||||
|
//统计步骤数据
|
||||||
|
reportDTO.setScenarioStepSuccess((reportResults.size() - reportDTO.getError()));
|
||||||
|
reportDTO.setScenarioStepTotal(reportResults.size());
|
||||||
|
reportDTO.setScenarioStepError(reportDTO.getError());
|
||||||
|
reportDTO.setScenarioStepErrorReport(0);
|
||||||
|
|
||||||
|
ApiScenarioReportStructureExample structureExample = new ApiScenarioReportStructureExample();
|
||||||
|
structureExample.createCriteria().andReportIdEqualTo(reportId);
|
||||||
|
List<ApiScenarioReportStructureWithBLOBs> reportStructureWithBLOBs = mapper.selectByExampleWithBLOBs(structureExample);
|
||||||
|
if (CollectionUtils.isNotEmpty(reportStructureWithBLOBs)) {
|
||||||
|
reportDTO.setConsole(reportStructureWithBLOBs.get(0).getConsole());
|
||||||
|
}
|
||||||
|
reportDTO.setSteps(stepList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return reportDTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ApiScenarioReportDTO assembleReport(String reportId) {
|
||||||
|
ApiScenarioReport report = scenarioReportMapper.selectByPrimaryKey(reportId);
|
||||||
|
if (report != null && report.getReportType().equals(ReportTypeConstants.API_INTEGRATED.name())) {
|
||||||
|
return this.apiIntegratedReport(reportId);
|
||||||
|
} else {
|
||||||
|
return this.getReport(reportId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ApiScenarioReportDTO getReport(String reportId) {
|
||||||
ApiScenarioReportResultExample example = new ApiScenarioReportResultExample();
|
ApiScenarioReportResultExample example = new ApiScenarioReportResultExample();
|
||||||
example.createCriteria().andReportIdEqualTo(reportId);
|
example.createCriteria().andReportIdEqualTo(reportId);
|
||||||
List<ApiScenarioReportResult> reportResults = reportResultMapper.selectByExampleWithBLOBs(example);
|
List<ApiScenarioReportResult> reportResults = reportResultMapper.selectByExampleWithBLOBs(example);
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
package io.metersphere.api.service.vo;
|
||||||
|
|
||||||
|
import io.metersphere.dto.RequestResult;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ApiDefinitionExecResultVo {
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String resourceId;
|
||||||
|
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
private Long startTime;
|
||||||
|
|
||||||
|
private Long endTime;
|
||||||
|
|
||||||
|
private Long createTime;
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
private String actuator;
|
||||||
|
|
||||||
|
private String triggerMode;
|
||||||
|
|
||||||
|
private String errorCode;
|
||||||
|
|
||||||
|
private String versionId;
|
||||||
|
|
||||||
|
private String projectId;
|
||||||
|
|
||||||
|
private String integratedReportId;
|
||||||
|
|
||||||
|
private long totalAssertions = 0;
|
||||||
|
|
||||||
|
private long passAssertions = 0;
|
||||||
|
|
||||||
|
private RequestResult requestResult;
|
||||||
|
}
|
|
@ -1,8 +1,9 @@
|
||||||
package io.metersphere.base.domain;
|
package io.metersphere.base.domain;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ApiDefinitionExecResult implements Serializable {
|
public class ApiDefinitionExecResult implements Serializable {
|
||||||
private String id;
|
private String id;
|
||||||
|
@ -27,9 +28,13 @@ public class ApiDefinitionExecResult implements Serializable {
|
||||||
|
|
||||||
private String triggerMode;
|
private String triggerMode;
|
||||||
|
|
||||||
|
private String errorCode;
|
||||||
|
|
||||||
private String versionId;
|
private String versionId;
|
||||||
|
|
||||||
private String errorCode;
|
private String projectId;
|
||||||
|
|
||||||
|
private String integratedReportId;
|
||||||
|
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
|
|
|
@ -844,6 +844,76 @@ public class ApiDefinitionExecResultExample {
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeIsNull() {
|
||||||
|
addCriterion("error_code is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeIsNotNull() {
|
||||||
|
addCriterion("error_code is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeEqualTo(String value) {
|
||||||
|
addCriterion("error_code =", value, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeNotEqualTo(String value) {
|
||||||
|
addCriterion("error_code <>", value, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeGreaterThan(String value) {
|
||||||
|
addCriterion("error_code >", value, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeGreaterThanOrEqualTo(String value) {
|
||||||
|
addCriterion("error_code >=", value, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeLessThan(String value) {
|
||||||
|
addCriterion("error_code <", value, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeLessThanOrEqualTo(String value) {
|
||||||
|
addCriterion("error_code <=", value, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeLike(String value) {
|
||||||
|
addCriterion("error_code like", value, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeNotLike(String value) {
|
||||||
|
addCriterion("error_code not like", value, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeIn(List<String> values) {
|
||||||
|
addCriterion("error_code in", values, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeNotIn(List<String> values) {
|
||||||
|
addCriterion("error_code not in", values, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeBetween(String value1, String value2) {
|
||||||
|
addCriterion("error_code between", value1, value2, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andErrorCodeNotBetween(String value1, String value2) {
|
||||||
|
addCriterion("error_code not between", value1, value2, "errorCode");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
public Criteria andVersionIdIsNull() {
|
public Criteria andVersionIdIsNull() {
|
||||||
addCriterion("version_id is null");
|
addCriterion("version_id is null");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
|
@ -914,73 +984,143 @@ public class ApiDefinitionExecResultExample {
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeIsNull() {
|
public Criteria andProjectIdIsNull() {
|
||||||
addCriterion("error_code is null");
|
addCriterion("project_id is null");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeIsNotNull() {
|
public Criteria andProjectIdIsNotNull() {
|
||||||
addCriterion("error_code is not null");
|
addCriterion("project_id is not null");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeEqualTo(String value) {
|
public Criteria andProjectIdEqualTo(String value) {
|
||||||
addCriterion("error_code =", value, "errorCode");
|
addCriterion("project_id =", value, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeNotEqualTo(String value) {
|
public Criteria andProjectIdNotEqualTo(String value) {
|
||||||
addCriterion("error_code <>", value, "errorCode");
|
addCriterion("project_id <>", value, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeGreaterThan(String value) {
|
public Criteria andProjectIdGreaterThan(String value) {
|
||||||
addCriterion("error_code >", value, "errorCode");
|
addCriterion("project_id >", value, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeGreaterThanOrEqualTo(String value) {
|
public Criteria andProjectIdGreaterThanOrEqualTo(String value) {
|
||||||
addCriterion("error_code >=", value, "errorCode");
|
addCriterion("project_id >=", value, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeLessThan(String value) {
|
public Criteria andProjectIdLessThan(String value) {
|
||||||
addCriterion("error_code <", value, "errorCode");
|
addCriterion("project_id <", value, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeLessThanOrEqualTo(String value) {
|
public Criteria andProjectIdLessThanOrEqualTo(String value) {
|
||||||
addCriterion("error_code <=", value, "errorCode");
|
addCriterion("project_id <=", value, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeLike(String value) {
|
public Criteria andProjectIdLike(String value) {
|
||||||
addCriterion("error_code like", value, "errorCode");
|
addCriterion("project_id like", value, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeNotLike(String value) {
|
public Criteria andProjectIdNotLike(String value) {
|
||||||
addCriterion("error_code not like", value, "errorCode");
|
addCriterion("project_id not like", value, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeIn(List<String> values) {
|
public Criteria andProjectIdIn(List<String> values) {
|
||||||
addCriterion("error_code in", values, "errorCode");
|
addCriterion("project_id in", values, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeNotIn(List<String> values) {
|
public Criteria andProjectIdNotIn(List<String> values) {
|
||||||
addCriterion("error_code not in", values, "errorCode");
|
addCriterion("project_id not in", values, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeBetween(String value1, String value2) {
|
public Criteria andProjectIdBetween(String value1, String value2) {
|
||||||
addCriterion("error_code between", value1, value2, "errorCode");
|
addCriterion("project_id between", value1, value2, "projectId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Criteria andErrorCodeNotBetween(String value1, String value2) {
|
public Criteria andProjectIdNotBetween(String value1, String value2) {
|
||||||
addCriterion("error_code not between", value1, value2, "errorCode");
|
addCriterion("project_id not between", value1, value2, "projectId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdIsNull() {
|
||||||
|
addCriterion("integrated_report_id is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdIsNotNull() {
|
||||||
|
addCriterion("integrated_report_id is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdEqualTo(String value) {
|
||||||
|
addCriterion("integrated_report_id =", value, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdNotEqualTo(String value) {
|
||||||
|
addCriterion("integrated_report_id <>", value, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdGreaterThan(String value) {
|
||||||
|
addCriterion("integrated_report_id >", value, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdGreaterThanOrEqualTo(String value) {
|
||||||
|
addCriterion("integrated_report_id >=", value, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdLessThan(String value) {
|
||||||
|
addCriterion("integrated_report_id <", value, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdLessThanOrEqualTo(String value) {
|
||||||
|
addCriterion("integrated_report_id <=", value, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdLike(String value) {
|
||||||
|
addCriterion("integrated_report_id like", value, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdNotLike(String value) {
|
||||||
|
addCriterion("integrated_report_id not like", value, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdIn(List<String> values) {
|
||||||
|
addCriterion("integrated_report_id in", values, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdNotIn(List<String> values) {
|
||||||
|
addCriterion("integrated_report_id not in", values, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdBetween(String value1, String value2) {
|
||||||
|
addCriterion("integrated_report_id between", value1, value2, "integratedReportId");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andIntegratedReportIdNotBetween(String value1, String value2) {
|
||||||
|
addCriterion("integrated_report_id not between", value1, value2, "integratedReportId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,8 @@ public class ApiScenarioReport implements Serializable {
|
||||||
|
|
||||||
private String versionId;
|
private String versionId;
|
||||||
|
|
||||||
|
private String reportType;
|
||||||
|
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
|
@ -1183,6 +1183,76 @@ public class ApiScenarioReportExample {
|
||||||
addCriterion("version_id not between", value1, value2, "versionId");
|
addCriterion("version_id not between", value1, value2, "versionId");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeIsNull() {
|
||||||
|
addCriterion("report_type is null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeIsNotNull() {
|
||||||
|
addCriterion("report_type is not null");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeEqualTo(String value) {
|
||||||
|
addCriterion("report_type =", value, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeNotEqualTo(String value) {
|
||||||
|
addCriterion("report_type <>", value, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeGreaterThan(String value) {
|
||||||
|
addCriterion("report_type >", value, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeGreaterThanOrEqualTo(String value) {
|
||||||
|
addCriterion("report_type >=", value, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeLessThan(String value) {
|
||||||
|
addCriterion("report_type <", value, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeLessThanOrEqualTo(String value) {
|
||||||
|
addCriterion("report_type <=", value, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeLike(String value) {
|
||||||
|
addCriterion("report_type like", value, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeNotLike(String value) {
|
||||||
|
addCriterion("report_type not like", value, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeIn(List<String> values) {
|
||||||
|
addCriterion("report_type in", values, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeNotIn(List<String> values) {
|
||||||
|
addCriterion("report_type not in", values, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeBetween(String value1, String value2) {
|
||||||
|
addCriterion("report_type between", value1, value2, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Criteria andReportTypeNotBetween(String value1, String value2) {
|
||||||
|
addCriterion("report_type not between", value1, value2, "reportType");
|
||||||
|
return (Criteria) this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Criteria extends GeneratedCriteria {
|
public static class Criteria extends GeneratedCriteria {
|
||||||
|
|
|
@ -13,8 +13,10 @@
|
||||||
<result column="type" jdbcType="VARCHAR" property="type" />
|
<result column="type" jdbcType="VARCHAR" property="type" />
|
||||||
<result column="actuator" jdbcType="VARCHAR" property="actuator" />
|
<result column="actuator" jdbcType="VARCHAR" property="actuator" />
|
||||||
<result column="trigger_mode" jdbcType="VARCHAR" property="triggerMode" />
|
<result column="trigger_mode" jdbcType="VARCHAR" property="triggerMode" />
|
||||||
<result column="version_id" jdbcType="VARCHAR" property="versionId" />
|
|
||||||
<result column="error_code" jdbcType="VARCHAR" property="errorCode" />
|
<result column="error_code" jdbcType="VARCHAR" property="errorCode" />
|
||||||
|
<result column="version_id" jdbcType="VARCHAR" property="versionId" />
|
||||||
|
<result column="project_id" jdbcType="VARCHAR" property="projectId" />
|
||||||
|
<result column="integrated_report_id" jdbcType="VARCHAR" property="integratedReportId" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.ApiDefinitionExecResult">
|
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.ApiDefinitionExecResult">
|
||||||
<result column="content" jdbcType="LONGVARCHAR" property="content" />
|
<result column="content" jdbcType="LONGVARCHAR" property="content" />
|
||||||
|
@ -79,7 +81,7 @@
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, `name`, resource_id, `status`, user_id, start_time, end_time, create_time, `type`,
|
id, `name`, resource_id, `status`, user_id, start_time, end_time, create_time, `type`,
|
||||||
actuator, trigger_mode, version_id, error_code
|
actuator, trigger_mode, error_code, version_id, project_id, integrated_report_id
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Blob_Column_List">
|
<sql id="Blob_Column_List">
|
||||||
content
|
content
|
||||||
|
@ -136,13 +138,15 @@
|
||||||
insert into api_definition_exec_result (id, `name`, resource_id,
|
insert into api_definition_exec_result (id, `name`, resource_id,
|
||||||
`status`, user_id, start_time,
|
`status`, user_id, start_time,
|
||||||
end_time, create_time, `type`,
|
end_time, create_time, `type`,
|
||||||
actuator, trigger_mode, version_id,
|
actuator, trigger_mode, error_code,
|
||||||
error_code, content)
|
version_id, project_id, integrated_report_id,
|
||||||
|
content)
|
||||||
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{resourceId,jdbcType=VARCHAR},
|
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{resourceId,jdbcType=VARCHAR},
|
||||||
#{status,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, #{startTime,jdbcType=BIGINT},
|
#{status,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, #{startTime,jdbcType=BIGINT},
|
||||||
#{endTime,jdbcType=BIGINT}, #{createTime,jdbcType=BIGINT}, #{type,jdbcType=VARCHAR},
|
#{endTime,jdbcType=BIGINT}, #{createTime,jdbcType=BIGINT}, #{type,jdbcType=VARCHAR},
|
||||||
#{actuator,jdbcType=VARCHAR}, #{triggerMode,jdbcType=VARCHAR}, #{versionId,jdbcType=VARCHAR},
|
#{actuator,jdbcType=VARCHAR}, #{triggerMode,jdbcType=VARCHAR}, #{errorCode,jdbcType=VARCHAR},
|
||||||
#{errorCode,jdbcType=VARCHAR}, #{content,jdbcType=LONGVARCHAR})
|
#{versionId,jdbcType=VARCHAR}, #{projectId,jdbcType=VARCHAR}, #{integratedReportId,jdbcType=VARCHAR},
|
||||||
|
#{content,jdbcType=LONGVARCHAR})
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="insertSelective" parameterType="io.metersphere.base.domain.ApiDefinitionExecResult">
|
<insert id="insertSelective" parameterType="io.metersphere.base.domain.ApiDefinitionExecResult">
|
||||||
insert into api_definition_exec_result
|
insert into api_definition_exec_result
|
||||||
|
@ -180,11 +184,17 @@
|
||||||
<if test="triggerMode != null">
|
<if test="triggerMode != null">
|
||||||
trigger_mode,
|
trigger_mode,
|
||||||
</if>
|
</if>
|
||||||
|
<if test="errorCode != null">
|
||||||
|
error_code,
|
||||||
|
</if>
|
||||||
<if test="versionId != null">
|
<if test="versionId != null">
|
||||||
version_id,
|
version_id,
|
||||||
</if>
|
</if>
|
||||||
<if test="errorCode != null">
|
<if test="projectId != null">
|
||||||
error_code,
|
project_id,
|
||||||
|
</if>
|
||||||
|
<if test="integratedReportId != null">
|
||||||
|
integrated_report_id,
|
||||||
</if>
|
</if>
|
||||||
<if test="content != null">
|
<if test="content != null">
|
||||||
content,
|
content,
|
||||||
|
@ -224,11 +234,17 @@
|
||||||
<if test="triggerMode != null">
|
<if test="triggerMode != null">
|
||||||
#{triggerMode,jdbcType=VARCHAR},
|
#{triggerMode,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="errorCode != null">
|
||||||
|
#{errorCode,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
<if test="versionId != null">
|
<if test="versionId != null">
|
||||||
#{versionId,jdbcType=VARCHAR},
|
#{versionId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
<if test="errorCode != null">
|
<if test="projectId != null">
|
||||||
#{errorCode,jdbcType=VARCHAR},
|
#{projectId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="integratedReportId != null">
|
||||||
|
#{integratedReportId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
<if test="content != null">
|
<if test="content != null">
|
||||||
#{content,jdbcType=LONGVARCHAR},
|
#{content,jdbcType=LONGVARCHAR},
|
||||||
|
@ -277,11 +293,17 @@
|
||||||
<if test="record.triggerMode != null">
|
<if test="record.triggerMode != null">
|
||||||
trigger_mode = #{record.triggerMode,jdbcType=VARCHAR},
|
trigger_mode = #{record.triggerMode,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="record.errorCode != null">
|
||||||
|
error_code = #{record.errorCode,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
<if test="record.versionId != null">
|
<if test="record.versionId != null">
|
||||||
version_id = #{record.versionId,jdbcType=VARCHAR},
|
version_id = #{record.versionId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
<if test="record.errorCode != null">
|
<if test="record.projectId != null">
|
||||||
error_code = #{record.errorCode,jdbcType=VARCHAR},
|
project_id = #{record.projectId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="record.integratedReportId != null">
|
||||||
|
integrated_report_id = #{record.integratedReportId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
<if test="record.content != null">
|
<if test="record.content != null">
|
||||||
content = #{record.content,jdbcType=LONGVARCHAR},
|
content = #{record.content,jdbcType=LONGVARCHAR},
|
||||||
|
@ -304,8 +326,10 @@
|
||||||
`type` = #{record.type,jdbcType=VARCHAR},
|
`type` = #{record.type,jdbcType=VARCHAR},
|
||||||
actuator = #{record.actuator,jdbcType=VARCHAR},
|
actuator = #{record.actuator,jdbcType=VARCHAR},
|
||||||
trigger_mode = #{record.triggerMode,jdbcType=VARCHAR},
|
trigger_mode = #{record.triggerMode,jdbcType=VARCHAR},
|
||||||
version_id = #{record.versionId,jdbcType=VARCHAR},
|
|
||||||
error_code = #{record.errorCode,jdbcType=VARCHAR},
|
error_code = #{record.errorCode,jdbcType=VARCHAR},
|
||||||
|
version_id = #{record.versionId,jdbcType=VARCHAR},
|
||||||
|
project_id = #{record.projectId,jdbcType=VARCHAR},
|
||||||
|
integrated_report_id = #{record.integratedReportId,jdbcType=VARCHAR},
|
||||||
content = #{record.content,jdbcType=LONGVARCHAR}
|
content = #{record.content,jdbcType=LONGVARCHAR}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
|
@ -324,8 +348,10 @@
|
||||||
`type` = #{record.type,jdbcType=VARCHAR},
|
`type` = #{record.type,jdbcType=VARCHAR},
|
||||||
actuator = #{record.actuator,jdbcType=VARCHAR},
|
actuator = #{record.actuator,jdbcType=VARCHAR},
|
||||||
trigger_mode = #{record.triggerMode,jdbcType=VARCHAR},
|
trigger_mode = #{record.triggerMode,jdbcType=VARCHAR},
|
||||||
|
error_code = #{record.errorCode,jdbcType=VARCHAR},
|
||||||
version_id = #{record.versionId,jdbcType=VARCHAR},
|
version_id = #{record.versionId,jdbcType=VARCHAR},
|
||||||
error_code = #{record.errorCode,jdbcType=VARCHAR}
|
project_id = #{record.projectId,jdbcType=VARCHAR},
|
||||||
|
integrated_report_id = #{record.integratedReportId,jdbcType=VARCHAR}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
</if>
|
</if>
|
||||||
|
@ -363,11 +389,17 @@
|
||||||
<if test="triggerMode != null">
|
<if test="triggerMode != null">
|
||||||
trigger_mode = #{triggerMode,jdbcType=VARCHAR},
|
trigger_mode = #{triggerMode,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="errorCode != null">
|
||||||
|
error_code = #{errorCode,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
<if test="versionId != null">
|
<if test="versionId != null">
|
||||||
version_id = #{versionId,jdbcType=VARCHAR},
|
version_id = #{versionId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
<if test="errorCode != null">
|
<if test="projectId != null">
|
||||||
error_code = #{errorCode,jdbcType=VARCHAR},
|
project_id = #{projectId,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
|
<if test="integratedReportId != null">
|
||||||
|
integrated_report_id = #{integratedReportId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
<if test="content != null">
|
<if test="content != null">
|
||||||
content = #{content,jdbcType=LONGVARCHAR},
|
content = #{content,jdbcType=LONGVARCHAR},
|
||||||
|
@ -387,8 +419,10 @@
|
||||||
`type` = #{type,jdbcType=VARCHAR},
|
`type` = #{type,jdbcType=VARCHAR},
|
||||||
actuator = #{actuator,jdbcType=VARCHAR},
|
actuator = #{actuator,jdbcType=VARCHAR},
|
||||||
trigger_mode = #{triggerMode,jdbcType=VARCHAR},
|
trigger_mode = #{triggerMode,jdbcType=VARCHAR},
|
||||||
version_id = #{versionId,jdbcType=VARCHAR},
|
|
||||||
error_code = #{errorCode,jdbcType=VARCHAR},
|
error_code = #{errorCode,jdbcType=VARCHAR},
|
||||||
|
version_id = #{versionId,jdbcType=VARCHAR},
|
||||||
|
project_id = #{projectId,jdbcType=VARCHAR},
|
||||||
|
integrated_report_id = #{integratedReportId,jdbcType=VARCHAR},
|
||||||
content = #{content,jdbcType=LONGVARCHAR}
|
content = #{content,jdbcType=LONGVARCHAR}
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
</update>
|
</update>
|
||||||
|
@ -404,8 +438,10 @@
|
||||||
`type` = #{type,jdbcType=VARCHAR},
|
`type` = #{type,jdbcType=VARCHAR},
|
||||||
actuator = #{actuator,jdbcType=VARCHAR},
|
actuator = #{actuator,jdbcType=VARCHAR},
|
||||||
trigger_mode = #{triggerMode,jdbcType=VARCHAR},
|
trigger_mode = #{triggerMode,jdbcType=VARCHAR},
|
||||||
|
error_code = #{errorCode,jdbcType=VARCHAR},
|
||||||
version_id = #{versionId,jdbcType=VARCHAR},
|
version_id = #{versionId,jdbcType=VARCHAR},
|
||||||
error_code = #{errorCode,jdbcType=VARCHAR}
|
project_id = #{projectId,jdbcType=VARCHAR},
|
||||||
|
integrated_report_id = #{integratedReportId,jdbcType=VARCHAR}
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
|
@ -18,6 +18,7 @@
|
||||||
<result column="end_time" jdbcType="BIGINT" property="endTime" />
|
<result column="end_time" jdbcType="BIGINT" property="endTime" />
|
||||||
<result column="report_version" jdbcType="INTEGER" property="reportVersion" />
|
<result column="report_version" jdbcType="INTEGER" property="reportVersion" />
|
||||||
<result column="version_id" jdbcType="VARCHAR" property="versionId" />
|
<result column="version_id" jdbcType="VARCHAR" property="versionId" />
|
||||||
|
<result column="report_type" jdbcType="VARCHAR" property="reportType" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.ApiScenarioReport">
|
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.ApiScenarioReport">
|
||||||
<result column="description" jdbcType="LONGVARCHAR" property="description" />
|
<result column="description" jdbcType="LONGVARCHAR" property="description" />
|
||||||
|
@ -83,7 +84,7 @@
|
||||||
<sql id="Base_Column_List">
|
<sql id="Base_Column_List">
|
||||||
id, project_id, `name`, create_time, update_time, `status`, user_id, trigger_mode,
|
id, project_id, `name`, create_time, update_time, `status`, user_id, trigger_mode,
|
||||||
execute_type, scenario_name, scenario_id, create_user, actuator, end_time, report_version,
|
execute_type, scenario_name, scenario_id, create_user, actuator, end_time, report_version,
|
||||||
version_id
|
version_id, report_type
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Blob_Column_List">
|
<sql id="Blob_Column_List">
|
||||||
description
|
description
|
||||||
|
@ -137,18 +138,20 @@
|
||||||
</if>
|
</if>
|
||||||
</delete>
|
</delete>
|
||||||
<insert id="insert" parameterType="io.metersphere.base.domain.ApiScenarioReport">
|
<insert id="insert" parameterType="io.metersphere.base.domain.ApiScenarioReport">
|
||||||
INSERT INTO api_scenario_report (id, project_id, `name`,
|
insert into api_scenario_report (id, project_id, `name`,
|
||||||
create_time, update_time, `status`,
|
create_time, update_time, `status`,
|
||||||
user_id, trigger_mode, execute_type,
|
user_id, trigger_mode, execute_type,
|
||||||
scenario_name, scenario_id, create_user,
|
scenario_name, scenario_id, create_user,
|
||||||
actuator, end_time, report_version,
|
actuator, end_time, report_version,
|
||||||
version_id, description)
|
version_id, report_type, description
|
||||||
VALUES (#{id,jdbcType=VARCHAR}, #{projectId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
|
)
|
||||||
|
values (#{id,jdbcType=VARCHAR}, #{projectId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
|
||||||
#{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT}, #{status,jdbcType=VARCHAR},
|
#{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT}, #{status,jdbcType=VARCHAR},
|
||||||
#{userId,jdbcType=VARCHAR}, #{triggerMode,jdbcType=VARCHAR}, #{executeType,jdbcType=VARCHAR},
|
#{userId,jdbcType=VARCHAR}, #{triggerMode,jdbcType=VARCHAR}, #{executeType,jdbcType=VARCHAR},
|
||||||
#{scenarioName,jdbcType=VARCHAR}, #{scenarioId,jdbcType=VARCHAR}, #{createUser,jdbcType=VARCHAR},
|
#{scenarioName,jdbcType=VARCHAR}, #{scenarioId,jdbcType=VARCHAR}, #{createUser,jdbcType=VARCHAR},
|
||||||
#{actuator,jdbcType=VARCHAR}, #{endTime,jdbcType=BIGINT}, #{reportVersion,jdbcType=INTEGER},
|
#{actuator,jdbcType=VARCHAR}, #{endTime,jdbcType=BIGINT}, #{reportVersion,jdbcType=INTEGER},
|
||||||
#{versionId,jdbcType=VARCHAR}, #{description,jdbcType=LONGVARCHAR})
|
#{versionId,jdbcType=VARCHAR}, #{reportType,jdbcType=VARCHAR}, #{description,jdbcType=LONGVARCHAR}
|
||||||
|
)
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="insertSelective" parameterType="io.metersphere.base.domain.ApiScenarioReport">
|
<insert id="insertSelective" parameterType="io.metersphere.base.domain.ApiScenarioReport">
|
||||||
insert into api_scenario_report
|
insert into api_scenario_report
|
||||||
|
@ -201,6 +204,9 @@
|
||||||
<if test="versionId != null">
|
<if test="versionId != null">
|
||||||
version_id,
|
version_id,
|
||||||
</if>
|
</if>
|
||||||
|
<if test="reportType != null">
|
||||||
|
report_type,
|
||||||
|
</if>
|
||||||
<if test="description != null">
|
<if test="description != null">
|
||||||
description,
|
description,
|
||||||
</if>
|
</if>
|
||||||
|
@ -254,6 +260,9 @@
|
||||||
<if test="versionId != null">
|
<if test="versionId != null">
|
||||||
#{versionId,jdbcType=VARCHAR},
|
#{versionId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="reportType != null">
|
||||||
|
#{reportType,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
<if test="description != null">
|
<if test="description != null">
|
||||||
#{description,jdbcType=LONGVARCHAR},
|
#{description,jdbcType=LONGVARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
@ -316,6 +325,9 @@
|
||||||
<if test="record.versionId != null">
|
<if test="record.versionId != null">
|
||||||
version_id = #{record.versionId,jdbcType=VARCHAR},
|
version_id = #{record.versionId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="record.reportType != null">
|
||||||
|
report_type = #{record.reportType,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
<if test="record.description != null">
|
<if test="record.description != null">
|
||||||
description = #{record.description,jdbcType=LONGVARCHAR},
|
description = #{record.description,jdbcType=LONGVARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
@ -342,6 +354,7 @@
|
||||||
end_time = #{record.endTime,jdbcType=BIGINT},
|
end_time = #{record.endTime,jdbcType=BIGINT},
|
||||||
report_version = #{record.reportVersion,jdbcType=INTEGER},
|
report_version = #{record.reportVersion,jdbcType=INTEGER},
|
||||||
version_id = #{record.versionId,jdbcType=VARCHAR},
|
version_id = #{record.versionId,jdbcType=VARCHAR},
|
||||||
|
report_type = #{record.reportType,jdbcType=VARCHAR},
|
||||||
description = #{record.description,jdbcType=LONGVARCHAR}
|
description = #{record.description,jdbcType=LONGVARCHAR}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
|
@ -364,7 +377,8 @@
|
||||||
actuator = #{record.actuator,jdbcType=VARCHAR},
|
actuator = #{record.actuator,jdbcType=VARCHAR},
|
||||||
end_time = #{record.endTime,jdbcType=BIGINT},
|
end_time = #{record.endTime,jdbcType=BIGINT},
|
||||||
report_version = #{record.reportVersion,jdbcType=INTEGER},
|
report_version = #{record.reportVersion,jdbcType=INTEGER},
|
||||||
version_id = #{record.versionId,jdbcType=VARCHAR}
|
version_id = #{record.versionId,jdbcType=VARCHAR},
|
||||||
|
report_type = #{record.reportType,jdbcType=VARCHAR}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
<include refid="Update_By_Example_Where_Clause" />
|
||||||
</if>
|
</if>
|
||||||
|
@ -417,6 +431,9 @@
|
||||||
<if test="versionId != null">
|
<if test="versionId != null">
|
||||||
version_id = #{versionId,jdbcType=VARCHAR},
|
version_id = #{versionId,jdbcType=VARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
<if test="reportType != null">
|
||||||
|
report_type = #{reportType,jdbcType=VARCHAR},
|
||||||
|
</if>
|
||||||
<if test="description != null">
|
<if test="description != null">
|
||||||
description = #{description,jdbcType=LONGVARCHAR},
|
description = #{description,jdbcType=LONGVARCHAR},
|
||||||
</if>
|
</if>
|
||||||
|
@ -440,6 +457,7 @@
|
||||||
end_time = #{endTime,jdbcType=BIGINT},
|
end_time = #{endTime,jdbcType=BIGINT},
|
||||||
report_version = #{reportVersion,jdbcType=INTEGER},
|
report_version = #{reportVersion,jdbcType=INTEGER},
|
||||||
version_id = #{versionId,jdbcType=VARCHAR},
|
version_id = #{versionId,jdbcType=VARCHAR},
|
||||||
|
report_type = #{reportType,jdbcType=VARCHAR},
|
||||||
description = #{description,jdbcType=LONGVARCHAR}
|
description = #{description,jdbcType=LONGVARCHAR}
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
</update>
|
</update>
|
||||||
|
@ -459,7 +477,8 @@
|
||||||
actuator = #{actuator,jdbcType=VARCHAR},
|
actuator = #{actuator,jdbcType=VARCHAR},
|
||||||
end_time = #{endTime,jdbcType=BIGINT},
|
end_time = #{endTime,jdbcType=BIGINT},
|
||||||
report_version = #{reportVersion,jdbcType=INTEGER},
|
report_version = #{reportVersion,jdbcType=INTEGER},
|
||||||
version_id = #{versionId,jdbcType=VARCHAR}
|
version_id = #{versionId,jdbcType=VARCHAR},
|
||||||
|
report_type = #{reportType,jdbcType=VARCHAR}
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
</update>
|
</update>
|
||||||
</mapper>
|
</mapper>
|
|
@ -8,7 +8,7 @@ public class ExtApiDefinitionExecResultProvider {
|
||||||
public String insertListSql(List<ApiDefinitionExecResult> list) {
|
public String insertListSql(List<ApiDefinitionExecResult> list) {
|
||||||
StringBuffer sqlList = new StringBuffer();
|
StringBuffer sqlList = new StringBuffer();
|
||||||
sqlList.append("insert into api_definition_exec_result (id, `name`, resource_id, `status`, user_id, start_time, end_time," +
|
sqlList.append("insert into api_definition_exec_result (id, `name`, resource_id, `status`, user_id, start_time, end_time," +
|
||||||
" create_time, `type`, actuator, trigger_mode, version_id, error_code, content) values ");
|
" create_time, `type`, actuator, trigger_mode, version_id, error_code,project_id,integrated_report_id, content) values ");
|
||||||
for (int i = 0; i < list.size(); i++) {
|
for (int i = 0; i < list.size(); i++) {
|
||||||
ApiDefinitionExecResult result = list.get(i);
|
ApiDefinitionExecResult result = list.get(i);
|
||||||
sqlList.append(" (")
|
sqlList.append(" (")
|
||||||
|
@ -39,6 +39,10 @@ public class ExtApiDefinitionExecResultProvider {
|
||||||
.append("','")
|
.append("','")
|
||||||
.append(result.getErrorCode())
|
.append(result.getErrorCode())
|
||||||
.append("','")
|
.append("','")
|
||||||
|
.append(result.getProjectId())
|
||||||
|
.append("','")
|
||||||
|
.append(result.getIntegratedReportId())
|
||||||
|
.append("','")
|
||||||
.append(result.getContent())
|
.append(result.getContent())
|
||||||
.append("'")
|
.append("'")
|
||||||
.append(")");
|
.append(")");
|
||||||
|
|
|
@ -99,10 +99,36 @@
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="list" resultMap="BaseResultMap">
|
<select id="list" resultMap="BaseResultMap">
|
||||||
SELECT r.name AS test_name,r.end_time, r.user_id,
|
select * from (
|
||||||
r.name, r.description, r.id, r.project_id, r.create_time, r.update_time, r.status, r.trigger_mode,IfNULL(s.name,r.scenario_name) as scenario_name
|
SELECT s_r.name AS test_name,
|
||||||
FROM api_scenario_report r
|
s_r.end_time,
|
||||||
LEFT JOIN api_scenario s on r.scenario_id = s.id
|
s_r.user_id,
|
||||||
|
s_r.name,
|
||||||
|
s_r.id,
|
||||||
|
s_r.project_id,
|
||||||
|
s_r.create_time,
|
||||||
|
s_r.update_time,
|
||||||
|
s_r.status,
|
||||||
|
s_r.trigger_mode,
|
||||||
|
s_r.execute_type,
|
||||||
|
s_r.report_type
|
||||||
|
FROM api_scenario_report s_r
|
||||||
|
union
|
||||||
|
select a_r.name as test_name,
|
||||||
|
a_r.end_time,
|
||||||
|
a_r.user_id,
|
||||||
|
a_r.name,
|
||||||
|
a_r.id,
|
||||||
|
a_r.project_id,
|
||||||
|
a_r.create_time,
|
||||||
|
a_r.create_time as update_time,
|
||||||
|
a_r.status,
|
||||||
|
a_r.trigger_mode,
|
||||||
|
'Saved' as execute_type,
|
||||||
|
'API_INDEPENDENT' as report_type
|
||||||
|
from api_definition_exec_result a_r
|
||||||
|
where a_r.integrated_report_id is null
|
||||||
|
) r
|
||||||
<where>
|
<where>
|
||||||
<if test="request.combine != null">
|
<if test="request.combine != null">
|
||||||
<include refid="combine">
|
<include refid="combine">
|
||||||
|
@ -130,6 +156,12 @@
|
||||||
#{value}
|
#{value}
|
||||||
</foreach>
|
</foreach>
|
||||||
</when>
|
</when>
|
||||||
|
<when test="key=='report_type'">
|
||||||
|
and r.report_type in
|
||||||
|
<foreach collection="values" item="value" separator="," open="(" close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</when>
|
||||||
<otherwise>
|
<otherwise>
|
||||||
and r.trigger_mode in
|
and r.trigger_mode in
|
||||||
<foreach collection="values" item="value" separator="," open="(" close=")">
|
<foreach collection="values" item="value" separator="," open="(" close=")">
|
||||||
|
|
|
@ -8,7 +8,7 @@ public class ExtApiScenarioReportProvider {
|
||||||
public String insertListSql(List<APIScenarioReportResult> list) {
|
public String insertListSql(List<APIScenarioReportResult> list) {
|
||||||
StringBuffer sqlList = new StringBuffer();
|
StringBuffer sqlList = new StringBuffer();
|
||||||
sqlList.append("INSERT INTO api_scenario_report (id, project_id, `name`, create_time, update_time, `status`, user_id, trigger_mode," +
|
sqlList.append("INSERT INTO api_scenario_report (id, project_id, `name`, create_time, update_time, `status`, user_id, trigger_mode," +
|
||||||
" execute_type, scenario_name, scenario_id, create_user, actuator, end_time, report_version, version_id, description) VALUES ");
|
" execute_type, scenario_name, scenario_id, create_user, actuator, end_time, report_version, version_id, description,report_type) VALUES ");
|
||||||
for (int i = 0; i < list.size(); i++) {
|
for (int i = 0; i < list.size(); i++) {
|
||||||
APIScenarioReportResult result = list.get(i);
|
APIScenarioReportResult result = list.get(i);
|
||||||
sqlList.append(" (")
|
sqlList.append(" (")
|
||||||
|
@ -46,6 +46,8 @@ public class ExtApiScenarioReportProvider {
|
||||||
.append(result.getVersionId())
|
.append(result.getVersionId())
|
||||||
.append("','")
|
.append("','")
|
||||||
.append(result.getDescription())
|
.append(result.getDescription())
|
||||||
|
.append("','")
|
||||||
|
.append(result.getReportType())
|
||||||
.append("'")
|
.append("'")
|
||||||
.append(")");
|
.append(")");
|
||||||
if (i < list.size() - 1) {
|
if (i < list.size() - 1) {
|
||||||
|
|
|
@ -33,7 +33,8 @@
|
||||||
<if test="request.executor != null and request.executor != ''">
|
<if test="request.executor != null and request.executor != ''">
|
||||||
and t.user_id = #{request.executor}
|
and t.user_id = #{request.executor}
|
||||||
</if>
|
</if>
|
||||||
)
|
and t.integrated_report_id is null
|
||||||
|
)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
(select t.id,t.name,'PERFORMANCE' as executionModule, ifnull(t2.name,'LOCAL') as actuator, t1.`name` as executor,t.create_time as executionTime, t.trigger_mode as triggerMode ,t.`status` as executionStatus
|
(select t.id,t.name,'PERFORMANCE' as executionModule, ifnull(t2.name,'LOCAL') as actuator, t1.`name` as executor,t.create_time as executionTime, t.trigger_mode as triggerMode ,t.`status` as executionStatus
|
||||||
from load_test_report t left join `user` t1 ON t.user_id = t1.id left join test_resource_pool t2 on t.test_resource_pool_id = t2.id
|
from load_test_report t left join `user` t1 ON t.user_id = t1.id left join test_resource_pool t2 on t.test_resource_pool_id = t2.id
|
||||||
|
@ -79,7 +80,7 @@
|
||||||
from api_definition_exec_result t left join `user` t1 ON t.user_id = t1.id left join test_resource_pool t2 on t.actuator = t2.id
|
from api_definition_exec_result t left join `user` t1 ON t.user_id = t1.id left join test_resource_pool t2 on t.actuator = t2.id
|
||||||
left join api_definition t3 on t.resource_id = t3.id left join api_test_case t4 on t4.id = t.resource_id
|
left join api_definition t3 on t.resource_id = t3.id left join api_test_case t4 on t4.id = t.resource_id
|
||||||
left join test_plan_api_case t5 on t.resource_id = t5.id left join test_plan t6 on t5.test_plan_id = t6.id
|
left join test_plan_api_case t5 on t.resource_id = t5.id left join test_plan t6 on t5.test_plan_id = t6.id
|
||||||
where to_days(FROM_UNIXTIME(t.create_time/1000))= to_days(now()) and (t3.project_id =#{request.projectId} OR t4.project_id =#{request.projectId} OR t6.project_id = #{request.projectId}) and t.status not in ("saved","completed","success","error","STOP")
|
where to_days(FROM_UNIXTIME(t.create_time/1000))= to_days(now()) and t.integrated_report_id is null and (t3.project_id =#{request.projectId} OR t4.project_id =#{request.projectId} OR t6.project_id = #{request.projectId}) and t.status not in ("saved","completed","success","error","STOP")
|
||||||
)
|
)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
(select t.id,t.create_time as executionTime
|
(select t.id,t.create_time as executionTime
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package io.metersphere.commons.constants;
|
||||||
|
|
||||||
|
public enum ReportTypeConstants {
|
||||||
|
SCENARIO_INTEGRATED,
|
||||||
|
SCENARIO_INDEPENDENT,
|
||||||
|
API_INTEGRATED,
|
||||||
|
API_INDEPENDENT
|
||||||
|
}
|
|
@ -51,3 +51,23 @@ DELIMITER ;
|
||||||
|
|
||||||
CALL test_personal();
|
CALL test_personal();
|
||||||
DROP PROCEDURE IF EXISTS test_personal;
|
DROP PROCEDURE IF EXISTS test_personal;
|
||||||
|
|
||||||
|
ALTER TABLE api_definition_exec_result
|
||||||
|
ADD project_id varchar(50);
|
||||||
|
|
||||||
|
ALTER TABLE api_definition_exec_result
|
||||||
|
ADD integrated_report_id varchar(50);
|
||||||
|
|
||||||
|
ALTER TABLE `api_definition_exec_result`
|
||||||
|
ADD INDEX project_id_index ( `project_id` );
|
||||||
|
|
||||||
|
ALTER TABLE api_scenario_report
|
||||||
|
ADD report_type varchar(100);
|
||||||
|
|
||||||
|
update api_definition_exec_result t
|
||||||
|
INNER JOIN
|
||||||
|
(select id,project_id from api_test_case) atc on t.resource_id = atc.id
|
||||||
|
set t.project_id = atc.project_id where atc.id = t.resource_id;
|
||||||
|
|
||||||
|
update api_scenario_report set report_type = 'SCENARIO_INTEGRATED' where scenario_id like '[%';
|
||||||
|
update api_scenario_report set report_type = 'SCENARIO_INDEPENDENT' where report_type is null;
|
|
@ -43,8 +43,36 @@
|
||||||
min-width="200px">
|
min-width="200px">
|
||||||
</ms-table-column>
|
</ms-table-column>
|
||||||
|
|
||||||
<el-table-column prop="scenarioName" :label="$t('api_test.automation.scenario_name')" width="150"
|
<el-table-column prop="reportType" :label="$t('load_test.report_type')" width="150"
|
||||||
show-overflow-tooltip/>
|
column-key="reportType"
|
||||||
|
:filters="reportTypeFilters">
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<div v-if="scope.row.reportType === 'SCENARIO_INTEGRATED'">
|
||||||
|
<el-tag size="mini" type="primary">
|
||||||
|
{{ $t('api_test.scenario.integrated') }}
|
||||||
|
</el-tag>
|
||||||
|
{{ $t('commons.scenario') }}
|
||||||
|
</div>
|
||||||
|
<div v-else-if="scope.row.reportType === 'API_INDEPENDENT'">
|
||||||
|
<el-tag size="mini" type="primary">
|
||||||
|
{{ $t('api_test.scenario.independent') }}
|
||||||
|
</el-tag>
|
||||||
|
case
|
||||||
|
</div>
|
||||||
|
<div v-else-if="scope.row.reportType === 'API_INTEGRATED'">
|
||||||
|
<el-tag size="mini" type="primary">
|
||||||
|
{{ $t('api_test.scenario.integrated') }}
|
||||||
|
</el-tag>
|
||||||
|
case
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<el-tag size="mini" type="primary">
|
||||||
|
{{ $t('api_test.scenario.independent') }}
|
||||||
|
</el-tag>
|
||||||
|
{{ $t('commons.scenario') }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="userName" :label="$t('api_test.creator')" width="150" show-overflow-tooltip/>
|
<el-table-column prop="userName" :label="$t('api_test.creator')" width="150" show-overflow-tooltip/>
|
||||||
<el-table-column prop="createTime" min-width="120" :label="$t('commons.create_time')" sortable>
|
<el-table-column prop="createTime" min-width="120" :label="$t('commons.create_time')" sortable>
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
|
@ -85,7 +113,10 @@
|
||||||
:total="total"/>
|
:total="total"/>
|
||||||
</el-card>
|
</el-card>
|
||||||
<ms-rename-report-dialog ref="renameDialog" @submit="rename($event)"></ms-rename-report-dialog>
|
<ms-rename-report-dialog ref="renameDialog" @submit="rename($event)"></ms-rename-report-dialog>
|
||||||
|
<el-dialog :close-on-click-modal="false" :title="$t('test_track.plan_view.test_result')" width="60%"
|
||||||
|
:visible.sync="resVisible" class="api-import" destroy-on-close @close="resVisible=false">
|
||||||
|
<ms-request-result-tail :response="response" ref="debugResult"/>
|
||||||
|
</el-dialog>
|
||||||
</ms-main-container>
|
</ms-main-container>
|
||||||
</ms-container>
|
</ms-container>
|
||||||
</template>
|
</template>
|
||||||
|
@ -96,6 +127,8 @@ import {REPORT_CONFIGS} from "../../../common/components/search/search-component
|
||||||
import {_filter, _sort} from "@/common/js/tableUtils";
|
import {_filter, _sort} from "@/common/js/tableUtils";
|
||||||
import MsRenameReportDialog from "@/business/components/common/components/report/MsRenameReportDialog";
|
import MsRenameReportDialog from "@/business/components/common/components/report/MsRenameReportDialog";
|
||||||
import MsTableColumn from "@/business/components/common/components/table/MsTableColumn";
|
import MsTableColumn from "@/business/components/common/components/table/MsTableColumn";
|
||||||
|
import MsRequestResultTail from "../../../api/definition/components/response/RequestResultTail";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
ReportTriggerModeItem: () => import("../../../common/tableItem/ReportTriggerModeItem"),
|
ReportTriggerModeItem: () => import("../../../common/tableItem/ReportTriggerModeItem"),
|
||||||
|
@ -108,10 +141,13 @@ export default {
|
||||||
ShowMoreBtn: () => import("../../../track/case/components/ShowMoreBtn"),
|
ShowMoreBtn: () => import("../../../track/case/components/ShowMoreBtn"),
|
||||||
MsRenameReportDialog,
|
MsRenameReportDialog,
|
||||||
MsTableColumn,
|
MsTableColumn,
|
||||||
|
MsRequestResultTail,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
result: {},
|
result: {},
|
||||||
|
resVisible: false,
|
||||||
|
response: {},
|
||||||
reportId: "",
|
reportId: "",
|
||||||
debugVisible: false,
|
debugVisible: false,
|
||||||
condition: {
|
condition: {
|
||||||
|
@ -134,6 +170,12 @@ export default {
|
||||||
{text: 'Success', value: 'Success'},
|
{text: 'Success', value: 'Success'},
|
||||||
{text: this.$t('error_report_library.option.name'), value: 'errorReportResult'},
|
{text: this.$t('error_report_library.option.name'), value: 'errorReportResult'},
|
||||||
],
|
],
|
||||||
|
reportTypeFilters: [
|
||||||
|
{text: this.$t('api_test.scenario.independent') + this.$t('commons.scenario'), value: 'SCENARIO_INDEPENDENT'},
|
||||||
|
{text: this.$t('api_test.scenario.integrated') + this.$t('commons.scenario'), value: 'SCENARIO_INTEGRATED'},
|
||||||
|
{text: this.$t('api_test.scenario.independent') + 'case', value: 'API_INDEPENDENT'},
|
||||||
|
{text: this.$t('api_test.scenario.integrated') + 'case', value: 'API_INTEGRATED'},
|
||||||
|
],
|
||||||
triggerFilters: [
|
triggerFilters: [
|
||||||
{text: this.$t('commons.trigger_mode.manual'), value: 'MANUAL'},
|
{text: this.$t('commons.trigger_mode.manual'), value: 'MANUAL'},
|
||||||
{text: this.$t('commons.trigger_mode.schedule'), value: 'SCHEDULE'},
|
{text: this.$t('commons.trigger_mode.schedule'), value: 'SCHEDULE'},
|
||||||
|
@ -180,17 +222,36 @@ export default {
|
||||||
handleSelectionChange(val) {
|
handleSelectionChange(val) {
|
||||||
this.multipleSelection = val;
|
this.multipleSelection = val;
|
||||||
},
|
},
|
||||||
|
getExecResult(apiCase) {
|
||||||
|
if (apiCase.id) {
|
||||||
|
let url = "/api/definition/report/get/" + apiCase.id;
|
||||||
|
this.$get(url, response => {
|
||||||
|
if (response.data) {
|
||||||
|
try {
|
||||||
|
let data = JSON.parse(response.data.content);
|
||||||
|
this.response = data;
|
||||||
|
this.resVisible = true;
|
||||||
|
} catch (error) {
|
||||||
|
this.resVisible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
handleView(report) {
|
handleView(report) {
|
||||||
this.reportId = report.id;
|
this.reportId = report.id;
|
||||||
if (report.status === 'Running') {
|
if (report.status === 'Running') {
|
||||||
this.$warning(this.$t('commons.run_warning'))
|
this.$warning(this.$t('commons.run_warning'))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.currentProjectId = report.projectId;
|
if (report.reportType.indexOf('SCENARIO') !== -1 || report.reportType === 'API_INTEGRATED') {
|
||||||
this.$router.push({
|
this.currentProjectId = report.projectId;
|
||||||
path: 'report/view/' + report.id,
|
this.$router.push({
|
||||||
})
|
path: 'report/view/' + report.id,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.getExecResult(report);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
handleDelete(report) {
|
handleDelete(report) {
|
||||||
this.$alert(this.$t('api_report.delete_confirm') + report.name + "?", '', {
|
this.$alert(this.$t('api_report.delete_confirm') + report.name + "?", '', {
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-tag size="mini" type="info" v-if="row.status === 'Starting'">
|
<el-tag size="mini" type="info" v-if="row.status === 'Starting'">
|
||||||
{{ row.status }}
|
{{ getStatus(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag size="mini" type="primary" effect="plain" v-else-if="row.status === 'Running'">
|
<el-tag size="mini" type="primary" effect="plain" v-else-if="row.status === 'Running'">
|
||||||
{{ row.status }}
|
{{ getStatus(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag size="mini" type="success" v-else-if="row.status === 'Success'">
|
<el-tag size="mini" type="success" v-else-if="getStatus(row.status) === 'success'">
|
||||||
{{ row.status }}
|
{{ getStatus(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag size="mini" type="warning" v-else-if="row.status === 'Reporting'">
|
<el-tag size="mini" type="warning" v-else-if="row.status === 'Reporting'">
|
||||||
{{ row.status }}
|
{{ getStatus(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag size="mini" type="danger" v-else-if="row.status === 'Error'">
|
<el-tag size="mini" type="danger" v-else-if="getStatus(row.status) === 'error'">
|
||||||
{{ row.status }}
|
{{ getStatus(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag size="mini" type="danger" style="background-color: #F6972A; color: #FFFFFF" v-else-if="row.status === 'errorReportResult'">
|
<el-tag size="mini" type="danger" style="background-color: #F6972A; color: #FFFFFF" v-else-if="row.status === 'errorReportResult'">
|
||||||
{{ $t('error_report_library.option.name') }}
|
{{ $t('error_report_library.option.name') }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag v-else size="mini" type="info">
|
<el-tag v-else size="mini" type="info">
|
||||||
{{ row.status }}
|
{{ getStatus(row.status) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -30,6 +30,11 @@
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
row: Object
|
row: Object
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
getStatus(status){
|
||||||
|
return status.toLowerCase();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<div class="el-step__icon is-text ms-api-col-create">
|
<div class="el-step__icon is-text ms-api-col-create">
|
||||||
<div class="el-step__icon-inner"> {{ indexNumber }}</div>
|
<div class="el-step__icon-inner"> {{ indexNumber }}</div>
|
||||||
</div>
|
</div>
|
||||||
<i class="icon el-icon-arrow-right" :class="{'is-active': isActive}" @click="active" @click.stop/>
|
<i class="icon el-icon-arrow-right" :class="{'is-active': showActive}" @click="active" @click.stop/>
|
||||||
<span>{{ getName(request.name) }}</span>
|
<span>{{ getName(request.name) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
|
@ -68,13 +68,13 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-collapse-transition>
|
<el-collapse-transition>
|
||||||
<div v-show="isActive && !request.unexecute" style="width: 99%">
|
<div v-show="showActive && !request.unexecute" style="width: 99%">
|
||||||
<ms-request-result-tail
|
<ms-request-result-tail
|
||||||
:scenario-name="scenarioName"
|
:scenario-name="scenarioName"
|
||||||
:request-type="requestType"
|
:request-type="requestType"
|
||||||
:request="request"
|
:request="request"
|
||||||
:console="console"
|
:console="console"
|
||||||
v-if="isActive"/>
|
v-if="showActive"/>
|
||||||
</div>
|
</div>
|
||||||
</el-collapse-transition>
|
</el-collapse-transition>
|
||||||
</div>
|
</div>
|
||||||
|
@ -103,7 +103,13 @@ export default {
|
||||||
indexNumber: Number,
|
indexNumber: Number,
|
||||||
console: String,
|
console: String,
|
||||||
errorCode: String,
|
errorCode: String,
|
||||||
isActive: Boolean,
|
isActive: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.showActive = this.isActive;
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -120,6 +126,7 @@ export default {
|
||||||
return "#F9F1EA";
|
return "#F9F1EA";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
showActive: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
@ -139,9 +146,9 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
active() {
|
active() {
|
||||||
if (this.request.unexecute) {
|
if (this.request.unexecute) {
|
||||||
this.isActive = false;
|
this.showActive = false;
|
||||||
} else {
|
} else {
|
||||||
this.isActive = !this.isActive;
|
this.showActive = !this.showActive;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getName(name) {
|
getName(name) {
|
||||||
|
|
|
@ -23,7 +23,7 @@ export function STEP() {
|
||||||
['CustomizeReq', getDefaultSamplerMenu()],
|
['CustomizeReq', getDefaultSamplerMenu()],
|
||||||
['MaxSamplerProxy', getDefaultSamplerMenu()],
|
['MaxSamplerProxy', getDefaultSamplerMenu()],
|
||||||
['GenericController', getAll()],
|
['GenericController', getAll()],
|
||||||
['AllSamplerProxy', ['HTTPSamplerProxy', 'DubboSampler', 'JDBCSampler', 'TCPSampler', 'Sampler', 'AbstractSampler', 'JSR223Processor']],
|
['AllSamplerProxy', ['HTTPSamplerProxy', 'DubboSampler', 'JDBCSampler', 'TCPSampler', 'Sampler', 'AbstractSampler', 'JSR223Processor','API']],
|
||||||
['DEFINITION', ['HTTPSamplerProxy', 'DubboSampler', 'JDBCSampler', 'TCPSampler']],
|
['DEFINITION', ['HTTPSamplerProxy', 'DubboSampler', 'JDBCSampler', 'TCPSampler']],
|
||||||
['AllCanExecType', ['HTTPSamplerProxy', 'DubboSampler', 'JDBCSampler', 'TCPSampler', 'JSR223Processor', 'AbstractSampler']]]);
|
['AllCanExecType', ['HTTPSamplerProxy', 'DubboSampler', 'JDBCSampler', 'TCPSampler', 'JSR223Processor', 'AbstractSampler']]]);
|
||||||
return map
|
return map
|
||||||
|
|
|
@ -55,6 +55,13 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!--- 失败停止 -->
|
||||||
|
<div style="margin-top: 10px" v-if="runConfig.mode === 'serial'">
|
||||||
|
<el-checkbox v-model="runConfig.onSampleError" style="margin-left: 127px">
|
||||||
|
{{ $t("api_test.fail_to_stop") }}
|
||||||
|
</el-checkbox>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="ms-mode-div" v-if="runConfig.reportType === 'setReport'">
|
<div class="ms-mode-div" v-if="runConfig.reportType === 'setReport'">
|
||||||
<span class="ms-mode-span">{{ $t("run_mode.report_name") }}:</span>
|
<span class="ms-mode-span">{{ $t("run_mode.report_name") }}:</span>
|
||||||
<el-input
|
<el-input
|
||||||
|
|
|
@ -25,14 +25,18 @@
|
||||||
<el-radio label="parallel">{{ $t("run_mode.parallel") }}</el-radio>
|
<el-radio label="parallel">{{ $t("run_mode.parallel") }}</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</div>
|
</div>
|
||||||
<div class="ms-mode-div" v-if="runConfig.mode === 'serial'">
|
|
||||||
|
<div class="ms-mode-div">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<span class="ms-mode-span">{{ $t("run_mode.other_config") }}:</span>
|
<span class="ms-mode-span">{{ $t("run_mode.other_config") }}:</span>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="18">
|
<el-col :span="18">
|
||||||
<div>
|
<div>
|
||||||
<el-checkbox v-model="runConfig.onSampleError">{{ $t("api_test.fail_to_stop") }}</el-checkbox>
|
<el-radio-group v-model="runConfig.reportType">
|
||||||
|
<el-radio label="iddReport">{{ $t("run_mode.idd_report") }}</el-radio>
|
||||||
|
<el-radio label="setReport">{{ $t("run_mode.set_report") }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
</div>
|
</div>
|
||||||
<div style="padding-top: 10px">
|
<div style="padding-top: 10px">
|
||||||
<el-checkbox v-model="runConfig.runWithinResourcePool" style="padding-right: 10px;">
|
<el-checkbox v-model="runConfig.runWithinResourcePool" style="padding-right: 10px;">
|
||||||
|
@ -43,6 +47,7 @@
|
||||||
v-for="item in resourcePools"
|
v-for="item in resourcePools"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
|
:disabled="!item.api"
|
||||||
:value="item.id">
|
:value="item.id">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
|
@ -50,26 +55,20 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
<div class="ms-mode-div" v-if="runConfig.mode === 'parallel'">
|
<!--- 失败停止 -->
|
||||||
<el-row>
|
<div style="margin-top: 10px" v-if="runConfig.mode === 'serial'">
|
||||||
<el-col :span="6">
|
<el-checkbox v-model="runConfig.onSampleError" style="margin-left: 127px">
|
||||||
<span class="ms-mode-span">{{ $t("run_mode.other_config") }}:</span>
|
{{ $t("api_test.fail_to_stop") }}
|
||||||
</el-col>
|
</el-checkbox>
|
||||||
<el-col :span="18">
|
</div>
|
||||||
<el-checkbox v-model="runConfig.runWithinResourcePool" style="padding-right: 10px;">
|
|
||||||
{{ $t('run_mode.run_with_resource_pool') }}
|
<div class="ms-mode-div" v-if="runConfig.reportType === 'setReport'">
|
||||||
</el-checkbox>
|
<span class="ms-mode-span">{{ $t("run_mode.report_name") }}:</span>
|
||||||
<el-select :disabled="!runConfig.runWithinResourcePool" v-model="runConfig.resourcePoolId" size="mini">
|
<el-input
|
||||||
<el-option
|
v-model="runConfig.reportName"
|
||||||
v-for="item in resourcePools"
|
:placeholder="$t('commons.input_content')"
|
||||||
:key="item.id"
|
size="small"
|
||||||
:label="item.name"
|
style="width: 300px"/>
|
||||||
:disabled="!item.api"
|
|
||||||
:value="item.id">
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
</div>
|
||||||
<template v-slot:footer>
|
<template v-slot:footer>
|
||||||
<ms-dialog-footer @cancel="close" @confirm="handleRunBatch"/>
|
<ms-dialog-footer @cancel="close" @confirm="handleRunBatch"/>
|
||||||
|
|
|
@ -1036,6 +1036,7 @@ export default {
|
||||||
delete_threadgroup_confirm: 'Confirm delete scenario',
|
delete_threadgroup_confirm: 'Confirm delete scenario',
|
||||||
scenario_list: 'Scenario List',
|
scenario_list: 'Scenario List',
|
||||||
scenario_name: 'Scenario Name',
|
scenario_name: 'Scenario Name',
|
||||||
|
report_type: 'Report type',
|
||||||
upload_jmx: 'Upload JMX',
|
upload_jmx: 'Upload JMX',
|
||||||
exist_jmx: 'Existed Files',
|
exist_jmx: 'Existed Files',
|
||||||
other_resource: 'Resource Files',
|
other_resource: 'Resource Files',
|
||||||
|
@ -1441,6 +1442,8 @@ export default {
|
||||||
scenario_warning: "No other steps can be added to the referenced scenario steps and sub-steps",
|
scenario_warning: "No other steps can be added to the referenced scenario steps and sub-steps",
|
||||||
scenario_step_warning: "No other steps can be added under the current step",
|
scenario_step_warning: "No other steps can be added under the current step",
|
||||||
scenario_error: "Cannot reference or copy itself!",
|
scenario_error: "Cannot reference or copy itself!",
|
||||||
|
integrated: "Integrated",
|
||||||
|
independent: "Independent",
|
||||||
},
|
},
|
||||||
request: {
|
request: {
|
||||||
debug: "Debug",
|
debug: "Debug",
|
||||||
|
|
|
@ -1042,6 +1042,7 @@ export default {
|
||||||
delete_threadgroup_confirm: '确认删除场景',
|
delete_threadgroup_confirm: '确认删除场景',
|
||||||
scenario_list: '场景列表',
|
scenario_list: '场景列表',
|
||||||
scenario_name: "场景名称",
|
scenario_name: "场景名称",
|
||||||
|
report_type: "报告类型",
|
||||||
upload_jmx: '上传 JMX 文件',
|
upload_jmx: '上传 JMX 文件',
|
||||||
exist_jmx: '已存在的文件',
|
exist_jmx: '已存在的文件',
|
||||||
other_resource: '资源文件',
|
other_resource: '资源文件',
|
||||||
|
@ -1445,6 +1446,8 @@ export default {
|
||||||
scenario_warning: "引用的场景步骤及子步骤都无法添加其他步骤",
|
scenario_warning: "引用的场景步骤及子步骤都无法添加其他步骤",
|
||||||
scenario_step_warning: "当前步骤下不能添加其他步骤",
|
scenario_step_warning: "当前步骤下不能添加其他步骤",
|
||||||
scenario_error: "不能引用或复制自身!",
|
scenario_error: "不能引用或复制自身!",
|
||||||
|
integrated: "集合",
|
||||||
|
independent: "独立",
|
||||||
},
|
},
|
||||||
request: {
|
request: {
|
||||||
debug: "调试",
|
debug: "调试",
|
||||||
|
|
|
@ -1042,6 +1042,7 @@ export default {
|
||||||
delete_threadgroup_confirm: '確認刪除場景',
|
delete_threadgroup_confirm: '確認刪除場景',
|
||||||
scenario_list: '場景列表',
|
scenario_list: '場景列表',
|
||||||
scenario_name: "場景名稱",
|
scenario_name: "場景名稱",
|
||||||
|
report_type: "报告类型",
|
||||||
upload_jmx: '上傳 JMX 文件',
|
upload_jmx: '上傳 JMX 文件',
|
||||||
exist_jmx: '已存在的文件',
|
exist_jmx: '已存在的文件',
|
||||||
other_resource: '資源文件',
|
other_resource: '資源文件',
|
||||||
|
@ -1445,6 +1446,8 @@ export default {
|
||||||
scenario_warning: "引用的場景步驟及子步驟都無法添加其他步驟",
|
scenario_warning: "引用的場景步驟及子步驟都無法添加其他步驟",
|
||||||
scenario_step_warning: "當前步驟下不能添加其他步驟",
|
scenario_step_warning: "當前步驟下不能添加其他步驟",
|
||||||
scenario_error: "不能引用或復製自身!",
|
scenario_error: "不能引用或復製自身!",
|
||||||
|
integrated: "集合",
|
||||||
|
independent: "獨立",
|
||||||
},
|
},
|
||||||
request: {
|
request: {
|
||||||
debug: "調試",
|
debug: "調試",
|
||||||
|
|
Loading…
Reference in New Issue