feat(接口测试): 增加dns生成
This commit is contained in:
parent
4adc3c3355
commit
1ea17a964c
|
@ -22,6 +22,7 @@ import io.metersphere.project.api.KeyValueEnableParam;
|
|||
import io.metersphere.project.api.KeyValueParam;
|
||||
import io.metersphere.project.dto.environment.EnvironmentInfoDTO;
|
||||
import io.metersphere.project.dto.environment.GlobalParams;
|
||||
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;
|
||||
|
@ -32,10 +33,7 @@ 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.protocol.http.control.AuthManager;
|
||||
import org.apache.jmeter.protocol.http.control.Authorization;
|
||||
import org.apache.jmeter.protocol.http.control.Header;
|
||||
import org.apache.jmeter.protocol.http.control.HeaderManager;
|
||||
import org.apache.jmeter.protocol.http.control.*;
|
||||
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy;
|
||||
import org.apache.jmeter.save.SaveService;
|
||||
import org.apache.jmeter.testelement.TestElement;
|
||||
|
@ -61,6 +59,9 @@ public class MsHTTPElementConverter extends AbstractJmeterElementConverter<MsHTT
|
|||
public static final String URL_ENCODE = "${__urlencode(%s)}";
|
||||
public static final String COOKIE = "Cookie";
|
||||
|
||||
public static final String HTTP = "http://";
|
||||
public static final String HTTPS = "https://";
|
||||
|
||||
@Override
|
||||
public void toHashTree(HashTree tree, MsHTTPElement msHTTPElement, ParameterConfig config) {
|
||||
if (BooleanUtils.isFalse(msHTTPElement.getEnable())) {
|
||||
|
@ -97,6 +98,9 @@ public class MsHTTPElementConverter extends AbstractJmeterElementConverter<MsHTT
|
|||
// 处理请求头
|
||||
HeaderManager httpHeader = getHttpHeader(msHTTPElement, apiParamConfig, httpConfig);
|
||||
Optional.ofNullable(httpHeader).ifPresent(httpTree::add);
|
||||
//处理host
|
||||
DNSCacheManager dnsCacheManager = getEnvDns(msHTTPElement.getName(), envConfig, httpConfig);
|
||||
Optional.ofNullable(dnsCacheManager).ifPresent(httpTree::add);
|
||||
|
||||
HTTPAuthConfig authConfig = msHTTPElement.getAuthConfig();
|
||||
|
||||
|
@ -107,6 +111,7 @@ public class MsHTTPElementConverter extends AbstractJmeterElementConverter<MsHTT
|
|||
parseChild(httpTree, msHTTPElement, config);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 设置超时时间等配置
|
||||
*
|
||||
|
@ -310,6 +315,7 @@ public class MsHTTPElementConverter extends AbstractJmeterElementConverter<MsHTT
|
|||
return headerManager;
|
||||
}
|
||||
|
||||
|
||||
private void setHeaderMap(Map<String, String> headerMap, List<? extends KeyValueEnableParam> headers) {
|
||||
if (CollectionUtils.isEmpty(headers)) {
|
||||
return;
|
||||
|
@ -436,4 +442,42 @@ public class MsHTTPElementConverter extends AbstractJmeterElementConverter<MsHTT
|
|||
});
|
||||
return stringBuffer.substring(0, stringBuffer.length() - 1);
|
||||
}
|
||||
|
||||
private DNSCacheManager getEnvDns(String name , EnvironmentInfoDTO envConfig, HttpConfig httpConfig) {
|
||||
if (envConfig == null ||
|
||||
envConfig.getConfig() == null ||
|
||||
envConfig.getConfig().getHostConfig() == null ||
|
||||
BooleanUtils.isFalse(envConfig.getConfig().getHostConfig().getEnable()) ||
|
||||
httpConfig == null) {
|
||||
return null;
|
||||
}
|
||||
String domain = httpConfig.getHostname().trim();
|
||||
List<Host> hosts = new ArrayList<>();
|
||||
envConfig.getConfig().getHostConfig().getHosts().forEach(host -> {
|
||||
if (StringUtils.isNotBlank(host.getDomain())) {
|
||||
String hostDomain = host.getDomain().trim().replace(HTTP, StringUtils.EMPTY).replace(HTTPS, StringUtils.EMPTY);
|
||||
if (StringUtils.equals(hostDomain, domain)) {
|
||||
host.setDomain(hostDomain); // 域名去掉协议
|
||||
hosts.add(host);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (CollectionUtils.isNotEmpty(hosts)) {
|
||||
return dnsCacheManager(name + "DNSCacheManager", hosts);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static DNSCacheManager dnsCacheManager(String name, List<Host> hosts) {
|
||||
DNSCacheManager dnsCacheManager = new DNSCacheManager();
|
||||
dnsCacheManager.setEnabled(true);
|
||||
dnsCacheManager.setName(name);
|
||||
dnsCacheManager.setProperty(TestElement.TEST_CLASS, DNSCacheManager.class.getName());
|
||||
dnsCacheManager.setProperty(TestElement.GUI_CLASS, SaveService.aliasToClass("DNSCachePanel"));
|
||||
dnsCacheManager.setCustomResolver(false);
|
||||
dnsCacheManager.setClearEachIteration(true);
|
||||
hosts.forEach(host -> dnsCacheManager.addHost(host.getDomain(), host.getIp()));
|
||||
|
||||
return dnsCacheManager;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,15 +20,21 @@ import io.metersphere.api.service.definition.ApiTestCaseService;
|
|||
import io.metersphere.api.utils.ApiDataUtils;
|
||||
import io.metersphere.plugin.api.spi.AbstractMsTestElement;
|
||||
import io.metersphere.project.domain.ProjectVersion;
|
||||
import io.metersphere.project.dto.environment.EnvironmentConfig;
|
||||
import io.metersphere.project.dto.environment.host.Host;
|
||||
import io.metersphere.project.dto.environment.host.HostConfig;
|
||||
import io.metersphere.project.dto.environment.http.HttpConfig;
|
||||
import io.metersphere.project.dto.filemanagement.FileInfo;
|
||||
import io.metersphere.project.mapper.ProjectVersionMapper;
|
||||
import io.metersphere.project.service.FileAssociationService;
|
||||
import io.metersphere.sdk.constants.*;
|
||||
import io.metersphere.sdk.domain.Environment;
|
||||
import io.metersphere.sdk.domain.EnvironmentBlob;
|
||||
import io.metersphere.sdk.domain.EnvironmentExample;
|
||||
import io.metersphere.sdk.file.FileCenter;
|
||||
import io.metersphere.sdk.file.FileRequest;
|
||||
import io.metersphere.sdk.file.MinioRepository;
|
||||
import io.metersphere.sdk.mapper.EnvironmentBlobMapper;
|
||||
import io.metersphere.sdk.mapper.EnvironmentMapper;
|
||||
import io.metersphere.sdk.util.BeanUtils;
|
||||
import io.metersphere.sdk.util.CommonBeanFactory;
|
||||
|
@ -119,6 +125,8 @@ public class ApiTestCaseControllerTests extends BaseTest {
|
|||
private ApiTestCaseFollowerMapper apiTestCaseFollowerMapper;
|
||||
@Resource
|
||||
private EnvironmentMapper environmentMapper;
|
||||
@Resource
|
||||
private EnvironmentBlobMapper environmentBlobMapper;
|
||||
private static String fileMetadataId;
|
||||
@Resource
|
||||
private SqlSessionFactory sqlSessionFactory;
|
||||
|
@ -426,7 +434,40 @@ public class ApiTestCaseControllerTests extends BaseTest {
|
|||
resultHolder.getCode() == MsHttpResultCode.SUCCESS.getCode());
|
||||
|
||||
// 测试执行
|
||||
request.setEnvironmentId("envId");
|
||||
Environment environment = new Environment();
|
||||
environment.setId("test-host");
|
||||
environment.setProjectId(DEFAULT_PROJECT_ID);
|
||||
environment.setName("test-host");
|
||||
environment.setPos(0L);
|
||||
environment.setCreateTime(System.currentTimeMillis());
|
||||
environment.setUpdateTime(System.currentTimeMillis());
|
||||
environment.setCreateUser("admin");
|
||||
environment.setUpdateUser("admin");
|
||||
environment.setMock(false);
|
||||
environmentMapper.insert(environment);
|
||||
EnvironmentConfig environmentConfig = new EnvironmentConfig();
|
||||
List<HttpConfig> httpConfigs = new ArrayList<>();
|
||||
HttpConfig httpConfig = new HttpConfig();
|
||||
httpConfig.setHostname("www.aa.com");
|
||||
httpConfig.setType("NONE");
|
||||
httpConfig.setProtocol("HTTP");
|
||||
httpConfigs.add(httpConfig);
|
||||
environmentConfig.setHttpConfig(httpConfigs);
|
||||
HostConfig hostConfig = new HostConfig();
|
||||
hostConfig.setEnable(true);
|
||||
List<Host> hosts = new ArrayList<>();
|
||||
Host host = new Host();
|
||||
host.setIp("172.0.0.1");
|
||||
host.setDomain("www.aa.com");
|
||||
hosts.add(host);
|
||||
hostConfig.setHosts(hosts);
|
||||
environmentConfig.setHostConfig(hostConfig);
|
||||
EnvironmentBlob environmentBlob = new EnvironmentBlob();
|
||||
environmentBlob.setId(environment.getId());
|
||||
environmentBlob.setConfig(JSON.toJSONBytes(environmentConfig));
|
||||
environmentBlobMapper.insert(environmentBlob);
|
||||
|
||||
request.setEnvironmentId("test-host");
|
||||
mvcResult = this.requestPostAndReturn(RUN_POST, request);
|
||||
resultHolder = JSON.parseObject(mvcResult.getResponse().getContentAsString(Charset.defaultCharset()), ResultHolder.class);
|
||||
Assertions.assertTrue(resultHolder.getCode() == ApiResultCode.RESOURCE_POOL_EXECUTE_ERROR.getCode() ||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
type="line"
|
||||
@change="loadScenarioList(false)"
|
||||
/>
|
||||
<span style="margin-left: 8px; color: #323233; font-family: 'PingFang SC'">{{
|
||||
<span style="margin-left: 8px; font-family: 'PingFang SC'; color: #323233">{{
|
||||
t('apiScenario.table.showChildrenModuleScenario')
|
||||
}}</span>
|
||||
</span>
|
||||
|
@ -425,14 +425,14 @@
|
|||
},
|
||||
{
|
||||
title: 'apiScenario.table.columns.createUser',
|
||||
dataIndex: 'createUser',
|
||||
dataIndex: 'createUserName',
|
||||
titleSlotName: 'createUser',
|
||||
width: 109,
|
||||
showDrag: true,
|
||||
},
|
||||
{
|
||||
title: 'apiScenario.table.columns.updateUser',
|
||||
dataIndex: 'updateUser',
|
||||
dataIndex: 'updateUserName',
|
||||
titleSlotName: 'updateUser',
|
||||
width: 109,
|
||||
showDrag: true,
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
type="line"
|
||||
@change="loadScenarioList(false)"
|
||||
/>
|
||||
<span style="margin-left: 8px; color: #323233; font-family: 'PingFang SC'">{{
|
||||
<span style="margin-left: 8px; font-family: 'PingFang SC'; color: #323233">{{
|
||||
t('apiScenario.table.showChildrenModuleScenario')
|
||||
}}</span>
|
||||
</span>
|
||||
|
@ -265,14 +265,14 @@
|
|||
},
|
||||
{
|
||||
title: 'apiScenario.table.columns.createUser',
|
||||
dataIndex: 'createUser',
|
||||
dataIndex: 'createUserName',
|
||||
titleSlotName: 'createUser',
|
||||
width: 109,
|
||||
showDrag: true,
|
||||
},
|
||||
{
|
||||
title: 'apiScenario.table.columns.updateUser',
|
||||
dataIndex: 'updateUser',
|
||||
dataIndex: 'updateUserName',
|
||||
titleSlotName: 'updateUser',
|
||||
width: 109,
|
||||
showDrag: true,
|
||||
|
|
|
@ -82,7 +82,7 @@
|
|||
placeholder: 'project.environmental.host.ipPlaceholder',
|
||||
rules: [
|
||||
{ required: true, message: t('project.environmental.host.ipIsRequire') },
|
||||
{ notRepeat: true, message: 'project.environmental.host.ipNotRepeat' },
|
||||
{ notRepeat: true, message: t('project.environmental.host.ipNotRepeat') },
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue