refactor(接口测试): 优化用例和场景批量执行

This commit is contained in:
fit2-zhao 2022-02-23 16:10:37 +08:00 committed by jianxing
parent 44bf144594
commit 6a9983903d
4 changed files with 84 additions and 83 deletions

View File

@ -116,16 +116,19 @@ public class ApiCaseExecuteService {
DBTestQueue deQueue = apiExecutionQueueService.add(executeQueue, poolId, ApiRunMode.API_PLAN.name(), request.getPlanReportId(), reportType, runMode, request.getConfig());
// 开始选择执行模式
if (request.getConfig() != null && request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString())) {
LoggerUtil.debug("开始串行执行");
if (deQueue != null && deQueue.getQueue() != null) {
apiScenarioSerialService.serial(deQueue, deQueue.getQueue());
}
} else {
LoggerUtil.debug("开始并发执行");
if (deQueue != null && deQueue.getQueue() != null) {
apiCaseParallelExecuteService.parallel(executeQueue, request.getConfig(), deQueue, runMode);
}
if (deQueue != null && deQueue.getQueue() != null) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Thread.currentThread().setName("PLAN-CASE" + request.getPlanReportId());
if (request.getConfig() != null && request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString())) {
apiScenarioSerialService.serial(deQueue, deQueue.getQueue());
} else {
apiCaseParallelExecuteService.parallel(executeQueue, request.getConfig(), deQueue, runMode);
}
}
});
thread.start();
}
return responseDTOS;
}
@ -153,8 +156,8 @@ public class ApiCaseExecuteService {
ApiTestCaseExample example = new ApiTestCaseExample();
example.createCriteria().andIdIn(request.getIds());
List<ApiTestCaseWithBLOBs> list = apiTestCaseMapper.selectByExampleWithBLOBs(example);
LoggerUtil.debug("查询到执行数据:" + list.size());
List<ApiTestCaseWithBLOBs> caseList = apiTestCaseMapper.selectByExampleWithBLOBs(example);
LoggerUtil.debug("查询到执行数据:" + caseList.size());
// 集合报告设置
String serialReportId = null;
@ -164,7 +167,7 @@ public class ApiCaseExecuteService {
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.setVersionId(caseList.get(0).getVersionId());
report.setName(request.getConfig().getReportName());
report.setTestName(request.getConfig().getReportName());
report.setId(serialReportId);
@ -182,7 +185,7 @@ public class ApiCaseExecuteService {
FixedOrderComparator<String> fixedOrderComparator = new FixedOrderComparator<String>(request.getIds());
fixedOrderComparator.setUnknownObjectBehavior(FixedOrderComparator.UnknownObjectBehavior.BEFORE);
BeanComparator beanComparator = new BeanComparator("id", fixedOrderComparator);
Collections.sort(list, beanComparator);
Collections.sort(caseList, beanComparator);
}
}
@ -195,7 +198,7 @@ public class ApiCaseExecuteService {
String status = request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString()) ? APITestStatus.Waiting.name() : APITestStatus.Running.name();
String finalSerialReportId = serialReportId;
list.forEach(caseWithBLOBs -> {
caseList.forEach(caseWithBLOBs -> {
ApiDefinitionExecResult report = ApiDefinitionExecResultUtil.initBase(caseWithBLOBs.getId(), APITestStatus.Running.name(), null, request.getConfig());
report.setStatus(status);
report.setName(caseWithBLOBs.getName());
@ -214,16 +217,19 @@ public class ApiCaseExecuteService {
String poolId = request.getConfig().getResourcePoolId();
DBTestQueue deQueue = apiExecutionQueueService.add(executeQueue, poolId, ApiRunMode.DEFINITION.name(), finalSerialReportId, reportType, ApiRunMode.DEFINITION.name(), request.getConfig());
// 开始选择执行模式
if (request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString())) {
LoggerUtil.debug("开始串行执行");
if (deQueue != null && deQueue.getQueue() != null) {
apiScenarioSerialService.serial(deQueue, deQueue.getQueue());
}
} else {
LoggerUtil.debug("开始并发执行");
if (deQueue != null && deQueue.getQueue() != null) {
apiCaseParallelExecuteService.parallel(executeQueue, request.getConfig(), deQueue, ApiRunMode.DEFINITION.name());
}
if (deQueue != null && deQueue.getQueue() != null) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Thread.currentThread().setName("API-CASE-RUN");
if (request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString())) {
apiScenarioSerialService.serial(deQueue, deQueue.getQueue());
} else {
apiCaseParallelExecuteService.parallel(executeQueue, request.getConfig(), deQueue, ApiRunMode.DEFINITION.name());
}
}
});
thread.start();
}
return responseDTOS;
}

