fix(接口测试): 环境引用公共脚本,执行时没有获取最新的脚本内容
--bug=1045655 --user=陈建星 [项目管理]github #32810环境的前置里引入了全局脚本,全局脚本变更后,环境里的未变更 https://www.tapd.cn/55049933/s/1596334
This commit is contained in:
parent
b08abe6691
commit
be4870155e
|
@ -139,7 +139,7 @@ public class MsCommonElementConverter extends AbstractJmeterElementConverter<MsC
|
||||||
if (BooleanUtils.isTrue(processorConfig.getEnableGlobal()) && envInfo != null) {
|
if (BooleanUtils.isTrue(processorConfig.getEnableGlobal()) && envInfo != null) {
|
||||||
EnvironmentConfig envConfig = envInfo.getConfig();
|
EnvironmentConfig envConfig = envInfo.getConfig();
|
||||||
EnvProcessorConfig envProcessorConfig = isPre ? envConfig.getPreProcessorConfig() : envConfig.getPostProcessorConfig();
|
EnvProcessorConfig envProcessorConfig = isPre ? envConfig.getPreProcessorConfig() : envConfig.getPostProcessorConfig();
|
||||||
addEnvProcessors(envProcessorConfig, beforeStepProcessors, afterStepProcessors, protocol, true);
|
addEnvProcessors(envProcessorConfig, beforeStepProcessors, afterStepProcessors, protocol, isPre);
|
||||||
}
|
}
|
||||||
|
|
||||||
Function<Class<?>, MsProcessorConverter<MsProcessor>> getConverterFunc =
|
Function<Class<?>, MsProcessorConverter<MsProcessor>> getConverterFunc =
|
||||||
|
|
|
@ -22,6 +22,9 @@ import io.metersphere.project.domain.CustomFunctionBlob;
|
||||||
import io.metersphere.project.domain.FileAssociation;
|
import io.metersphere.project.domain.FileAssociation;
|
||||||
import io.metersphere.project.domain.FileMetadata;
|
import io.metersphere.project.domain.FileMetadata;
|
||||||
import io.metersphere.project.dto.CommonScriptInfo;
|
import io.metersphere.project.dto.CommonScriptInfo;
|
||||||
|
import io.metersphere.project.dto.environment.EnvironmentInfoDTO;
|
||||||
|
import io.metersphere.project.dto.environment.MsEnvAssertionConfig;
|
||||||
|
import io.metersphere.project.dto.environment.processors.*;
|
||||||
import io.metersphere.project.service.CustomFunctionService;
|
import io.metersphere.project.service.CustomFunctionService;
|
||||||
import io.metersphere.project.service.FileAssociationService;
|
import io.metersphere.project.service.FileAssociationService;
|
||||||
import io.metersphere.project.service.FileMetadataService;
|
import io.metersphere.project.service.FileMetadataService;
|
||||||
|
@ -29,6 +32,7 @@ import io.metersphere.sdk.constants.ApplicationNumScope;
|
||||||
import io.metersphere.sdk.constants.ExecStatus;
|
import io.metersphere.sdk.constants.ExecStatus;
|
||||||
import io.metersphere.sdk.util.BeanUtils;
|
import io.metersphere.sdk.util.BeanUtils;
|
||||||
import io.metersphere.sdk.util.JSON;
|
import io.metersphere.sdk.util.JSON;
|
||||||
|
import io.metersphere.sdk.util.LogUtils;
|
||||||
import io.metersphere.system.domain.ExecTask;
|
import io.metersphere.system.domain.ExecTask;
|
||||||
import io.metersphere.system.domain.ExecTaskItem;
|
import io.metersphere.system.domain.ExecTaskItem;
|
||||||
import io.metersphere.system.uid.IDGenerator;
|
import io.metersphere.system.uid.IDGenerator;
|
||||||
|
@ -254,6 +258,87 @@ public class ApiCommonService {
|
||||||
setEnableCommonScriptInfo(commonScriptInfos);
|
setEnableCommonScriptInfo(commonScriptInfos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置环境前后置的公共脚本信息
|
||||||
|
*
|
||||||
|
* @param envConfig
|
||||||
|
*/
|
||||||
|
public void setEnvCommonScriptInfo(EnvironmentInfoDTO envConfig) {
|
||||||
|
if (envConfig == null || envConfig.getConfig() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// 获取脚本
|
||||||
|
List<ScriptProcessor> scriptsProcessors = getEnableCommonScriptProcessors(envConfig.getConfig().getPreProcessorConfig());
|
||||||
|
scriptsProcessors.addAll(getEnableCommonScriptProcessors(envConfig.getConfig().getPostProcessorConfig()));
|
||||||
|
|
||||||
|
// 获取断言
|
||||||
|
List<MsScriptAssertion> scriptAssertions = getEnableCommonScriptAssertion(envConfig.getConfig().getAssertionConfig());
|
||||||
|
|
||||||
|
List<CommonScriptInfo> commonScriptInfos = scriptsProcessors.stream()
|
||||||
|
.map(ScriptProcessor::getCommonScriptInfo)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<CommonScriptInfo> assertionsCommonScriptInfos = scriptAssertions.stream()
|
||||||
|
.map(MsScriptAssertion::getCommonScriptInfo)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
commonScriptInfos.addAll(assertionsCommonScriptInfos);
|
||||||
|
// 设置最新的公共脚本信息
|
||||||
|
setEnableCommonScriptInfo(commonScriptInfos);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LogUtils.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取环境使用公共脚本的前后置
|
||||||
|
*
|
||||||
|
* @param envProcessorConfig
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private List<ScriptProcessor> getEnableCommonScriptProcessors(EnvProcessorConfig envProcessorConfig) {
|
||||||
|
if (envProcessorConfig == null) {
|
||||||
|
return new ArrayList<>(0);
|
||||||
|
}
|
||||||
|
ApiEnvProcessorConfig apiProcessorConfig = envProcessorConfig.getApiProcessorConfig();
|
||||||
|
ApiEnvPlanProcessorConfig planProcessorConfig = apiProcessorConfig.getPlanProcessorConfig();
|
||||||
|
ApiEnvScenarioProcessorConfig scenarioProcessorConfig = apiProcessorConfig.getScenarioProcessorConfig();
|
||||||
|
ApiEnvRequestProcessorConfig requestProcessorConfig = apiProcessorConfig.getRequestProcessorConfig();
|
||||||
|
|
||||||
|
List<MsProcessor> processors = new ArrayList<>();
|
||||||
|
processors.addAll(planProcessorConfig.getProcessors());
|
||||||
|
processors.addAll(scenarioProcessorConfig.getProcessors());
|
||||||
|
processors.addAll(requestProcessorConfig.getProcessors());
|
||||||
|
|
||||||
|
// 获取使用公共脚本的前后置
|
||||||
|
return processors.stream()
|
||||||
|
.filter(processor -> processor instanceof ScriptProcessor)
|
||||||
|
.map(processor -> (ScriptProcessor) processor)
|
||||||
|
.filter(ScriptProcessor::isEnableCommonScript)
|
||||||
|
.filter(ScriptProcessor::isValid)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取使用公共脚本的前后置
|
||||||
|
*
|
||||||
|
* @param envAssertionConfig
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private List<MsScriptAssertion> getEnableCommonScriptAssertion(MsEnvAssertionConfig envAssertionConfig) {
|
||||||
|
if (envAssertionConfig == null || CollectionUtils.isEmpty(envAssertionConfig.getAssertions())) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
return envAssertionConfig.getAssertions()
|
||||||
|
.stream()
|
||||||
|
.filter(assertion -> assertion instanceof MsScriptAssertion)
|
||||||
|
.map(msAssertion -> (MsScriptAssertion) msAssertion)
|
||||||
|
.filter(MsScriptAssertion::isEnableCommonScript)
|
||||||
|
.filter(MsScriptAssertion::isValid)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
private void setEnableCommonScriptInfo(List<CommonScriptInfo> commonScriptInfos) {
|
private void setEnableCommonScriptInfo(List<CommonScriptInfo> commonScriptInfos) {
|
||||||
List<String> commonScriptIds = commonScriptInfos.stream()
|
List<String> commonScriptIds = commonScriptInfos.stream()
|
||||||
.map(CommonScriptInfo::getId)
|
.map(CommonScriptInfo::getId)
|
||||||
|
|
|
@ -4,6 +4,7 @@ import io.metersphere.api.config.JmeterProperties;
|
||||||
import io.metersphere.api.config.KafkaConfig;
|
import io.metersphere.api.config.KafkaConfig;
|
||||||
import io.metersphere.api.controller.result.ApiResultCode;
|
import io.metersphere.api.controller.result.ApiResultCode;
|
||||||
import io.metersphere.api.dto.ApiParamConfig;
|
import io.metersphere.api.dto.ApiParamConfig;
|
||||||
|
import io.metersphere.api.dto.ApiScenarioParamConfig;
|
||||||
import io.metersphere.api.dto.debug.ApiDebugRunRequest;
|
import io.metersphere.api.dto.debug.ApiDebugRunRequest;
|
||||||
import io.metersphere.api.dto.debug.ApiResourceRunRequest;
|
import io.metersphere.api.dto.debug.ApiResourceRunRequest;
|
||||||
import io.metersphere.api.dto.request.controller.MsScriptElement;
|
import io.metersphere.api.dto.request.controller.MsScriptElement;
|
||||||
|
@ -18,6 +19,7 @@ import io.metersphere.project.domain.FileMetadata;
|
||||||
import io.metersphere.project.domain.ProjectApplication;
|
import io.metersphere.project.domain.ProjectApplication;
|
||||||
import io.metersphere.project.dto.CommonScriptInfo;
|
import io.metersphere.project.dto.CommonScriptInfo;
|
||||||
import io.metersphere.project.dto.customfunction.request.CustomFunctionRunRequest;
|
import io.metersphere.project.dto.customfunction.request.CustomFunctionRunRequest;
|
||||||
|
import io.metersphere.project.dto.environment.EnvironmentInfoDTO;
|
||||||
import io.metersphere.project.dto.environment.GlobalParams;
|
import io.metersphere.project.dto.environment.GlobalParams;
|
||||||
import io.metersphere.project.dto.environment.GlobalParamsDTO;
|
import io.metersphere.project.dto.environment.GlobalParamsDTO;
|
||||||
import io.metersphere.project.service.*;
|
import io.metersphere.project.service.*;
|
||||||
|
@ -648,6 +650,16 @@ public class ApiExecuteService {
|
||||||
public String parseExecuteScript(AbstractMsTestElement msTestElement, ParameterConfig config) {
|
public String parseExecuteScript(AbstractMsTestElement msTestElement, ParameterConfig config) {
|
||||||
// 解析生成脚本
|
// 解析生成脚本
|
||||||
TestElementParser defaultParser = TestElementParserFactory.getDefaultParser();
|
TestElementParser defaultParser = TestElementParserFactory.getDefaultParser();
|
||||||
|
// 环境获取最新的公共脚本信息
|
||||||
|
if (config instanceof ApiScenarioParamConfig apiScenarioParamConfig) {
|
||||||
|
Map<String, EnvironmentInfoDTO> projectEnvMap = apiScenarioParamConfig.getProjectEnvMap();
|
||||||
|
if (projectEnvMap != null) {
|
||||||
|
projectEnvMap.values().forEach(apiCommonService::setEnvCommonScriptInfo);
|
||||||
|
}
|
||||||
|
apiCommonService.setEnvCommonScriptInfo(apiScenarioParamConfig.getEnvConfig());
|
||||||
|
} else if (config instanceof ApiParamConfig apiParamConfig) {
|
||||||
|
apiCommonService.setEnvCommonScriptInfo(apiParamConfig.getEnvConfig());
|
||||||
|
}
|
||||||
return defaultParser.parse(msTestElement, config);
|
return defaultParser.parse(msTestElement, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue