diff --git a/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java b/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java index c39c31d5a7..3305ef0075 100644 --- a/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java +++ b/backend/src/main/java/io/metersphere/api/controller/ApiDefinitionController.java @@ -276,14 +276,14 @@ public class ApiDefinitionController { esbImportService.templateExport(response); } - @GetMapping("/getMockEnvironment/{projectId}") - public ApiTestEnvironmentWithBLOBs getMockEnvironment(@PathVariable String projectId, HttpServletRequest request) { + @GetMapping("/getMockEnvironment/{projectId}/{protocal}") + public ApiTestEnvironmentWithBLOBs getMockEnvironment(@PathVariable String projectId, @PathVariable String protocal, HttpServletRequest request) { String requestUrl = request.getRequestURL().toString(); String baseUrl = ""; if (requestUrl.contains("/api/definition")) { baseUrl = requestUrl.split("/api/definition")[0]; } - return apiTestEnvironmentService.getMockEnvironmentByProjectId(projectId, baseUrl); + return apiTestEnvironmentService.getMockEnvironmentByProjectId(projectId, protocal, baseUrl); } } diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java index 0ac7b04ecb..1b86391bfd 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsScenario.java @@ -74,7 +74,6 @@ public class MsScenario extends MsTestElement { @Override public void toHashTree(HashTree tree, List hashTree, ParameterConfig config) { - boolean isMockEvn = false; // 非导出操作,且不是启用状态则跳过执行 if (!config.isOperating() && !this.isEnable()) { return; @@ -140,6 +139,14 @@ public class MsScenario extends MsTestElement { }); config.setConfig(envConfig); } + } else { + Map map = config.getConfig(); + for (EnvironmentConfig evnConfig : + map.values()) { + if (evnConfig.getHttpConfig() != null) { + this.setMockEnvironment(evnConfig.getHttpConfig().isMock()); + } + } } if (CollectionUtils.isNotEmpty(this.getVariables())) { config.setVariables(this.variables); diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java index 5909bc5764..f22c15f713 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/sampler/MsHTTPSamplerProxy.java @@ -232,7 +232,12 @@ public class MsHTTPSamplerProxy extends MsTestElement { if (this.isMockEnvironment()) { url = httpConfig.getProtocol() + "://" + httpConfig.getSocket() + "/mock/" + this.getProjectId(); } else { - url = httpConfig.getProtocol() + "://" + httpConfig.getSocket(); + if (httpConfig.isMock()) { + url = httpConfig.getProtocol() + "://" + httpConfig.getSocket() + "/mock/" + this.getProjectId(); + } else { + url = httpConfig.getProtocol() + "://" + httpConfig.getSocket(); + } + } URL urlObject = new URL(url); String envPath = StringUtils.equals(urlObject.getPath(), "/") ? "" : urlObject.getPath(); diff --git a/backend/src/main/java/io/metersphere/api/dto/scenario/HttpConfig.java b/backend/src/main/java/io/metersphere/api/dto/scenario/HttpConfig.java index f1705a044a..c168de1cd9 100644 --- a/backend/src/main/java/io/metersphere/api/dto/scenario/HttpConfig.java +++ b/backend/src/main/java/io/metersphere/api/dto/scenario/HttpConfig.java @@ -20,6 +20,7 @@ public class HttpConfig { public HttpConfig initHttpConfig(HttpConfigCondition configCondition) { HttpConfig config = new HttpConfig(); + config.isMock = this.isMock; BeanUtils.copyBean(config, configCondition); return config; } diff --git a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java index 8f26e76345..176f485ea8 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java @@ -997,7 +997,15 @@ public class ApiDefinitionService { List apiList = apiDefinitionMapper.selectByExample(example); List apiIdList = new ArrayList<>(); + boolean urlSuffixEndEmpty = false; + if (urlSuffix.endsWith("/")) { + urlSuffixEndEmpty = true; + urlSuffix = urlSuffix + "testMock"; + } String[] urlParams = urlSuffix.split("/"); + if (urlSuffixEndEmpty) { + urlParams[urlParams.length - 1] = ""; + } for (ApiDefinition api : apiList) { String path = api.getPath(); if (path.startsWith("/")) { @@ -1007,7 +1015,7 @@ public class ApiDefinitionService { String[] pathArr = path.split("/"); if (pathArr.length == urlParams.length) { boolean isFetch = true; - for (int i = 0; i < pathArr.length; i++) { + for (int i = 0; i < urlParams.length; i++) { String pathItem = pathArr[i]; if (!(pathItem.startsWith("{") && pathItem.endsWith("}"))) { if (!StringUtils.equals(pathArr[i], urlParams[i])) { diff --git a/backend/src/main/java/io/metersphere/api/service/ApiTestEnvironmentService.java b/backend/src/main/java/io/metersphere/api/service/ApiTestEnvironmentService.java index 079e839756..1557d1c51b 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiTestEnvironmentService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiTestEnvironmentService.java @@ -77,24 +77,24 @@ public class ApiTestEnvironmentService { * @param projectId * @return */ - public synchronized ApiTestEnvironmentWithBLOBs getMockEnvironmentByProjectId(String projectId, String baseUrl) { + public synchronized ApiTestEnvironmentWithBLOBs getMockEnvironmentByProjectId(String projectId, String protocal, String baseUrl) { String apiName = MockConfigStaticData.MOCK_EVN_NAME; ApiTestEnvironmentWithBLOBs returnModel = null; ApiTestEnvironmentExample example = new ApiTestEnvironmentExample(); example.createCriteria().andProjectIdEqualTo(projectId).andNameEqualTo(apiName); List list = this.selectByExampleWithBLOBs(example); if (list.isEmpty()) { - returnModel = this.genHttpApiTestEnvironmentByUrl(projectId, apiName, baseUrl); + returnModel = this.genHttpApiTestEnvironmentByUrl(projectId, protocal, apiName, baseUrl); this.add(returnModel); } else { returnModel = list.get(0); - returnModel = this.checkMockEvnIsRightful(returnModel, projectId, apiName, baseUrl); + returnModel = this.checkMockEvnIsRightful(returnModel, protocal, projectId, apiName, baseUrl); } return returnModel; } - private ApiTestEnvironmentWithBLOBs checkMockEvnIsRightful(ApiTestEnvironmentWithBLOBs returnModel, String projectId, String name, String url) { - boolean needUpdate = true; + private ApiTestEnvironmentWithBLOBs checkMockEvnIsRightful(ApiTestEnvironmentWithBLOBs returnModel, String protocal, String projectId, String name, String url) { + boolean needUpdate = false; if (returnModel.getConfig() != null) { try { JSONObject configObj = JSONObject.parseObject(returnModel.getConfig()); @@ -115,27 +115,24 @@ public class ApiTestEnvironmentService { } if (needUpdate) { String id = returnModel.getId(); - returnModel = this.genHttpApiTestEnvironmentByUrl(projectId, name, url); + returnModel = this.genHttpApiTestEnvironmentByUrl(projectId, protocal, name, url); returnModel.setId(id); apiTestEnvironmentMapper.updateByPrimaryKeyWithBLOBs(returnModel); } return returnModel; } - private ApiTestEnvironmentWithBLOBs genHttpApiTestEnvironmentByUrl(String projectId, String name, String url) { - String protocol = ""; + private ApiTestEnvironmentWithBLOBs genHttpApiTestEnvironmentByUrl(String projectId, String protocal, String name, String url) { String socket = ""; if (url.startsWith("http://")) { - protocol = "http"; url = url.substring(7); } else if (url.startsWith("https://")) { - protocol = "https"; url = url.substring(8); } socket = url; String portStr = ""; - String ipStr = protocol; + String ipStr = url; if (url.contains(":") && !url.endsWith(":")) { String[] urlArr = url.split(":"); int port = -1; @@ -159,13 +156,6 @@ public class ApiTestEnvironmentService { commonConfigObj.put("hosts", new String[]{}); JSONObject httpConfig = new JSONObject(); -// httpConfig.put("socket", url); -// httpConfig.put("domain", ipStr); -// httpConfig.put("headers", variablesArr); -// httpConfig.put("protocol", protocol); -// if (StringUtils.isNotEmpty(portStr)) { -// httpConfig.put("port", portStr); -// } httpConfig.put("socket", null); httpConfig.put("isMock", true); httpConfig.put("domain", null); @@ -181,7 +171,7 @@ public class ApiTestEnvironmentService { httpItem.put("id", UUID.randomUUID().toString()); httpItem.put("type", "NONE"); httpItem.put("socket", socket); - httpItem.put("protocol", protocol); + httpItem.put("protocol", protocal); JSONArray protocolVariablesArr = new JSONArray(); Map protocolMap = new HashMap<>(); protocolMap.put("enable", true); diff --git a/backend/src/main/java/io/metersphere/api/service/MockConfigService.java b/backend/src/main/java/io/metersphere/api/service/MockConfigService.java index f2b6864867..beaa80a132 100644 --- a/backend/src/main/java/io/metersphere/api/service/MockConfigService.java +++ b/backend/src/main/java/io/metersphere/api/service/MockConfigService.java @@ -299,7 +299,12 @@ public class MockConfigService { for (int i = 0; i < statusCodeArr.size(); i++) { JSONObject obj = statusCodeArr.getJSONObject(i); if (obj.containsKey("name") && obj.containsKey("value") && StringUtils.isNotEmpty(obj.getString("name"))) { - response.setHeader(obj.getString("name"), obj.getString("value")); +// response.setHeader(obj.getString("name"), obj.getString("value")); + try { + int headInt = Integer.parseInt(obj.getString("name")); + response.setStatus(headInt); + } catch (Exception e) { + } } } } diff --git a/backend/src/main/java/io/metersphere/base/domain/Project.java b/backend/src/main/java/io/metersphere/base/domain/Project.java index f6f24ddc6b..8dff99cf43 100644 --- a/backend/src/main/java/io/metersphere/base/domain/Project.java +++ b/backend/src/main/java/io/metersphere/base/domain/Project.java @@ -32,4 +32,6 @@ public class Project implements Serializable { private Boolean customNum; private static final long serialVersionUID = 1L; + + private String protocal; } \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/controller/ProjectController.java b/backend/src/main/java/io/metersphere/controller/ProjectController.java index c94015f275..2b06c44f12 100644 --- a/backend/src/main/java/io/metersphere/controller/ProjectController.java +++ b/backend/src/main/java/io/metersphere/controller/ProjectController.java @@ -75,7 +75,7 @@ public class ProjectController { if (requestUrl.contains("/project/add")) { baseUrl = requestUrl.split("/project/add")[0]; } - apiTestEnvironmentService.getMockEnvironmentByProjectId(returnModel.getId(), baseUrl); + apiTestEnvironmentService.getMockEnvironmentByProjectId(returnModel.getId(), project.getProtocal(), baseUrl); return returnModel; } diff --git a/frontend/src/business/components/api/definition/components/complete/EditCompleteHTTPApi.vue b/frontend/src/business/components/api/definition/components/complete/EditCompleteHTTPApi.vue index 7fe43cd077..2e4fd0c2c1 100644 --- a/frontend/src/business/components/api/definition/components/complete/EditCompleteHTTPApi.vue +++ b/frontend/src/business/components/api/definition/components/complete/EditCompleteHTTPApi.vue @@ -294,8 +294,10 @@ this.httpForm.modulePath = data.path; }, initMockEnvironment() { + var protocol = document.location.protocol; + protocol = protocol.substring(0, protocol.indexOf(":")); let url = "/api/definition/getMockEnvironment/"; - this.$get(url + this.projectId, response => { + this.$get(url + this.projectId + "/" + protocol, response => { this.mockEnvironment = response.data; let httpConfig = JSON.parse(this.mockEnvironment.config); if (httpConfig != null) { diff --git a/frontend/src/business/components/settings/project/MsProject.vue b/frontend/src/business/components/settings/project/MsProject.vue index 559a385ef8..985629601f 100644 --- a/frontend/src/business/components/settings/project/MsProject.vue +++ b/frontend/src/business/components/settings/project/MsProject.vue @@ -241,8 +241,11 @@ export default { if (valid) { let saveType = "add"; if (this.form.id) { - saveType = "update" + saveType = "update"; } + var protocol = document.location.protocol; + protocol = protocol.substring(0, protocol.indexOf(":")); + this.form.protocal = protocol; this.result = this.$post("/project/" + saveType, this.form, () => { this.createVisible = false; this.list();