View File

@ -22,32 +22,25 @@ public class ApiCaseParallelExecuteService {
private JMeterService jMeterService;
public void parallel(Map<String, ApiDefinitionExecResult> executeQueue, RunModeConfigDTO config, DBTestQueue executionQueue, String runMode) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Thread.currentThread().setName("API-CASE-THREAD");
for (String testId : executeQueue.keySet()) {
ApiDefinitionExecResult result = executeQueue.get(testId);
String reportId = result.getId();
HashTree hashTree = null;
JmeterRunRequestDTO runRequest = new JmeterRunRequestDTO(testId, reportId, runMode, hashTree);
runRequest.setPool(GenerateHashTreeUtil.isResourcePool(config.getResourcePoolId()));
runRequest.setTestPlanReportId(executionQueue.getReportId());
runRequest.setPoolId(config.getResourcePoolId());
runRequest.setReportType(executionQueue.getReportType());
runRequest.setRunType(RunModeConstants.PARALLEL.toString());
runRequest.setQueueId(executionQueue.getId());
if (executionQueue.getQueue() != null) {
runRequest.setPlatformUrl(executionQueue.getQueue().getId());
}
if (!GenerateHashTreeUtil.isResourcePool(config.getResourcePoolId()).isPool()) {
hashTree = apiScenarioSerialService.generateHashTree(testId, config.getEnvMap(), runRequest);
runRequest.setHashTree(hashTree);
}
jMeterService.run(runRequest);
}
for (String testId : executeQueue.keySet()) {
ApiDefinitionExecResult result = executeQueue.get(testId);
String reportId = result.getId();
HashTree hashTree = null;
JmeterRunRequestDTO runRequest = new JmeterRunRequestDTO(testId, reportId, runMode, hashTree);
runRequest.setPool(GenerateHashTreeUtil.isResourcePool(config.getResourcePoolId()));
runRequest.setTestPlanReportId(executionQueue.getReportId());
runRequest.setPoolId(config.getResourcePoolId());
runRequest.setReportType(executionQueue.getReportType());
runRequest.setRunType(RunModeConstants.PARALLEL.toString());
runRequest.setQueueId(executionQueue.getId());
if (executionQueue.getQueue() != null) {
runRequest.setPlatformUrl(executionQueue.getQueue().getId());
}
});
thread.start();
if (!GenerateHashTreeUtil.isResourcePool(config.getResourcePoolId()).isPool()) {
hashTree = apiScenarioSerialService.generateHashTree(testId, config.getEnvMap(), runRequest);
runRequest.setHashTree(hashTree);
}
jMeterService.run(runRequest);
}
}
}

View File

