parent
4f1f2f1383
commit
9f9f678760
|
@ -37,6 +37,7 @@ import io.metersphere.base.domain.ApiDefinitionWithBLOBs;
|
||||||
import io.metersphere.base.domain.ApiTestCaseWithBLOBs;
|
import io.metersphere.base.domain.ApiTestCaseWithBLOBs;
|
||||||
import io.metersphere.base.domain.ApiTestEnvironmentExample;
|
import io.metersphere.base.domain.ApiTestEnvironmentExample;
|
||||||
import io.metersphere.base.domain.ApiTestEnvironmentWithBLOBs;
|
import io.metersphere.base.domain.ApiTestEnvironmentWithBLOBs;
|
||||||
|
import io.metersphere.commons.constants.APITestStatus;
|
||||||
import io.metersphere.commons.exception.MSException;
|
import io.metersphere.commons.exception.MSException;
|
||||||
import io.metersphere.commons.utils.BeanUtils;
|
import io.metersphere.commons.utils.BeanUtils;
|
||||||
import io.metersphere.commons.utils.CommonBeanFactory;
|
import io.metersphere.commons.utils.CommonBeanFactory;
|
||||||
|
@ -110,7 +111,7 @@ public class JmeterDefinitionParser extends ApiImportAbstractParser<ApiDefinitio
|
||||||
ApiTestCaseWithBLOBs apiTestCase = new ApiTestCaseWithBLOBs();
|
ApiTestCaseWithBLOBs apiTestCase = new ApiTestCaseWithBLOBs();
|
||||||
BeanUtils.copyBean(apiTestCase, apiDefinitionWithBLOBs);
|
BeanUtils.copyBean(apiTestCase, apiDefinitionWithBLOBs);
|
||||||
apiTestCase.setApiDefinitionId(apiDefinitionWithBLOBs.getId());
|
apiTestCase.setApiDefinitionId(apiDefinitionWithBLOBs.getId());
|
||||||
apiTestCase.setStatus("Prepare");
|
apiTestCase.setCaseStatus(APITestStatus.Prepare.name());
|
||||||
apiTestCase.setPriority("P0");
|
apiTestCase.setPriority("P0");
|
||||||
definitionCases.add(apiTestCase);
|
definitionCases.add(apiTestCase);
|
||||||
|
|
||||||
|
|
|
@ -273,6 +273,9 @@ public class ApiDefinitionExecResultService {
|
||||||
// 更新用例最后执行结果
|
// 更新用例最后执行结果
|
||||||
caseWithBLOBs.setLastResultId(reportId);
|
caseWithBLOBs.setLastResultId(reportId);
|
||||||
caseWithBLOBs.setStatus(status);
|
caseWithBLOBs.setStatus(status);
|
||||||
|
if (status.equals("success")) {
|
||||||
|
caseWithBLOBs.setToBeUpdated(false);
|
||||||
|
}
|
||||||
caseWithBLOBs.setUpdateTime(System.currentTimeMillis());
|
caseWithBLOBs.setUpdateTime(System.currentTimeMillis());
|
||||||
apiTestCaseMapper.updateByPrimaryKey(caseWithBLOBs);
|
apiTestCaseMapper.updateByPrimaryKey(caseWithBLOBs);
|
||||||
|
|
||||||
|
|
|
@ -968,9 +968,7 @@ public class ApiDefinitionService {
|
||||||
apiTestCaseWithBLOBs.setCreateTime(System.currentTimeMillis());
|
apiTestCaseWithBLOBs.setCreateTime(System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
apiTestCaseWithBLOBs.setUpdateTime(System.currentTimeMillis());
|
apiTestCaseWithBLOBs.setUpdateTime(System.currentTimeMillis());
|
||||||
if (StringUtils.isBlank(apiTestCaseWithBLOBs.getStatus())) {
|
|
||||||
apiTestCaseWithBLOBs.setStatus(APITestStatus.Prepare.name());
|
|
||||||
}
|
|
||||||
if (StringUtils.isBlank(apiTestCaseWithBLOBs.getCaseStatus())) {
|
if (StringUtils.isBlank(apiTestCaseWithBLOBs.getCaseStatus())) {
|
||||||
apiTestCaseWithBLOBs.setCaseStatus(APITestStatus.Prepare.name());
|
apiTestCaseWithBLOBs.setCaseStatus(APITestStatus.Prepare.name());
|
||||||
}
|
}
|
||||||
|
@ -1136,7 +1134,7 @@ public class ApiDefinitionService {
|
||||||
} else if (apiTestImportRequest.getCoverModule() != null && apiTestImportRequest.getCoverModule()) {
|
} else if (apiTestImportRequest.getCoverModule() != null && apiTestImportRequest.getCoverModule()) {
|
||||||
apiDefinition.setUpdateTime(System.currentTimeMillis());
|
apiDefinition.setUpdateTime(System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isEmpty(caseList)) {
|
if (StringUtils.isBlank(apiDefinition.getCaseTotal()) || Integer.parseInt(apiDefinition.getCaseTotal()) == 0) {
|
||||||
apiDefinition.setToBeUpdated(false);
|
apiDefinition.setToBeUpdated(false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -1220,82 +1218,6 @@ public class ApiDefinitionService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StringUtils.equals(apiDefinition.getCreateUser(), existApi.getCreateUser())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!StringUtils.equals(apiDefinition.getStatus(), existApi.getStatus())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!StringUtils.equals(apiDefinition.getTags(), existApi.getTags())) {
|
|
||||||
if (apiDefinition.getTags() != null && Objects.equals(apiDefinition.getTags(), "") && existApi.getTags() != null && Objects.equals(existApi.getTags(), "")) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!StringUtils.equals(existApi.getRemark(), apiDefinition.getRemark())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!StringUtils.equals(existApi.getDescription(), apiDefinition.getDescription())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
JsonNode exApiResponse = null;
|
|
||||||
JsonNode apiResponse = null;
|
|
||||||
|
|
||||||
if (StringUtils.isBlank(apiDefinition.getResponse()) || StringUtils.isBlank(existApi.getResponse())) {
|
|
||||||
return !StringUtils.isBlank(apiDefinition.getResponse()) || !StringUtils.isBlank(existApi.getResponse());
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
exApiResponse = objectMapper.readTree(existApi.getResponse());
|
|
||||||
apiResponse = objectMapper.readTree(apiDefinition.getResponse());
|
|
||||||
} catch (JsonProcessingException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exApiResponse == null || apiResponse == null) {
|
|
||||||
return exApiResponse != null || apiResponse != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exApiResponse.get("headers") != null && apiResponse.get("headers") != null) {
|
|
||||||
if (!StringUtils.equals(exApiResponse.get("headers").toString(), apiResponse.get("headers").toString())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exApiResponse.get("type") != null && apiResponse.get("type") != null) {
|
|
||||||
if (!StringUtils.equals(exApiResponse.get("type").toString(), apiResponse.get("type").toString())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exApiResponse.get("name") != null && apiResponse.get("name") != null) {
|
|
||||||
if (!StringUtils.equals(exApiResponse.get("name").toString(), apiResponse.get("name").toString())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exApiResponse.get("body") != null && apiResponse.get("body") != null) {
|
|
||||||
if (!StringUtils.equals(exApiResponse.get("body").toString(), apiResponse.get("body").toString())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exApiResponse.get("statusCode") != null && apiResponse.get("statusCode") != null) {
|
|
||||||
if (!StringUtils.equals(exApiResponse.get("statusCode").toString(), apiResponse.get("statusCode").toString())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exApiResponse.get("enable") != null && apiResponse.get("enable") != null) {
|
|
||||||
if (!StringUtils.equals(exApiResponse.get("enable").toString(), apiResponse.get("enable").toString())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
JsonNode exApiRequest = null;
|
JsonNode exApiRequest = null;
|
||||||
JsonNode apiRequest = null;
|
JsonNode apiRequest = null;
|
||||||
try {
|
try {
|
||||||
|
@ -1349,6 +1271,79 @@ public class ApiDefinitionService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!StringUtils.equals(apiDefinition.getCreateUser(), existApi.getCreateUser())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringUtils.equals(apiDefinition.getStatus(), existApi.getStatus()) && StringUtils.isNotBlank(existApi.getStatus()) && StringUtils.isNotBlank(apiDefinition.getStatus())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringUtils.equals(apiDefinition.getTags(), existApi.getTags())) {
|
||||||
|
if (apiDefinition.getTags() != null && Objects.equals(apiDefinition.getTags(), "") && existApi.getTags() != null && Objects.equals(existApi.getTags(), "")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringUtils.equals(existApi.getRemark(), apiDefinition.getRemark()) && StringUtils.isNotBlank(existApi.getRemark()) && StringUtils.isNotBlank(apiDefinition.getRemark())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringUtils.equals(existApi.getDescription(), apiDefinition.getDescription()) && StringUtils.isNotBlank(existApi.getDescription()) && StringUtils.isNotBlank(apiDefinition.getDescription())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonNode exApiResponse = null;
|
||||||
|
JsonNode apiResponse = null;
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(apiDefinition.getResponse()) || StringUtils.isBlank(existApi.getResponse())) {
|
||||||
|
return !StringUtils.isBlank(apiDefinition.getResponse()) || !StringUtils.isBlank(existApi.getResponse());
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
exApiResponse = objectMapper.readTree(existApi.getResponse());
|
||||||
|
apiResponse = objectMapper.readTree(apiDefinition.getResponse());
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exApiResponse == null || apiResponse == null) {
|
||||||
|
return exApiResponse != null || apiResponse != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exApiResponse.get("headers") != null && apiResponse.get("headers") != null) {
|
||||||
|
if (!StringUtils.equals(exApiResponse.get("headers").toString(), apiResponse.get("headers").toString())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exApiResponse.get("type") != null && apiResponse.get("type") != null) {
|
||||||
|
if (!StringUtils.equals(exApiResponse.get("type").toString(), apiResponse.get("type").toString())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exApiResponse.get("name") != null && apiResponse.get("name") != null) {
|
||||||
|
if (!StringUtils.equals(exApiResponse.get("name").toString(), apiResponse.get("name").toString())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exApiResponse.get("body") != null && apiResponse.get("body") != null) {
|
||||||
|
if (!StringUtils.equals(exApiResponse.get("body").toString(), apiResponse.get("body").toString())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exApiResponse.get("statusCode") != null && apiResponse.get("statusCode") != null) {
|
||||||
|
if (!StringUtils.equals(exApiResponse.get("statusCode").toString(), apiResponse.get("statusCode").toString())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exApiResponse.get("enable") != null && apiResponse.get("enable") != null) {
|
||||||
|
return !StringUtils.equals(exApiResponse.get("enable").toString(), apiResponse.get("enable").toString());
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -643,6 +643,7 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
|
||||||
Map<String, List<ApiTestCaseWithBLOBs>> definitionIdCaseMAp = optionDataCases.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId));
|
Map<String, List<ApiTestCaseWithBLOBs>> definitionIdCaseMAp = optionDataCases.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId));
|
||||||
List<ApiDefinitionWithBLOBs> optionData = new ArrayList<>();
|
List<ApiDefinitionWithBLOBs> optionData = new ArrayList<>();
|
||||||
List<ApiDefinitionWithBLOBs> repeatApiDefinitionWithBLOBs;
|
List<ApiDefinitionWithBLOBs> repeatApiDefinitionWithBLOBs;
|
||||||
|
Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap = new HashMap<>();
|
||||||
if (protocol.equals("HTTP")) {
|
if (protocol.equals("HTTP")) {
|
||||||
//去重 如果url可重复 则模块+名称+请求方式+路径 唯一,否则 请求方式+路径唯一,
|
//去重 如果url可重复 则模块+名称+请求方式+路径 唯一,否则 请求方式+路径唯一,
|
||||||
//覆盖模式留重复的最后一个,不覆盖留第一个
|
//覆盖模式留重复的最后一个,不覆盖留第一个
|
||||||
|
@ -653,7 +654,6 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
|
||||||
//系统内重复的数据
|
//系统内重复的数据
|
||||||
repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByBLOBs(optionData, projectId);
|
repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByBLOBs(optionData, projectId);
|
||||||
//重复接口的case
|
//重复接口的case
|
||||||
Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap = new HashMap<>();
|
|
||||||
if (!repeatApiDefinitionWithBLOBs.isEmpty()) {
|
if (!repeatApiDefinitionWithBLOBs.isEmpty()) {
|
||||||
oldCaseMap = getOldCaseMap(repeatApiDefinitionWithBLOBs);
|
oldCaseMap = getOldCaseMap(repeatApiDefinitionWithBLOBs);
|
||||||
}
|
}
|
||||||
|
@ -749,7 +749,7 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
|
||||||
//获取系统内重复数据
|
//获取系统内重复数据
|
||||||
repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByProtocol(nameList, protocol, projectId);
|
repeatApiDefinitionWithBLOBs = extApiDefinitionMapper.selectRepeatByProtocol(nameList, protocol, projectId);
|
||||||
//重复接口的case
|
//重复接口的case
|
||||||
Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap = new HashMap<>();
|
|
||||||
if (!repeatApiDefinitionWithBLOBs.isEmpty()) {
|
if (!repeatApiDefinitionWithBLOBs.isEmpty()) {
|
||||||
oldCaseMap = getOldCaseMap(repeatApiDefinitionWithBLOBs);
|
oldCaseMap = getOldCaseMap(repeatApiDefinitionWithBLOBs);
|
||||||
}
|
}
|
||||||
|
@ -795,9 +795,25 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
|
||||||
if (optionData.isEmpty()) {
|
if (optionData.isEmpty()) {
|
||||||
moduleMap = new HashMap<>();
|
moduleMap = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
//将原来的case和更改的case组合在一起,为了同步的设置
|
||||||
|
List<String> caseIds = optionDataCases.stream().map(ApiTestCase::getId).filter(StringUtils::isNotBlank).collect(Collectors.toList());
|
||||||
|
buildCases(optionDataCases, oldCaseMap, caseIds);
|
||||||
|
|
||||||
return getUpdateApiModuleDTO(moduleMap, toUpdateList, optionData, optionDataCases);
|
return getUpdateApiModuleDTO(moduleMap, toUpdateList, optionData, optionDataCases);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void buildCases(List<ApiTestCaseWithBLOBs> optionDataCases, Map<String, List<ApiTestCaseWithBLOBs>> oldCaseMap, List<String> caseIds) {
|
||||||
|
if (MapUtils.isNotEmpty(oldCaseMap)) {
|
||||||
|
List<ApiTestCaseWithBLOBs> oldCaseList = new ArrayList<>();
|
||||||
|
Collection<List<ApiTestCaseWithBLOBs>> values = oldCaseMap.values();
|
||||||
|
for (List<ApiTestCaseWithBLOBs> value : values) {
|
||||||
|
oldCaseList.addAll(value);
|
||||||
|
}
|
||||||
|
List<ApiTestCaseWithBLOBs> collect = oldCaseList.stream().filter(t -> !caseIds.contains(t.getId())).collect(Collectors.toList());
|
||||||
|
optionDataCases.addAll(collect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void removeRepeatCase(Boolean fullCoverage, List<ApiTestCaseWithBLOBs> importCases, List<ApiTestCaseWithBLOBs> optionDataCases) {
|
private void removeRepeatCase(Boolean fullCoverage, List<ApiTestCaseWithBLOBs> importCases, List<ApiTestCaseWithBLOBs> optionDataCases) {
|
||||||
LinkedHashMap<String, List<ApiTestCaseWithBLOBs>> apiIdNameMap = importCases.stream().collect(Collectors.groupingBy(t -> t.getName() + t.getApiDefinitionId(), LinkedHashMap::new, Collectors.toList()));
|
LinkedHashMap<String, List<ApiTestCaseWithBLOBs>> apiIdNameMap = importCases.stream().collect(Collectors.groupingBy(t -> t.getName() + t.getApiDefinitionId(), LinkedHashMap::new, Collectors.toList()));
|
||||||
if (fullCoverage) {
|
if (fullCoverage) {
|
||||||
|
@ -819,8 +835,8 @@ public class ApiModuleService extends NodeTreeService<ApiModuleDTO> {
|
||||||
ApiTestCaseExample testCaseExample = new ApiTestCaseExample();
|
ApiTestCaseExample testCaseExample = new ApiTestCaseExample();
|
||||||
testCaseExample.createCriteria().andApiDefinitionIdIn(definitionIds);
|
testCaseExample.createCriteria().andApiDefinitionIdIn(definitionIds);
|
||||||
List<ApiTestCaseWithBLOBs> caseWithBLOBs = apiTestCaseMapper.selectByExampleWithBLOBs(testCaseExample);
|
List<ApiTestCaseWithBLOBs> caseWithBLOBs = apiTestCaseMapper.selectByExampleWithBLOBs(testCaseExample);
|
||||||
ArrayList<ApiTestCaseWithBLOBs> testCases = getDistinctNameCases(caseWithBLOBs);
|
/*ArrayList<ApiTestCaseWithBLOBs> testCases = getDistinctNameCases(caseWithBLOBs);*/
|
||||||
oldCaseMap = testCases.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId));
|
oldCaseMap = caseWithBLOBs.stream().collect(Collectors.groupingBy(ApiTestCase::getApiDefinitionId));
|
||||||
return oldCaseMap;
|
return oldCaseMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue