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 c77efb653b..175345cb1b 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 @@ -78,11 +78,28 @@ public class MsScenario extends MsTestElement { JSONObject element = JSON.parseObject(scenario.getScenarioDefinition()); hashTree = mapper.readValue(element.getString("hashTree"), new TypeReference>() { }); + // 场景变量 + if (StringUtils.isNotEmpty(element.getString("variables"))) { + LinkedList variables = mapper.readValue(element.getString("variables"), + new TypeReference>() { + }); + this.setVariables(variables); + } + // 场景请求头 + if (StringUtils.isNotEmpty(element.getString("headers"))) { + LinkedList headers = mapper.readValue(element.getString("headers"), + new TypeReference>() { + }); + this.setHeaders(headers); + } + } + } catch (Exception ex) { ex.printStackTrace(); } } + // 设置共享cookie config.setEnableCookieShare(enableCookieShare); if (StringUtils.isNotEmpty(environmentId)) { ApiTestEnvironmentService environmentService = CommonBeanFactory.getBean(ApiTestEnvironmentService.class); diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java index e287a189ed..cfcbe910bb 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/request/MsTestElement.java @@ -151,7 +151,7 @@ public abstract class MsTestElement { ApiDefinitionService apiDefinitionService = CommonBeanFactory.getBean(ApiDefinitionService.class); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - ApiDefinitionWithBLOBs apiDefinition = apiDefinitionService.getBLOBs(this.getId()); + ApiDefinitionWithBLOBs apiDefinition = apiDefinitionService.getBLOBs(element.getId()); if (apiDefinition != null) { element = mapper.readValue(apiDefinition.getRequest(), new TypeReference() { }); @@ -159,6 +159,7 @@ public abstract class MsTestElement { } } catch (Exception ex) { ex.printStackTrace(); + LogUtil.error(ex.getMessage()); } } diff --git a/backend/src/main/java/io/metersphere/api/service/APITestService.java b/backend/src/main/java/io/metersphere/api/service/APITestService.java index 7e30d8b9c7..44504fbe8a 100644 --- a/backend/src/main/java/io/metersphere/api/service/APITestService.java +++ b/backend/src/main/java/io/metersphere/api/service/APITestService.java @@ -35,7 +35,6 @@ import org.aspectj.util.FileUtil; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; -import org.dom4j.QName; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -582,9 +581,11 @@ public class APITestService { for (Element itemElement : sampleProxyElementList) { if (isFromScenario) { testName = itemElement.attributeValue(attribute_testName); - String[] testNameArr = testName.split(scenarioCaseNameSplit); - if (testNameArr.length > 0) { - testName = testNameArr[0]; + if (StringUtils.isNotBlank(testName)) { + String[] testNameArr = testName.split(scenarioCaseNameSplit); + if (testNameArr.length > 0) { + testName = testNameArr[0]; + } } } itemElement.attribute(attribute_testName).setText(testName); diff --git a/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java b/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java index edbfe428a0..1328607458 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java @@ -457,12 +457,15 @@ public class ApiAutomationService { }); scenario.setHashTree(elements); } - if (StringUtils.isNotEmpty(element.getString("variables"))) { + if (element != null && StringUtils.isNotEmpty(element.getString("variables"))) { LinkedList variables = mapper.readValue(element.getString("variables"), new TypeReference>() { }); scenario.setVariables(variables); } + if (scenario == null) { + return null; + } // 针对导入的jmx 处理 if (CollectionUtils.isNotEmpty(scenario.getHashTree()) && (scenario.getHashTree().get(0) instanceof MsJmeterElement)) { scenario.toHashTree(jmeterHashTree, scenario.getHashTree(), config); @@ -879,9 +882,13 @@ public class ApiAutomationService { // 生成jmx List resList = new ArrayList<>(); apiScenarioWithBLOBs.forEach(item -> { - String jmx = generateJmx(item); - ApiScenrioExportJmx scenrioExportJmx = new ApiScenrioExportJmx(item.getName(), apiTestService.updateJmxString(jmx, null, true)); - resList.add(scenrioExportJmx); + if (StringUtils.isNotEmpty(item.getScenarioDefinition())) { + String jmx = generateJmx(item); + if (StringUtils.isNotEmpty(jmx)) { + ApiScenrioExportJmx scenrioExportJmx = new ApiScenrioExportJmx(item.getName(), apiTestService.updateJmxString(jmx, null, true)); + resList.add(scenrioExportJmx); + } + } }); return resList; } 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 e86d9a5601..0ed3d739cd 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionService.java @@ -391,9 +391,12 @@ public class ApiDefinitionService { if (apiTestCase.getName().length() > 255) { apiTestCase.setName(apiTestCase.getName().substring(0, 255)); } - if (!isInsert) { + /* if (!isInsert) { apiTestCase.setName(apiTestCase.getName() + "_" + apiTestCase.getId().substring(0, 5)); - } + }*/ + ApiTestCaseExample example = new ApiTestCaseExample(); + example.createCriteria().andApiDefinitionIdEqualTo(apiDefinition.getId()); + apiTestCaseMapper.deleteByExample(example); apiTestCaseMapper.insert(apiTestCase); } } catch (Exception e) { diff --git a/frontend/src/business/components/api/automation/scenario/ApiScenarioList.vue b/frontend/src/business/components/api/automation/scenario/ApiScenarioList.vue index 1d88e26b71..33a1ad6dd4 100644 --- a/frontend/src/business/components/api/automation/scenario/ApiScenarioList.vue +++ b/frontend/src/business/components/api/automation/scenario/ApiScenarioList.vue @@ -109,9 +109,7 @@