@ -173,11 +173,20 @@ public class ApiScenarioExecuteService {
apiScenarioReportService.batchSave(executeQueue, serialReportId, request.getRunMode(), responseDTOS);
// 开始执行
if (StringUtils.equals(request.getConfig().getMode(), RunModeConstants.SERIAL.toString())) {
serialService.serial(executionQueue, executionQueue.getQueue());
} else {
parallelService.parallel(executeQueue, request, serialReportId, executionQueue);
}
String finalSerialReportId = serialReportId;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Thread.currentThread().setName("SCENARIO-PARALLEL-THREAD");
if (StringUtils.equals(request.getConfig().getMode(), RunModeConstants.SERIAL.toString())) {
serialService.serial(executionQueue, executionQueue.getQueue());
} else {
parallelService.parallel(executeQueue, request, finalSerialReportId, executionQueue);
}
}
});
thread.start();
return responseDTOS;
}

View File

@ -21,33 +21,26 @@ public class ApiScenarioParallelService {
private JMeterService jMeterService;
public void parallel(Map<String, RunModeDataDTO> executeQueue, RunScenarioRequest request, String serialReportId, DBTestQueue executionQueue) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Thread.currentThread().setName("SCENARIO-PARALLEL-THREAD");
for (String reportId : executeQueue.keySet()) {
RunModeDataDTO dataDTO = executeQueue.get(reportId);
JmeterRunRequestDTO runRequest = new JmeterRunRequestDTO(dataDTO.getTestId(), StringUtils.isNotEmpty(serialReportId) ? serialReportId : reportId, request.getRunMode(), null);
runRequest.setReportType(StringUtils.isNotEmpty(serialReportId) ? RunModeConstants.SET_REPORT.toString() : RunModeConstants.INDEPENDENCE.toString());
runRequest.setQueueId(executionQueue.getId());
if (request.getConfig() != null) {
runRequest.setPool(GenerateHashTreeUtil.isResourcePool(request.getConfig().getResourcePoolId()));
runRequest.setPoolId(request.getConfig().getResourcePoolId());
}
runRequest.setTestPlanReportId(request.getTestPlanReportId());
runRequest.setPlatformUrl(executionQueue.getDetailMap().get(reportId));
runRequest.setRunType(RunModeConstants.PARALLEL.toString());
if (LoggerUtil.getLogger().isDebugEnabled()) {
LoggerUtil.debug("Scenario run-开始并发执行:" + JSON.toJSONString(request));
}
// 本地执行生成hashTree
if (request.getConfig() != null && !runRequest.getPool().isPool()) {
runRequest.setHashTree(GenerateHashTreeUtil.generateHashTree(dataDTO.getScenario(), dataDTO.getPlanEnvMap(), runRequest));
}
jMeterService.run(runRequest);
}
for (String reportId : executeQueue.keySet()) {
RunModeDataDTO dataDTO = executeQueue.get(reportId);
JmeterRunRequestDTO runRequest = new JmeterRunRequestDTO(dataDTO.getTestId(), StringUtils.isNotEmpty(serialReportId) ? serialReportId : reportId, request.getRunMode(), null);
runRequest.setReportType(StringUtils.isNotEmpty(serialReportId) ? RunModeConstants.SET_REPORT.toString() : RunModeConstants.INDEPENDENCE.toString());
runRequest.setQueueId(executionQueue.getId());
if (request.getConfig() != null) {
runRequest.setPool(GenerateHashTreeUtil.isResourcePool(request.getConfig().getResourcePoolId()));
runRequest.setPoolId(request.getConfig().getResourcePoolId());
}
});
thread.start();
runRequest.setTestPlanReportId(request.getTestPlanReportId());
runRequest.setPlatformUrl(executionQueue.getDetailMap().get(reportId));
runRequest.setRunType(RunModeConstants.PARALLEL.toString());
if (LoggerUtil.getLogger().isDebugEnabled()) {
LoggerUtil.debug("Scenario run-开始并发执行:" + JSON.toJSONString(request));
}
// 本地执行生成hashTree
if (request.getConfig() != null && !runRequest.getPool().isPool()) {
runRequest.setHashTree(GenerateHashTreeUtil.generateHashTree(dataDTO.getScenario(), dataDTO.getPlanEnvMap(), runRequest));
}
jMeterService.run(runRequest);
}
}
}