refactor(接口测试): 并发任务分配节点优化
This commit is contained in:
parent
d56b7e1819
commit
9c5d8d69dd
|
@ -6,9 +6,12 @@ import io.metersphere.api.exec.utils.GenerateHashTreeUtil;
|
|||
import io.metersphere.api.jmeter.JMeterService;
|
||||
import io.metersphere.api.jmeter.utils.SmoothWeighted;
|
||||
import io.metersphere.base.domain.ApiDefinitionExecResult;
|
||||
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||
import io.metersphere.constants.RunModeConstants;
|
||||
import io.metersphere.dto.BaseSystemConfigDTO;
|
||||
import io.metersphere.dto.JmeterRunRequestDTO;
|
||||
import io.metersphere.dto.RunModeConfigDTO;
|
||||
import io.metersphere.service.SystemParameterService;
|
||||
import io.metersphere.vo.BooleanPool;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.apache.jorphan.collections.HashTree;
|
||||
|
@ -33,6 +36,8 @@ public class ApiCaseParallelExecuteService {
|
|||
if (pool.isPool()) {
|
||||
SmoothWeighted.setServerConfig(config.getResourcePoolId(), redisTemplate);
|
||||
}
|
||||
// 获取可以执行的资源池
|
||||
BaseSystemConfigDTO baseInfo = CommonBeanFactory.getBean(SystemParameterService.class).getBaseInfo();
|
||||
for (String testId : executeQueue.keySet()) {
|
||||
ApiDefinitionExecResult result = executeQueue.get(testId);
|
||||
String reportId = result.getId();
|
||||
|
@ -44,7 +49,7 @@ public class ApiCaseParallelExecuteService {
|
|||
runRequest.setRunType(RunModeConstants.PARALLEL.toString());
|
||||
runRequest.setQueueId(executionQueue.getId());
|
||||
if (MapUtils.isNotEmpty(executionQueue.getDetailMap())) {
|
||||
runRequest.setPlatformUrl(executionQueue.getDetailMap().get(result.getId()));
|
||||
runRequest.setPlatformUrl(GenerateHashTreeUtil.getPlatformUrl(baseInfo, runRequest, executionQueue.getDetailMap().get(result.getId())));
|
||||
}
|
||||
if (!pool.isPool()) {
|
||||
HashTree hashTree = apiScenarioSerialService.generateHashTree(testId, config.getEnvMap(), runRequest);
|
||||
|
|
|
@ -7,8 +7,11 @@ import io.metersphere.api.exec.queue.DBTestQueue;
|
|||
import io.metersphere.api.exec.utils.GenerateHashTreeUtil;
|
||||
import io.metersphere.api.jmeter.JMeterService;
|
||||
import io.metersphere.api.jmeter.utils.SmoothWeighted;
|
||||
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||
import io.metersphere.constants.RunModeConstants;
|
||||
import io.metersphere.dto.BaseSystemConfigDTO;
|
||||
import io.metersphere.dto.JmeterRunRequestDTO;
|
||||
import io.metersphere.service.SystemParameterService;
|
||||
import io.metersphere.utils.LoggerUtil;
|
||||
import io.metersphere.vo.BooleanPool;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
@ -31,6 +34,8 @@ public class ApiScenarioParallelService {
|
|||
if (pool.isPool()) {
|
||||
SmoothWeighted.setServerConfig(request.getConfig().getResourcePoolId(), redisTemplate);
|
||||
}
|
||||
// 获取可以执行的资源池
|
||||
BaseSystemConfigDTO baseInfo = CommonBeanFactory.getBean(SystemParameterService.class).getBaseInfo();
|
||||
for (String reportId : executeQueue.keySet()) {
|
||||
RunModeDataDTO dataDTO = executeQueue.get(reportId);
|
||||
JmeterRunRequestDTO runRequest = new JmeterRunRequestDTO(dataDTO.getTestId(), StringUtils.isNotEmpty(serialReportId) ? serialReportId : reportId, request.getRunMode(), null);
|
||||
|
@ -41,7 +46,7 @@ public class ApiScenarioParallelService {
|
|||
runRequest.setPoolId(request.getConfig().getResourcePoolId());
|
||||
|
||||
runRequest.setTestPlanReportId(request.getTestPlanReportId());
|
||||
runRequest.setPlatformUrl(executionQueue.getDetailMap().get(reportId));
|
||||
runRequest.setPlatformUrl(GenerateHashTreeUtil.getPlatformUrl(baseInfo, runRequest, executionQueue.getDetailMap().get(reportId)));
|
||||
runRequest.setRunType(RunModeConstants.PARALLEL.toString());
|
||||
if (LoggerUtil.getLogger().isDebugEnabled()) {
|
||||
LoggerUtil.debug("Scenario run-开始并发执行:" + JSON.toJSONString(request));
|
||||
|
|
|
@ -28,9 +28,11 @@ import io.metersphere.commons.utils.CommonBeanFactory;
|
|||
import io.metersphere.commons.utils.HashTreeUtil;
|
||||
import io.metersphere.commons.utils.LogUtil;
|
||||
import io.metersphere.constants.RunModeConstants;
|
||||
import io.metersphere.dto.BaseSystemConfigDTO;
|
||||
import io.metersphere.dto.JmeterRunRequestDTO;
|
||||
import io.metersphere.dto.ResultDTO;
|
||||
import io.metersphere.plugin.core.MsTestElement;
|
||||
import io.metersphere.service.SystemParameterService;
|
||||
import io.metersphere.utils.LoggerUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.jorphan.collections.HashTree;
|
||||
|
@ -67,6 +69,8 @@ public class ApiScenarioSerialService {
|
|||
|
||||
public void serial(ApiExecutionQueue executionQueue, ApiExecutionQueueDetail queue) {
|
||||
LoggerUtil.debug("Scenario run-执行脚本装载-进入串行准备");
|
||||
// 获取可以执行的资源池
|
||||
BaseSystemConfigDTO baseInfo = CommonBeanFactory.getBean(SystemParameterService.class).getBaseInfo();
|
||||
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())) {
|
||||
|
@ -130,7 +134,7 @@ public class ApiScenarioSerialService {
|
|||
}
|
||||
runRequest.setHashTree(hashTree);
|
||||
if (queue != null) {
|
||||
runRequest.setPlatformUrl(queue.getId());
|
||||
runRequest.setPlatformUrl(GenerateHashTreeUtil.getPlatformUrl(baseInfo, runRequest, queue.getId()));
|
||||
}
|
||||
if (runRequest.getPool().isPool()) {
|
||||
SmoothWeighted.setServerConfig(runRequest.getPoolId(), redisTemplate);
|
||||
|
|
|
@ -21,10 +21,7 @@ import io.metersphere.commons.utils.BeanUtils;
|
|||
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||
import io.metersphere.commons.utils.LogUtil;
|
||||
import io.metersphere.constants.RunModeConstants;
|
||||
import io.metersphere.dto.JmeterRunRequestDTO;
|
||||
import io.metersphere.dto.JvmInfoDTO;
|
||||
import io.metersphere.dto.ResultDTO;
|
||||
import io.metersphere.dto.RunModeConfigDTO;
|
||||
import io.metersphere.dto.*;
|
||||
import io.metersphere.plugin.core.MsTestElement;
|
||||
import io.metersphere.service.EnvironmentGroupProjectService;
|
||||
import io.metersphere.vo.BooleanPool;
|
||||
|
@ -161,4 +158,20 @@ public class GenerateHashTreeUtil {
|
|||
public static boolean isSetReport(RunModeConfigDTO config) {
|
||||
return config != null && StringUtils.equals(config.getReportType(), RunModeConstants.SET_REPORT.toString()) && StringUtils.isNotEmpty(config.getReportName());
|
||||
}
|
||||
|
||||
public static String getPlatformUrl(BaseSystemConfigDTO baseInfo, JmeterRunRequestDTO request, String queueDetailId) {
|
||||
// 占位符
|
||||
String platformUrl = "http://localhost:8081";
|
||||
if (baseInfo != null) {
|
||||
platformUrl = baseInfo.getUrl();
|
||||
}
|
||||
|
||||
platformUrl += "/api/jmeter/download?testId="
|
||||
+ request.getTestId()
|
||||
+ "&reportId=" + request.getReportId()
|
||||
+ "&runMode=" + request.getRunMode()
|
||||
+ "&reportType=" + request.getReportType()
|
||||
+ "&queueId=" + queueDetailId;
|
||||
return platformUrl;
|
||||
}
|
||||
}
|
|
@ -14,7 +14,6 @@ import io.metersphere.commons.utils.CommonBeanFactory;
|
|||
import io.metersphere.config.JmeterProperties;
|
||||
import io.metersphere.config.KafkaConfig;
|
||||
import io.metersphere.constants.RunModeConstants;
|
||||
import io.metersphere.dto.BaseSystemConfigDTO;
|
||||
import io.metersphere.dto.JmeterRunRequestDTO;
|
||||
import io.metersphere.dto.JvmInfoDTO;
|
||||
import io.metersphere.dto.NodeDTO;
|
||||
|
@ -22,7 +21,6 @@ import io.metersphere.jmeter.JMeterBase;
|
|||
import io.metersphere.jmeter.LocalRunner;
|
||||
import io.metersphere.performance.engine.Engine;
|
||||
import io.metersphere.performance.engine.EngineFactory;
|
||||
import io.metersphere.service.SystemParameterService;
|
||||
import io.metersphere.utils.LoggerUtil;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
|
@ -121,24 +119,6 @@ public class JMeterService {
|
|||
}
|
||||
|
||||
private void runNode(JmeterRunRequestDTO request) {
|
||||
// 获取可以执行的资源池
|
||||
BaseSystemConfigDTO baseInfo = CommonBeanFactory.getBean(SystemParameterService.class).getBaseInfo();
|
||||
// 占位符
|
||||
String platformUrl = "http://localhost:8081";
|
||||
if (baseInfo != null) {
|
||||
platformUrl = baseInfo.getUrl();
|
||||
}
|
||||
// 临时存放
|
||||
String queueDetailId = request.getPlatformUrl();
|
||||
|
||||
platformUrl += "/api/jmeter/download?testId="
|
||||
+ request.getTestId()
|
||||
+ "&reportId=" + request.getReportId()
|
||||
+ "&runMode=" + request.getRunMode()
|
||||
+ "&reportType=" + request.getReportType()
|
||||
+ "&queueId=" + queueDetailId;
|
||||
|
||||
request.setPlatformUrl(platformUrl);
|
||||
request.setKafkaConfig(KafkaConfig.getKafka());
|
||||
// 如果是K8S调用
|
||||
if (request.getPool().isK8s()) {
|
||||
|
|
|
@ -23,7 +23,7 @@ public class SmoothWeighted {
|
|||
public static final String EXEC_INDEX = "EXEC_INDEX_";
|
||||
|
||||
public static void setServerConfig(String poolId, RedisTemplate client) {
|
||||
if (StringUtils.isNotEmpty(poolId)) {
|
||||
if (StringUtils.isEmpty(poolId)) {
|
||||
return;
|
||||
}
|
||||
List<JvmInfoDTO> resources = new ArrayList<>();
|
||||
|
@ -103,7 +103,7 @@ public class SmoothWeighted {
|
|||
}
|
||||
|
||||
// 选中前的当前权重
|
||||
LoggerUtil.info("第" + (execIndex) + "次选中前的当前权重:" + serverList.toString());
|
||||
LoggerUtil.info("第" + (execIndex) + "次选中前的当前权重:" + JSON.toJSONString(serverList));
|
||||
|
||||
if (client.opsForValue().get(CONFIG + poolId) != null) {
|
||||
client.opsForValue().set(CONFIG + poolId, serverList);
|
||||
|
|
|
@ -86,7 +86,7 @@ public class ApiJmeterFileService {
|
|||
envMap = JSON.parseObject(detail.getEvnMap(), Map.class);
|
||||
}
|
||||
if (MapUtils.isEmpty(envMap)) {
|
||||
LoggerUtil.info("测试资源:【" + remoteTestId + "】未找到可执行的环境 >>>>>>> ");
|
||||
LoggerUtil.info("测试资源:【" + remoteTestId + "】, 报告【" + reportId + "】未重新选择环境");
|
||||
}
|
||||
HashTree hashTree = null;
|
||||
if (StringUtils.equalsAnyIgnoreCase(runMode, ApiRunMode.DEFINITION.name(), ApiRunMode.JENKINS_API_PLAN.name(), ApiRunMode.API_PLAN.name(), ApiRunMode.SCHEDULE_API_PLAN.name(), ApiRunMode.MANUAL_PLAN.name())) {
|
||||
|
|
Loading…
Reference in New Issue