parent
99ad51cfaa
commit
8f34c4694e
|
@ -471,11 +471,13 @@ public class MockApiUtils {
|
||||||
JSON returnJson = null;
|
JSON returnJson = null;
|
||||||
try {
|
try {
|
||||||
String param = getRequestPostStr(request);
|
String param = getRequestPostStr(request);
|
||||||
JSONValidator jsonValidator = JSONValidator.from(param);
|
if(StringUtils.isNotEmpty(param)){
|
||||||
if (StringUtils.equalsIgnoreCase("Array", jsonValidator.getType().name())) {
|
JSONValidator jsonValidator = JSONValidator.from(param);
|
||||||
returnJson = JSONArray.parseArray(param);
|
if (StringUtils.equalsIgnoreCase("Array", jsonValidator.getType().name())) {
|
||||||
} else if (StringUtils.equalsIgnoreCase("Object", jsonValidator.getType().name())) {
|
returnJson = JSONArray.parseArray(param);
|
||||||
returnJson = JSONObject.parseObject(param);
|
} else if (StringUtils.equalsIgnoreCase("Object", jsonValidator.getType().name())) {
|
||||||
|
returnJson = JSONObject.parseObject(param);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -1190,7 +1190,6 @@ public class ApiAutomationService {
|
||||||
* @param executeQueue
|
* @param executeQueue
|
||||||
* @param scenarioIds
|
* @param scenarioIds
|
||||||
* @param scenarioNames
|
* @param scenarioNames
|
||||||
* @param serialReportId
|
|
||||||
*/
|
*/
|
||||||
private void prepareExecutedPlanScenario(List<ApiScenarioWithBLOBs> apiScenarios, RunScenarioRequest request, Map<String, RunModeDataDTO> executeQueue, List<String> scenarioIds, StringBuilder scenarioNames) {
|
private void prepareExecutedPlanScenario(List<ApiScenarioWithBLOBs> apiScenarios, RunScenarioRequest request, Map<String, RunModeDataDTO> executeQueue, List<String> scenarioIds, StringBuilder scenarioNames) {
|
||||||
String reportId = request.getId();
|
String reportId = request.getId();
|
||||||
|
@ -1247,7 +1246,7 @@ public class ApiAutomationService {
|
||||||
try {
|
try {
|
||||||
if (request.getConfig() != null && StringUtils.isNotBlank(request.getConfig().getResourcePoolId())) {
|
if (request.getConfig() != null && StringUtils.isNotBlank(request.getConfig().getResourcePoolId())) {
|
||||||
RunModeDataDTO runModeDataDTO = new RunModeDataDTO();
|
RunModeDataDTO runModeDataDTO = new RunModeDataDTO();
|
||||||
runModeDataDTO.setTestId(scenario.getId());
|
runModeDataDTO.setTestId(testPlanScenarioId);
|
||||||
runModeDataDTO.setPlanEnvMap(planEnvMap);
|
runModeDataDTO.setPlanEnvMap(planEnvMap);
|
||||||
runModeDataDTO.setReport(report);
|
runModeDataDTO.setReport(report);
|
||||||
executeQueue.put(report.getId(), runModeDataDTO);
|
executeQueue.put(report.getId(), runModeDataDTO);
|
||||||
|
@ -1462,12 +1461,14 @@ public class ApiAutomationService {
|
||||||
// 增加一个本地锁,防止并发找不到资源
|
// 增加一个本地锁,防止并发找不到资源
|
||||||
if (request.getConfig() != null && StringUtils.isNotEmpty(request.getConfig().getResourcePoolId())) {
|
if (request.getConfig() != null && StringUtils.isNotEmpty(request.getConfig().getResourcePoolId())) {
|
||||||
String testPlanScenarioId = "";
|
String testPlanScenarioId = "";
|
||||||
|
String testId = executeQueue.get(reportId).getTestId();
|
||||||
if (request.getScenarioTestPlanIdMap() != null && request.getScenarioTestPlanIdMap().containsKey(executeQueue.get(reportId).getTestId())) {
|
if (request.getScenarioTestPlanIdMap() != null && request.getScenarioTestPlanIdMap().containsKey(executeQueue.get(reportId).getTestId())) {
|
||||||
testPlanScenarioId = request.getScenarioTestPlanIdMap().get(executeQueue.get(reportId).getTestId());
|
testPlanScenarioId = executeQueue.get(reportId).getTestId();
|
||||||
|
testId = request.getScenarioTestPlanIdMap().get(executeQueue.get(reportId).getTestId());
|
||||||
} else {
|
} else {
|
||||||
testPlanScenarioId = request.getPlanScenarioId();
|
testPlanScenarioId = request.getPlanScenarioId();
|
||||||
}
|
}
|
||||||
jMeterService.runTest(executeQueue.get(reportId).getTestId(), reportId, request.getRunMode(), testPlanScenarioId, request.getConfig());
|
jMeterService.runTest(testId, reportId, request.getRunMode(), testPlanScenarioId, request.getConfig());
|
||||||
} else {
|
} else {
|
||||||
jMeterService.runLocal(reportId, request.getConfig(), executeQueue.get(reportId).getHashTree(),
|
jMeterService.runLocal(reportId, request.getConfig(), executeQueue.get(reportId).getHashTree(),
|
||||||
TriggerMode.BATCH.name().equals(request.getTriggerMode()) ? TriggerMode.BATCH.name() : request.getReportId(), request.getRunMode());
|
TriggerMode.BATCH.name().equals(request.getTriggerMode()) ? TriggerMode.BATCH.name() : request.getReportId(), request.getRunMode());
|
||||||
|
|
|
@ -230,7 +230,6 @@ public class ApiDefinitionExecResultService {
|
||||||
* @param type
|
* @param type
|
||||||
*/
|
*/
|
||||||
public void saveApiResultByScheduleTask(TestResult result, String testPlanReportId, String type) {
|
public void saveApiResultByScheduleTask(TestResult result, String testPlanReportId, String type) {
|
||||||
testPlanLog.info("TestPlanReportId[" + testPlanReportId + "] APICASE OVER.");
|
|
||||||
String saveResultType = type;
|
String saveResultType = type;
|
||||||
if (StringUtils.equalsAny(saveResultType, ApiRunMode.SCHEDULE_API_PLAN.name(), ApiRunMode.JENKINS_API_PLAN.name(), ApiRunMode.MANUAL_PLAN.name())) {
|
if (StringUtils.equalsAny(saveResultType, ApiRunMode.SCHEDULE_API_PLAN.name(), ApiRunMode.JENKINS_API_PLAN.name(), ApiRunMode.MANUAL_PLAN.name())) {
|
||||||
saveResultType = ApiRunMode.API_PLAN.name();
|
saveResultType = ApiRunMode.API_PLAN.name();
|
||||||
|
@ -240,14 +239,25 @@ public class ApiDefinitionExecResultService {
|
||||||
Map<String, String> apiIdResultMap = new HashMap<>();
|
Map<String, String> apiIdResultMap = new HashMap<>();
|
||||||
Map<String, String> caseReportMap = new HashMap<>();
|
Map<String, String> caseReportMap = new HashMap<>();
|
||||||
|
|
||||||
|
String testId = result.getTestId();
|
||||||
|
if(testId.contains(":")){
|
||||||
|
String [] testIdArr = testId.split(":");
|
||||||
|
if(testIdArr.length == 3){
|
||||||
|
result.setTestId(testIdArr[2]);
|
||||||
|
}else {
|
||||||
|
result.setTestId(testIdArr[0]);
|
||||||
|
}
|
||||||
|
testPlanReportId = testIdArr[1];
|
||||||
|
}
|
||||||
|
String creator = TestPlanReportExecuteCatch.getCreator(testPlanReportId);
|
||||||
if (CollectionUtils.isNotEmpty(result.getScenarios())) {
|
if (CollectionUtils.isNotEmpty(result.getScenarios())) {
|
||||||
result.getScenarios().forEach(scenarioResult -> {
|
result.getScenarios().forEach(scenarioResult -> {
|
||||||
final boolean[] isFirst = {true};
|
final boolean[] isFirst = {true};
|
||||||
if (scenarioResult != null && CollectionUtils.isNotEmpty(scenarioResult.getRequestResults())) {
|
if (scenarioResult != null && CollectionUtils.isNotEmpty(scenarioResult.getRequestResults())) {
|
||||||
scenarioResult.getRequestResults().forEach(item -> {
|
scenarioResult.getRequestResults().forEach(item -> {
|
||||||
String creator = TestPlanReportExecuteCatch.getCreator(testPlanReportId);
|
|
||||||
if (!StringUtils.startsWithAny(item.getName(), "PRE_PROCESSOR_ENV_", "POST_PROCESSOR_ENV_")) {
|
if (!StringUtils.startsWithAny(item.getName(), "PRE_PROCESSOR_ENV_", "POST_PROCESSOR_ENV_")) {
|
||||||
ApiDefinitionExecResult saveResult = MessageCache.caseExecResourceLock.get(result.getTestId());
|
ApiDefinitionExecResult saveResult = MessageCache.caseExecResourceLock.get(result.getTestId());
|
||||||
|
|
||||||
if (saveResult == null) {
|
if (saveResult == null) {
|
||||||
saveResult = apiDefinitionExecResultMapper.selectByPrimaryKey(result.getTestId());
|
saveResult = apiDefinitionExecResultMapper.selectByPrimaryKey(result.getTestId());
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,7 @@ package io.metersphere.api.service;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import io.metersphere.api.dto.definition.request.MsTestPlan;
|
import io.metersphere.api.dto.definition.request.MsTestPlan;
|
||||||
import io.metersphere.api.dto.scenario.request.BodyFile;
|
import io.metersphere.api.dto.scenario.request.BodyFile;
|
||||||
import io.metersphere.base.domain.ApiScenarioWithBLOBs;
|
import io.metersphere.base.domain.*;
|
||||||
import io.metersphere.base.domain.JarConfig;
|
|
||||||
import io.metersphere.base.domain.TestPlanApiScenario;
|
|
||||||
import io.metersphere.base.mapper.ApiScenarioMapper;
|
import io.metersphere.base.mapper.ApiScenarioMapper;
|
||||||
import io.metersphere.base.mapper.TestPlanApiScenarioMapper;
|
import io.metersphere.base.mapper.TestPlanApiScenarioMapper;
|
||||||
import io.metersphere.commons.constants.ApiRunMode;
|
import io.metersphere.commons.constants.ApiRunMode;
|
||||||
|
@ -52,27 +50,34 @@ public class ApiJmeterFileService {
|
||||||
return listBytesToZip(files);
|
return listBytesToZip(files);
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] downloadJmeterFiles(String runMode, String testId, String reportId, String testPlanScenarioId) {
|
public byte[] downloadJmeterFiles(String runMode, String remoteTestId, String reportId, String testPlanScenarioId) {
|
||||||
Map<String, String> planEnvMap = new HashMap<>();
|
Map<String, String> planEnvMap = new HashMap<>();
|
||||||
if (StringUtils.isNotEmpty(testPlanScenarioId)) {
|
if (StringUtils.isNotEmpty(testPlanScenarioId)) {
|
||||||
// 获取场景用例单独的执行环境
|
// 获取场景用例单独的执行环境
|
||||||
TestPlanApiScenario planApiScenario = testPlanApiScenarioMapper.selectByPrimaryKey(testPlanScenarioId);
|
TestPlanApiScenario planApiScenario = testPlanApiScenarioMapper.selectByPrimaryKey(testPlanScenarioId);
|
||||||
String environment = planApiScenario.getEnvironment();
|
if(planApiScenario != null){
|
||||||
if (StringUtils.isNotBlank(environment)) {
|
String environment = planApiScenario.getEnvironment();
|
||||||
planEnvMap = JSON.parseObject(environment, Map.class);
|
if (StringUtils.isNotBlank(environment)) {
|
||||||
|
planEnvMap = JSON.parseObject(environment, Map.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
HashTree hashTree;
|
HashTree hashTree;
|
||||||
if (ApiRunMode.DEFINITION.name().equals(runMode) || ApiRunMode.API_PLAN.name().equals(runMode)) {
|
if (ApiRunMode.DEFINITION.name().equals(runMode) || ApiRunMode.API_PLAN.name().equals(runMode) || ApiRunMode.MANUAL_PLAN.name().equals(runMode)) {
|
||||||
|
String testId = remoteTestId;
|
||||||
|
if(remoteTestId.contains(":")){
|
||||||
|
//执行测试计划案例时会有拼接ID,ID为 planTestCaseId:测试计划报告ID
|
||||||
|
testId = remoteTestId.split(":")[0];
|
||||||
|
}
|
||||||
hashTree = testPlanApiCaseService.generateHashTree(testId);
|
hashTree = testPlanApiCaseService.generateHashTree(testId);
|
||||||
} else {
|
} else {
|
||||||
ApiScenarioWithBLOBs item = apiScenarioMapper.selectByPrimaryKey(testId);
|
ApiScenarioWithBLOBs item = apiScenarioMapper.selectByPrimaryKey(remoteTestId);
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
MSException.throwException("未找到执行场景。");
|
MSException.throwException("未找到执行场景。");
|
||||||
}
|
}
|
||||||
hashTree = apiAutomationService.generateHashTree(item, reportId, planEnvMap);
|
hashTree = apiAutomationService.generateHashTree(item, reportId, planEnvMap);
|
||||||
}
|
}
|
||||||
return zipFilesToByteArray(testId, hashTree);
|
return zipFilesToByteArray(remoteTestId, hashTree);
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] downloadJmx(String runMode, String testId, String reportId, String testPlanScenarioId) {
|
public byte[] downloadJmx(String runMode, String testId, String reportId, String testPlanScenarioId) {
|
||||||
|
|
|
@ -90,6 +90,10 @@ public class TestResultService {
|
||||||
if (StringUtils.equalsAny(runMode, ApiRunMode.SCHEDULE_API_PLAN.name(), ApiRunMode.JENKINS_API_PLAN.name(), ApiRunMode.MANUAL_PLAN.name())) {
|
if (StringUtils.equalsAny(runMode, ApiRunMode.SCHEDULE_API_PLAN.name(), ApiRunMode.JENKINS_API_PLAN.name(), ApiRunMode.MANUAL_PLAN.name())) {
|
||||||
apiDefinitionExecResultService.saveApiResultByScheduleTask(testResult, debugReportId, runMode);
|
apiDefinitionExecResultService.saveApiResultByScheduleTask(testResult, debugReportId, runMode);
|
||||||
} else {
|
} else {
|
||||||
|
String testResultTestId = testResult.getTestId();
|
||||||
|
if(testResultTestId.contains(":")){
|
||||||
|
testResult.setTestId(testResultTestId.split(":")[0]);
|
||||||
|
}
|
||||||
apiDefinitionExecResultService.saveApiResult(testResult, ApiRunMode.API_PLAN.name(), TriggerMode.MANUAL.name());
|
apiDefinitionExecResultService.saveApiResult(testResult, ApiRunMode.API_PLAN.name(), TriggerMode.MANUAL.name());
|
||||||
}
|
}
|
||||||
} else if (StringUtils.equalsAny(runMode, ApiRunMode.SCENARIO.name(), ApiRunMode.SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO.name(), ApiRunMode.JENKINS_SCENARIO_PLAN.name())) {
|
} else if (StringUtils.equalsAny(runMode, ApiRunMode.SCENARIO.name(), ApiRunMode.SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO_PLAN.name(), ApiRunMode.SCHEDULE_SCENARIO.name(), ApiRunMode.JENKINS_SCENARIO_PLAN.name())) {
|
||||||
|
|
|
@ -41,7 +41,9 @@ public class SerialScenarioExecTask<T> implements Callable<T> {
|
||||||
if (request.getConfig() != null && StringUtils.isNotBlank(request.getConfig().getResourcePoolId())) {
|
if (request.getConfig() != null && StringUtils.isNotBlank(request.getConfig().getResourcePoolId())) {
|
||||||
String testPlanScenarioId = "";
|
String testPlanScenarioId = "";
|
||||||
if (request.getScenarioTestPlanIdMap() != null && request.getScenarioTestPlanIdMap().containsKey(runModeDataDTO.getTestId())) {
|
if (request.getScenarioTestPlanIdMap() != null && request.getScenarioTestPlanIdMap().containsKey(runModeDataDTO.getTestId())) {
|
||||||
testPlanScenarioId = request.getScenarioTestPlanIdMap().get(runModeDataDTO.getTestId());
|
testPlanScenarioId = runModeDataDTO.getTestId();
|
||||||
|
String scenarioId = request.getScenarioTestPlanIdMap().get(runModeDataDTO.getTestId());
|
||||||
|
runModeDataDTO.setTestId(scenarioId);
|
||||||
} else {
|
} else {
|
||||||
testPlanScenarioId = request.getPlanScenarioId();
|
testPlanScenarioId = request.getPlanScenarioId();
|
||||||
}
|
}
|
||||||
|
|
|
@ -391,6 +391,7 @@ public class TestPlanApiCaseService {
|
||||||
apiResult.setStartTime(System.currentTimeMillis());
|
apiResult.setStartTime(System.currentTimeMillis());
|
||||||
apiResult.setType(ApiRunMode.API_PLAN.name());
|
apiResult.setType(ApiRunMode.API_PLAN.name());
|
||||||
apiResult.setStatus(status);
|
apiResult.setStatus(status);
|
||||||
|
apiResult.setContent(request.getPlanReportId());
|
||||||
batchMapper.insert(apiResult);
|
batchMapper.insert(apiResult);
|
||||||
return apiResult;
|
return apiResult;
|
||||||
}
|
}
|
||||||
|
@ -468,6 +469,7 @@ public class TestPlanApiCaseService {
|
||||||
mapper.updateByPrimaryKey(execResult);
|
mapper.updateByPrimaryKey(execResult);
|
||||||
modeDataDTO.setApiCaseId(execResult.getId());
|
modeDataDTO.setApiCaseId(execResult.getId());
|
||||||
modeDataDTO.setDebugReportId(request.getPlanReportId());
|
modeDataDTO.setDebugReportId(request.getPlanReportId());
|
||||||
|
modeDataDTO.setTestId(modeDataDTO.getTestId()+":"+request.getPlanReportId()+ ":"+ execResult.getId());
|
||||||
Future<ApiDefinitionExecResult> future = executorService.submit(new SerialApiExecTask(jMeterService, mapper, modeDataDTO, request.getConfig(), request.getTriggerMode()));
|
Future<ApiDefinitionExecResult> future = executorService.submit(new SerialApiExecTask(jMeterService, mapper, modeDataDTO, request.getConfig(), request.getTriggerMode()));
|
||||||
ApiDefinitionExecResult report = future.get();
|
ApiDefinitionExecResult report = future.get();
|
||||||
// 如果开启失败结束执行,则判断返回结果状态
|
// 如果开启失败结束执行,则判断返回结果状态
|
||||||
|
@ -538,14 +540,16 @@ public class TestPlanApiCaseService {
|
||||||
try {
|
try {
|
||||||
String debugId = request.getPlanReportId();
|
String debugId = request.getPlanReportId();
|
||||||
if (request.getConfig() != null && StringUtils.isNotEmpty(request.getConfig().getResourcePoolId())) {
|
if (request.getConfig() != null && StringUtils.isNotEmpty(request.getConfig().getResourcePoolId())) {
|
||||||
jMeterService.runTest(testPlanApiCase.getId(), reportId, request.getTriggerMode(), request.getPlanReportId(), request.getConfig());
|
String testId = testPlanApiCase.getId()+":"+ request.getPlanReportId() + ":" +reportId;
|
||||||
|
jMeterService.runTest(testId, reportId, request.getTriggerMode(), request.getPlanReportId(), request.getConfig());
|
||||||
executeThreadIdMap.put(testPlanApiCase.getApiCaseId(),testPlanApiCase.getId());
|
executeThreadIdMap.put(testPlanApiCase.getApiCaseId(),testPlanApiCase.getId());
|
||||||
} else {
|
} else {
|
||||||
HashTree hashTree = generateHashTree(testPlanApiCase.getId());
|
HashTree hashTree = generateHashTree(testPlanApiCase.getId());
|
||||||
if(StringUtils.isEmpty(debugId)){
|
if(StringUtils.isEmpty(debugId)){
|
||||||
debugId = TriggerMode.BATCH.name();
|
debugId = TriggerMode.BATCH.name();
|
||||||
}
|
}
|
||||||
jMeterService.runLocal(reportId,request.getConfig(), hashTree, debugId, request.getTriggerMode());
|
String testId = reportId+":"+ request.getPlanReportId();
|
||||||
|
jMeterService.runLocal(testId,request.getConfig(), hashTree, debugId, request.getTriggerMode());
|
||||||
executeThreadIdMap.put(testPlanApiCase.getId(),reportId);
|
executeThreadIdMap.put(testPlanApiCase.getId(),reportId);
|
||||||
}
|
}
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
|
|
|
@ -1182,4 +1182,13 @@ public class TestPlanReportService {
|
||||||
testPlanReportDTO.setName(testPlanReport.getName());
|
testPlanReportDTO.setName(testPlanReport.getName());
|
||||||
return testPlanReportDTO;
|
return testPlanReportDTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void finishReport(TestPlanReport testPlanReport) {
|
||||||
|
long endTime = System.currentTimeMillis();
|
||||||
|
testPlanReport.setEndTime(endTime);
|
||||||
|
testPlanReport.setUpdateTime(endTime);
|
||||||
|
|
||||||
|
testPlanReport.setStatus(TestPlanReportStatus.FAILED.name());
|
||||||
|
testPlanReportMapper.updateByPrimaryKey(testPlanReport);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,7 +182,7 @@ public class TestPlanScenarioCaseService {
|
||||||
Map<String, String> scenarioIdApiScarionMap = new HashMap<>();
|
Map<String, String> scenarioIdApiScarionMap = new HashMap<>();
|
||||||
for (TestPlanApiScenario apiScenario : testPlanApiScenarioList) {
|
for (TestPlanApiScenario apiScenario : testPlanApiScenarioList) {
|
||||||
scenarioIds.add(apiScenario.getApiScenarioId());
|
scenarioIds.add(apiScenario.getApiScenarioId());
|
||||||
scenarioIdApiScarionMap.put(apiScenario.getApiScenarioId(), apiScenario.getId());
|
scenarioIdApiScarionMap.put(apiScenario.getId(), apiScenario.getApiScenarioId());
|
||||||
}
|
}
|
||||||
if (scenarioIdApiScarionMap.isEmpty()) {
|
if (scenarioIdApiScarionMap.isEmpty()) {
|
||||||
MSException.throwException("未找到执行场景!");
|
MSException.throwException("未找到执行场景!");
|
||||||
|
|
|
@ -1063,15 +1063,53 @@ public class TestPlanService {
|
||||||
|
|
||||||
@Transactional(propagation = Propagation.NOT_SUPPORTED)
|
@Transactional(propagation = Propagation.NOT_SUPPORTED)
|
||||||
public String run(String testPlanID, String projectID, String userId, String triggerMode, String apiRunConfig) {
|
public String run(String testPlanID, String projectID, String userId, String triggerMode, String apiRunConfig) {
|
||||||
extTestPlanMapper.updateActualEndTimeIsNullById(testPlanID);
|
RunModeConfig runModeConfig = null;
|
||||||
|
try {
|
||||||
|
runModeConfig = JSONObject.parseObject(apiRunConfig, RunModeConfig.class);
|
||||||
|
runModeConfig.setOnSampleError(false);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (runModeConfig == null) {
|
||||||
|
runModeConfig = new RunModeConfig();
|
||||||
|
runModeConfig.setMode("serial");
|
||||||
|
runModeConfig.setReportType("iddReport");
|
||||||
|
runModeConfig.setEnvMap(new HashMap<>());
|
||||||
|
runModeConfig.setOnSampleError(false);
|
||||||
|
}else {
|
||||||
|
if(runModeConfig.getEnvMap() == null){
|
||||||
|
runModeConfig.setEnvMap(new HashMap<>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//创建测试报告,然后返回的ID重新赋值为resourceID,作为后续的参数
|
//创建测试报告,然后返回的ID重新赋值为resourceID,作为后续的参数
|
||||||
TestPlanScheduleReportInfoDTO reportInfoDTO = testPlanReportService.genTestPlanReportBySchedule(projectID, testPlanID, userId, triggerMode);
|
TestPlanScheduleReportInfoDTO reportInfoDTO = testPlanReportService.genTestPlanReportBySchedule(projectID, testPlanID, userId, triggerMode);
|
||||||
|
|
||||||
TestPlanReport testPlanReport = reportInfoDTO.getTestPlanReport();
|
TestPlanReport testPlanReport = reportInfoDTO.getTestPlanReport();
|
||||||
Map<String, String> planScenarioIdsMap = reportInfoDTO.getPlanScenarioIdMap();
|
Map<String, String> planScenarioIdsMap = reportInfoDTO.getPlanScenarioIdMap();
|
||||||
Map<String, String> planApiCaseMap = reportInfoDTO.getApiTestCaseDataMap();
|
Map<String, String> planApiCaseMap = reportInfoDTO.getApiTestCaseDataMap();
|
||||||
Map<String, String> performanceIdMap = reportInfoDTO.getPerformanceIdMap();
|
Map<String, String> performanceIdMap = reportInfoDTO.getPerformanceIdMap();
|
||||||
|
|
||||||
|
if (runModeConfig.getMode().equals(RunModeConstants.PARALLEL.toString())) {
|
||||||
|
// 校验并发数量
|
||||||
|
int count = 50;
|
||||||
|
BaseSystemConfigDTO dto = systemParameterService.getBaseInfo();
|
||||||
|
if (StringUtils.isNotEmpty(dto.getConcurrency())) {
|
||||||
|
count = Integer.parseInt(dto.getConcurrency());
|
||||||
|
}
|
||||||
|
if (planApiCaseMap.size() > count) {
|
||||||
|
testPlanReportService.finishReport(reportInfoDTO.getTestPlanReport());
|
||||||
|
MSException.throwException("并发超过"+count+",数量过大,请重新选择!");
|
||||||
|
}
|
||||||
|
if (planScenarioIdsMap.size() > count) {
|
||||||
|
testPlanReportService.finishReport(reportInfoDTO.getTestPlanReport());
|
||||||
|
MSException.throwException("并发超过"+count+",数量过大,请重新选择!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
extTestPlanMapper.updateActualEndTimeIsNullById(testPlanID);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
String planReportId = testPlanReport.getId();
|
String planReportId = testPlanReport.getId();
|
||||||
|
|
||||||
testPlanLog.info("ReportId[" + planReportId + "] created. TestPlanID:[" + testPlanID + "]. " + "API Run Config:【" + apiRunConfig + "】");
|
testPlanLog.info("ReportId[" + planReportId + "] created. TestPlanID:[" + testPlanID + "]. " + "API Run Config:【" + apiRunConfig + "】");
|
||||||
|
@ -1138,26 +1176,6 @@ public class TestPlanService {
|
||||||
}
|
}
|
||||||
testPlanLog.info("ReportId[" + planReportId + "] start run. TestPlanID:[" + testPlanID + "]. Execute api :" + JSONObject.toJSONString(executeApiCaseIdMap) + "; Execute scenario:" + JSONObject.toJSONString(executeScenarioCaseIdMap) + "; Execute performance:" + JSONObject.toJSONString(executePerformanceIdMap));
|
testPlanLog.info("ReportId[" + planReportId + "] start run. TestPlanID:[" + testPlanID + "]. Execute api :" + JSONObject.toJSONString(executeApiCaseIdMap) + "; Execute scenario:" + JSONObject.toJSONString(executeScenarioCaseIdMap) + "; Execute performance:" + JSONObject.toJSONString(executePerformanceIdMap));
|
||||||
TestPlanReportExecuteCatch.updateApiTestPlanExecuteInfo(planReportId, executeApiCaseIdMap, executeScenarioCaseIdMap, executePerformanceIdMap);
|
TestPlanReportExecuteCatch.updateApiTestPlanExecuteInfo(planReportId, executeApiCaseIdMap, executeScenarioCaseIdMap, executePerformanceIdMap);
|
||||||
|
|
||||||
RunModeConfig runModeConfig = null;
|
|
||||||
try {
|
|
||||||
runModeConfig = JSONObject.parseObject(apiRunConfig, RunModeConfig.class);
|
|
||||||
runModeConfig.setOnSampleError(false);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (runModeConfig == null) {
|
|
||||||
runModeConfig = new RunModeConfig();
|
|
||||||
runModeConfig.setMode("serial");
|
|
||||||
runModeConfig.setReportType("iddReport");
|
|
||||||
runModeConfig.setEnvMap(new HashMap<>());
|
|
||||||
runModeConfig.setOnSampleError(false);
|
|
||||||
}else {
|
|
||||||
if(runModeConfig.getEnvMap() == null){
|
|
||||||
runModeConfig.setEnvMap(new HashMap<>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//执行接口案例任务
|
//执行接口案例任务
|
||||||
this.executeApiTestCase(triggerMode, planReportId,new ArrayList<>(planApiCaseMap.keySet()), runModeConfig);
|
this.executeApiTestCase(triggerMode, planReportId,new ArrayList<>(planApiCaseMap.keySet()), runModeConfig);
|
||||||
//执行场景执行任务
|
//执行场景执行任务
|
||||||
|
|
|
@ -39,13 +39,13 @@ public class SerialApiExecTask<T> implements Callable<T> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (config != null && StringUtils.isNotBlank(config.getResourcePoolId())) {
|
if (config != null && StringUtils.isNotBlank(config.getResourcePoolId())) {
|
||||||
jMeterService.runTest(runModeDataDTO.getTestId(), runModeDataDTO.getApiCaseId(), runMode, runModeDataDTO.getDebugReportId(), config);
|
jMeterService.runTest(runModeDataDTO.getTestId(), runModeDataDTO.getApiCaseId(), runMode, null, config);
|
||||||
} else {
|
} else {
|
||||||
String debugId = runModeDataDTO.getDebugReportId();
|
String debugId = runModeDataDTO.getDebugReportId();
|
||||||
if(debugId == null){
|
if(debugId == null){
|
||||||
debugId = runModeDataDTO.getReport() != null ? runModeDataDTO.getReport().getTriggerMode() : null;
|
debugId = runModeDataDTO.getReport() != null ? runModeDataDTO.getReport().getTriggerMode() : null;
|
||||||
}
|
}
|
||||||
jMeterService.runLocal(runModeDataDTO.getApiCaseId(), config, runModeDataDTO.getHashTree(), debugId, runMode);
|
jMeterService.runLocal(runModeDataDTO.getApiCaseId()+":"+debugId, config, runModeDataDTO.getHashTree(), debugId, runMode);
|
||||||
}
|
}
|
||||||
// 轮询查看报告状态,最多200次,防止死循环
|
// 轮询查看报告状态,最多200次,防止死循环
|
||||||
ApiDefinitionExecResult report = null;
|
ApiDefinitionExecResult report = null;
|
||||||
|
@ -53,7 +53,7 @@ public class SerialApiExecTask<T> implements Callable<T> {
|
||||||
while (index < 200) {
|
while (index < 200) {
|
||||||
Thread.sleep(3000);
|
Thread.sleep(3000);
|
||||||
index++;
|
index++;
|
||||||
report = mapper.selectByPrimaryKey(runModeDataDTO.getApiCaseId());
|
report = mapper.selectByPrimaryKey(runModeDataDTO.getApiCaseId());
|
||||||
if (report != null && !report.getStatus().equals(APITestStatus.Running.name())) {
|
if (report != null && !report.getStatus().equals(APITestStatus.Running.name())) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div v-if="isShow">
|
<div v-if="isShow">
|
||||||
|
<!-- <div :style="isShow? {} : {display: 'none'}">-->
|
||||||
<el-dropdown placement="bottom" trigger="click" size="medium">
|
<el-dropdown placement="bottom" trigger="click" size="medium">
|
||||||
<div @click.stop class="show-more-btn">
|
<div @click.stop class="show-more-btn">
|
||||||
<el-tooltip popper-class="batch-popper" :value="true && !hasShowed" effect="dark" :content="$t('test_track.case.batch_operate')"
|
<el-tooltip popper-class="batch-popper" :value="true && !hasShowed" effect="dark" :content="$t('test_track.case.batch_operate')"
|
||||||
|
|
|
@ -526,8 +526,8 @@ export default {
|
||||||
this.$refs.taskCenter.open();
|
this.$refs.taskCenter.open();
|
||||||
this.result = this.$post('test/plan/run/', param,() => {
|
this.result = this.$post('test/plan/run/', param,() => {
|
||||||
this.$success(this.$t('commons.run_success'));
|
this.$success(this.$t('commons.run_success'));
|
||||||
}, () => {
|
}, error => {
|
||||||
this.$error(this.$t('commons.run_fail'));
|
// this.$error(error.message);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue