diff --git a/backend/src/main/java/io/metersphere/api/dto/definition/parse/JmeterDefinitionParser.java b/backend/src/main/java/io/metersphere/api/dto/definition/parse/JmeterDefinitionParser.java index c7bac2b783..028e28b766 100644 --- a/backend/src/main/java/io/metersphere/api/dto/definition/parse/JmeterDefinitionParser.java +++ b/backend/src/main/java/io/metersphere/api/dto/definition/parse/JmeterDefinitionParser.java @@ -37,6 +37,7 @@ import io.metersphere.base.domain.ApiDefinitionWithBLOBs; import io.metersphere.base.domain.ApiTestCaseWithBLOBs; import io.metersphere.base.domain.ApiTestEnvironmentExample; import io.metersphere.base.domain.ApiTestEnvironmentWithBLOBs; +import io.metersphere.commons.constants.APITestStatus; import io.metersphere.commons.exception.MSException; import io.metersphere.commons.utils.BeanUtils; import io.metersphere.commons.utils.CommonBeanFactory; @@ -110,7 +111,7 @@ public class JmeterDefinitionParser extends ApiImportAbstractParser { Map> definitionIdCaseMAp = optionDataCases.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId)); List optionData = new ArrayList<>(); List repeatApiDefinitionWithBLOBs; + Map> oldCaseMap = new HashMap<>(); if (protocol.equals("HTTP")) { //去重 如果url可重复 则模块+名称+请求方式+路径 唯一,否则 请求方式+路径唯一, //覆盖模式留重复的最后一个,不覆盖留第一个 @@ -653,7 +654,6 @@ public class ApiModuleService extends NodeTreeService { //系统内重复的数据 repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByBLOBs(optionData, projectId); //重复接口的case - Map> oldCaseMap = new HashMap<>(); if (!repeatApiDefinitionWithBLOBs.isEmpty()) { oldCaseMap = getOldCaseMap(repeatApiDefinitionWithBLOBs); } @@ -749,7 +749,7 @@ public class ApiModuleService extends NodeTreeService { //获取系统内重复数据 repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByProtocol(nameList, protocol, projectId); //重复接口的case - Map> oldCaseMap = new HashMap<>(); + if (!repeatApiDefinitionWithBLOBs.isEmpty()) { oldCaseMap = getOldCaseMap(repeatApiDefinitionWithBLOBs); } @@ -795,9 +795,25 @@ public class ApiModuleService extends NodeTreeService { if (optionData.isEmpty()) { moduleMap = new HashMap<>(); } + //将原来的case和更改的case组合在一起,为了同步的设置 + List caseIds = optionDataCases.stream().map(ApiTestCase::getId).filter(StringUtils::isNotBlank).collect(Collectors.toList()); + buildCases(optionDataCases, oldCaseMap, caseIds); + return getUpdateApiModuleDTO(moduleMap, toUpdateList, optionData, optionDataCases); } + private void buildCases(List optionDataCases, Map> oldCaseMap, List caseIds) { + if (MapUtils.isNotEmpty(oldCaseMap)) { + List oldCaseList = new ArrayList<>(); + Collection> values = oldCaseMap.values(); + for (List value : values) { + oldCaseList.addAll(value); + } + List collect = oldCaseList.stream().filter(t -> !caseIds.contains(t.getId())).collect(Collectors.toList()); + optionDataCases.addAll(collect); + } + } + private void removeRepeatCase(Boolean fullCoverage, List importCases, List optionDataCases) { LinkedHashMap> apiIdNameMap = importCases.stream().collect(Collectors.groupingBy(t -> t.getName() + t.getApiDefinitionId(), LinkedHashMap::new, Collectors.toList())); if (fullCoverage) { @@ -819,8 +835,8 @@ public class ApiModuleService extends NodeTreeService { ApiTestCaseExample testCaseExample = new ApiTestCaseExample(); testCaseExample.createCriteria().andApiDefinitionIdIn(definitionIds); List caseWithBLOBs = apiTestCaseMapper.selectByExampleWithBLOBs(testCaseExample); - ArrayList testCases = getDistinctNameCases(caseWithBLOBs); - oldCaseMap = testCases.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId)); + /*ArrayList testCases = getDistinctNameCases(caseWithBLOBs);*/ + oldCaseMap = caseWithBLOBs.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId)); return oldCaseMap; }