fix(接口测试): 插件无法读取场景变量
This commit is contained in:
parent
0b42f930de
commit
566f4f4939
|
@ -1,16 +1,23 @@
|
|||
package io.metersphere.api.parser.jmeter;
|
||||
|
||||
import io.metersphere.api.dto.ApiParamConfig;
|
||||
import io.metersphere.api.dto.request.MsScenario;
|
||||
import io.metersphere.api.dto.scenario.ScenarioOtherConfig;
|
||||
import io.metersphere.api.parser.TestElementParser;
|
||||
import io.metersphere.api.utils.JmeterElementConverterRegister;
|
||||
import io.metersphere.plugin.api.dto.ParameterConfig;
|
||||
import io.metersphere.plugin.api.spi.AbstractMsProtocolTestElement;
|
||||
import io.metersphere.plugin.api.spi.AbstractMsTestElement;
|
||||
import io.metersphere.project.dto.environment.EnvironmentInfoDTO;
|
||||
import io.metersphere.project.dto.environment.variables.CommonVariables;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.metersphere.sdk.util.LogUtils;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.jmeter.config.Arguments;
|
||||
import org.apache.jmeter.control.LoopController;
|
||||
import org.apache.jmeter.modifiers.UserParameters;
|
||||
import org.apache.jmeter.sampler.DebugSampler;
|
||||
import org.apache.jmeter.save.SaveService;
|
||||
import org.apache.jmeter.testelement.TestElement;
|
||||
|
@ -20,6 +27,8 @@ import org.apache.jorphan.collections.HashTree;
|
|||
import org.apache.jorphan.collections.ListedHashTree;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @Author: jianxing
|
||||
|
@ -48,6 +57,16 @@ public class JmeterTestElementParser implements TestElementParser {
|
|||
final HashTree testPlanTree = hashTree.add(testPlan);
|
||||
final HashTree groupTree = testPlanTree.add(getThreadGroup(msTestElement));
|
||||
|
||||
if (msTestElement instanceof AbstractMsProtocolTestElement) {
|
||||
// 如果是单接口执行,添加环境变量,接口插件也需要支持访问变量
|
||||
// 场景执行时,场景解析器里会处理变量
|
||||
ApiParamConfig apiParamConfig = (ApiParamConfig) config;
|
||||
EnvironmentInfoDTO envConfig = apiParamConfig.getEnvConfig(msTestElement.getProjectId());
|
||||
// 处理环境变量
|
||||
UserParameters userParameters = getEnvUserParameters(msTestElement.getName(), envConfig);
|
||||
Optional.ofNullable(userParameters).ifPresent(groupTree::add);
|
||||
}
|
||||
|
||||
// 解析 msTestElement
|
||||
JmeterElementConverterRegister.getConverter(msTestElement.getClass()).toHashTree(groupTree, msTestElement, config);
|
||||
|
||||
|
@ -131,4 +150,26 @@ public class JmeterTestElementParser implements TestElementParser {
|
|||
debugSampler.setProperty("displaySystemProperties", displaySystemProperties);
|
||||
return debugSampler;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加环境变量
|
||||
*
|
||||
* @param name
|
||||
* @param envInfo
|
||||
*/
|
||||
private UserParameters getEnvUserParameters(String name, EnvironmentInfoDTO envInfo) {
|
||||
if (envInfo == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<CommonVariables> envVariables = envInfo.getConfig().getCommonVariables();
|
||||
envVariables = envVariables.stream()
|
||||
.filter(variable -> BooleanUtils.isTrue(variable.getEnable()) && variable.isValid())
|
||||
.toList();
|
||||
if (CollectionUtils.isEmpty(envVariables)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return JmeterTestElementParserHelper.getUserParameters(name, envVariables);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,13 +23,11 @@ import io.metersphere.project.dto.environment.host.Host;
|
|||
import io.metersphere.project.dto.environment.http.HttpConfig;
|
||||
import io.metersphere.project.dto.environment.http.HttpConfigPathMatchRule;
|
||||
import io.metersphere.project.dto.environment.http.SelectModule;
|
||||
import io.metersphere.project.dto.environment.variables.CommonVariables;
|
||||
import io.metersphere.sdk.util.EnumValidator;
|
||||
import io.metersphere.sdk.util.LogUtils;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.jmeter.modifiers.UserParameters;
|
||||
import org.apache.jmeter.protocol.http.control.AuthManager;
|
||||
import org.apache.jmeter.protocol.http.control.Authorization;
|
||||
import org.apache.jmeter.protocol.http.control.DNSCacheManager;
|
||||
|
@ -91,10 +89,6 @@ public class MsHTTPElementConverter extends AbstractJmeterElementConverter<MsHTT
|
|||
|
||||
HashTree httpTree = tree.add(sampler);
|
||||
|
||||
// 处理环境变量
|
||||
UserParameters userParameters = getEnvUserParameters(msHTTPElement, envConfig);
|
||||
Optional.ofNullable(userParameters).ifPresent(httpTree::add);
|
||||
|
||||
// 处理请求头
|
||||
HeaderManager httpHeader = getHttpHeader(msHTTPElement, apiParamConfig, httpConfig);
|
||||
Optional.ofNullable(httpHeader).ifPresent(httpTree::add);
|
||||
|
@ -188,25 +182,6 @@ public class MsHTTPElementConverter extends AbstractJmeterElementConverter<MsHTT
|
|||
return authManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加场景和环境变量
|
||||
*
|
||||
* @param msHTTPElement
|
||||
* @param envInfo
|
||||
*/
|
||||
private UserParameters getEnvUserParameters(MsHTTPElement msHTTPElement, EnvironmentInfoDTO envInfo) {
|
||||
if (envInfo == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<CommonVariables> envVariables = envInfo.getConfig().getCommonVariables();
|
||||
if (CollectionUtils.isEmpty(envVariables)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return JmeterTestElementParserHelper.getUserParameters(msHTTPElement.getName(), envVariables);
|
||||
}
|
||||
|
||||
private String getPath(MsHTTPElement msHTTPElement, HttpConfig httpConfig) {
|
||||
String url = msHTTPElement.getPath();
|
||||
if (httpConfig != null) {
|
||||
|
|
Loading…
Reference in New Issue