fix(接口测试): 修复mock匹配返回值的缺陷

This commit is contained in:
wxg0103 2024-05-21 19:25:52 +08:00 committed by Craftsman
parent 5dc4ebe262
commit d7d6d298be
5 changed files with 19 additions and 24 deletions

View File

@ -26,13 +26,13 @@ public class KeyValueInfo {
return switch (ParamConditionEnums.valueOf(this.condition)) { return switch (ParamConditionEnums.valueOf(this.condition)) {
case EQUALS -> StringUtils.equals(this.value, value); case EQUALS -> StringUtils.equals(this.value, value);
case NOT_EQUALS -> !StringUtils.equals(this.value, value); case NOT_EQUALS -> !StringUtils.equals(this.value, value);
case CONTAINS -> StringUtils.contains(this.value, value); case CONTAINS -> StringUtils.contains(value, this.value);
case NOT_CONTAINS -> !StringUtils.contains(this.value, value); case NOT_CONTAINS -> !StringUtils.contains(value, this.value);
case LENGTH_EQUALS -> this.value.length() == value.length(); case LENGTH_EQUALS -> this.value.length() == value.length();
case LENGTH_NOT_EQUALS -> this.value.length() != value.length(); case LENGTH_NOT_EQUALS -> this.value.length() != value.length();
case LENGTH_SHOT -> this.value.length() < value.length(); case LENGTH_SHOT -> value.length() < this.value.length();
case LENGTH_LARGE -> this.value.length() > value.length(); case LENGTH_LARGE -> value.length() > this.value.length();
case REGULAR_MATCH -> this.value.matches(Pattern.quote(value)); case REGULAR_MATCH -> value.matches(Pattern.quote(this.value));
case IS_EMPTY -> StringUtils.isBlank(value); case IS_EMPTY -> StringUtils.isBlank(value);
case IS_NOT_EMPTY -> StringUtils.isNotBlank(value); case IS_NOT_EMPTY -> StringUtils.isNotBlank(value);
default -> false; default -> false;

View File

@ -75,7 +75,7 @@ public class ApiDebugModuleLogService {
public void saveDeleteModuleLog(List<BaseTreeNode> deleteModule, String operator, String projectId) { public void saveDeleteModuleLog(List<BaseTreeNode> deleteModule, String operator, String projectId) {
Project project = projectMapper.selectByPrimaryKey(projectId); Project project = projectMapper.selectByPrimaryKey(projectId);
List<LogDTO> dtos = new ArrayList<>(); List<LogDTO> dos = new ArrayList<>();
deleteModule.forEach(item -> { deleteModule.forEach(item -> {
LogDTO dto = LogDTOBuilder.builder() LogDTO dto = LogDTOBuilder.builder()
.projectId(project.getId()) .projectId(project.getId())
@ -88,10 +88,10 @@ public class ApiDebugModuleLogService {
.content(item.getName() + " " + Translator.get("log.delete_module")) .content(item.getName() + " " + Translator.get("log.delete_module"))
.createUser(operator) .createUser(operator)
.build().getLogDTO(); .build().getLogDTO();
dtos.add(dto); dos.add(dto);
} }
); );
operationLogService.batchAdd(dtos); operationLogService.batchAdd(dos);
} }
public void saveDeleteDataLog(List<ApiDebug> deleteData, String operator, String projectId) { public void saveDeleteDataLog(List<ApiDebug> deleteData, String operator, String projectId) {

View File

@ -53,8 +53,6 @@ public class ApiReportService {
@Resource @Resource
private ApiReportLogService apiReportLogService; private ApiReportLogService apiReportLogService;
@Resource @Resource
private ApiTestCaseRecordMapper apiTestCaseRecordMapper;
@Resource
private ApiReportLogMapper apiReportLogMapper; private ApiReportLogMapper apiReportLogMapper;
@Resource @Resource
private UserMapper userMapper; private UserMapper userMapper;
@ -192,7 +190,7 @@ public class ApiReportService {
List<ApiReportLog> apiReportLogs = apiReportLogMapper.selectByExampleWithBLOBs(consoleExample); List<ApiReportLog> apiReportLogs = apiReportLogMapper.selectByExampleWithBLOBs(consoleExample);
if (CollectionUtils.isNotEmpty(apiReportLogs)) { if (CollectionUtils.isNotEmpty(apiReportLogs)) {
//获取所有的console,生成集合 //获取所有的console,生成集合
List<String> consoleList = apiReportLogs.stream().map(c -> new String (c.getConsole())).toList(); List<String> consoleList = apiReportLogs.stream().map(c -> new String(c.getConsole())).toList();
apiReportDTO.setConsole(String.join("\n", consoleList)); apiReportDTO.setConsole(String.join("\n", consoleList));
} }
//查询资源池名称 //查询资源池名称
@ -230,7 +228,7 @@ public class ApiReportService {
apiReportDetails.forEach(apiReportDetail -> { apiReportDetails.forEach(apiReportDetail -> {
ApiReportDetailDTO apiReportDetailDTO = new ApiReportDetailDTO(); ApiReportDetailDTO apiReportDetailDTO = new ApiReportDetailDTO();
BeanUtils.copyBean(apiReportDetailDTO, apiReportDetail); BeanUtils.copyBean(apiReportDetailDTO, apiReportDetail);
apiReportDetailDTO.setContent(apiReportDetail.getContent() != null ? ApiDataUtils.parseObject(new String(apiReportDetail.getContent()), RequestResult.class): null); apiReportDetailDTO.setContent(apiReportDetail.getContent() != null ? ApiDataUtils.parseObject(new String(apiReportDetail.getContent()), RequestResult.class) : null);
results.add(apiReportDetailDTO); results.add(apiReportDetailDTO);
}); });
return results; return results;
@ -248,6 +246,7 @@ public class ApiReportService {
/** /**
* 更新执行中的用例报告 * 更新执行中的用例报告
*
* @param reportId * @param reportId
*/ */
public void updateReportStatus(String reportId, String status) { public void updateReportStatus(String reportId, String status) {

View File

@ -214,7 +214,8 @@ public class ApiTestCaseBatchRunService {
} }
/** /**
* 集成报告执行前先设置成 RUNNING * 集成报告执行前先设置成 RUNNING
*
* @param runModeConfig * @param runModeConfig
*/ */
private void setRunningIntegrateReport(ApiRunModeConfigDTO runModeConfig) { private void setRunningIntegrateReport(ApiRunModeConfigDTO runModeConfig) {
@ -326,7 +327,7 @@ public class ApiTestCaseBatchRunService {
TaskRequestDTO taskRequest = getTaskRequestDTO(reportId, apiTestCase, runModeConfig); TaskRequestDTO taskRequest = getTaskRequestDTO(reportId, apiTestCase, runModeConfig);
taskRequest.setQueueId(queue.getQueueId()); taskRequest.setQueueId(queue.getQueueId());
taskRequest.setRequestCount(1l); taskRequest.setRequestCount(1L);
execute(taskRequest, apiTestCase, apiTestCaseBlob, BeanUtils.copyBean(new ApiDefinitionExecuteInfo(), apiDefinition)); execute(taskRequest, apiTestCase, apiTestCaseBlob, BeanUtils.copyBean(new ApiDefinitionExecuteInfo(), apiDefinition));
} }

View File

@ -98,6 +98,7 @@ public class MockServerService {
// Get and return the response body // Get and return the response body
try { try {
return getResponseBody(compareMockConfig, apiDefinition.getId(), apiDefinition.getProjectId()); return getResponseBody(compareMockConfig, apiDefinition.getId(), apiDefinition.getProjectId());
} catch (Exception e) { } catch (Exception e) {
return requestNotFound(); return requestNotFound();
@ -127,20 +128,14 @@ public class MockServerService {
List<ApiDefinitionMockConfig> mockConfigs = apiDefinitionMockConfigMapper.selectByExampleWithBLOBs(mockConfigExample); List<ApiDefinitionMockConfig> mockConfigs = apiDefinitionMockConfigMapper.selectByExampleWithBLOBs(mockConfigExample);
// 寻找匹配的 ApiDefinitionMockConfig // 寻找匹配的 ApiDefinitionMockConfig
ApiDefinitionMockConfig apiDefinitionMockConfig = mockConfigs.stream() ApiDefinitionMockConfig apiDefinitionMockConfig = mockConfigs.stream()
.filter(mockConfig -> MockServerUtils.matchMockConfig(mockConfig.getMatching(), requestHeaderMap, param)) .filter(mockConfig -> MockServerUtils.matchMockConfig(mockConfig.getMatching(), requestHeaderMap, param) && matchBinaryBody(mockConfig, param.getBinaryParamsObj(), apiId))
.findFirst() .findFirst()
.orElse(null); .orElse(null);
// 如果是binary类型的body需要特殊处理
if (param.getBinaryParamsObj() != null) {
if (apiDefinitionMockConfig != null && !matchBinaryBody(apiDefinitionMockConfig, param.getBinaryParamsObj(), apiDefinitionMockList.getFirst().getProjectId())) {
apiDefinitionMockConfig = null;
}
}
if (apiDefinitionMockConfig != null) { if (apiDefinitionMockConfig != null) {
ApiMockConfigDTO apiMockConfigDTO = new ApiMockConfigDTO(); ApiMockConfigDTO apiMockConfigDTO = new ApiMockConfigDTO();
BeanUtils.copyBean(apiMockConfigDTO, apiDefinitionMockConfig); BeanUtils.copyBean(apiMockConfigDTO, apiDefinitionMockConfig);
ApiDefinitionMockConfig finalApiDefinitionMockConfig = apiDefinitionMockConfig; apiDefinitionMockList.stream().filter(mock -> StringUtils.equals(mock.getId(), apiDefinitionMockConfig.getId()))
apiDefinitionMockList.stream().filter(mock -> StringUtils.equals(mock.getId(), finalApiDefinitionMockConfig.getId()))
.findFirst() .findFirst()
.ifPresent(mock -> apiMockConfigDTO.setEnable(mock.getEnable())); .ifPresent(mock -> apiMockConfigDTO.setEnable(mock.getEnable()));
return apiMockConfigDTO; return apiMockConfigDTO;
@ -179,7 +174,7 @@ public class MockServerService {
return Arrays.equals(bytes, binaryFile); return Arrays.equals(bytes, binaryFile);
} }
} }
return false; return true;
} }
private ResponseEntity<?> getResponseBody(ApiDefinitionMockConfig config, String apiId, String projectId) { private ResponseEntity<?> getResponseBody(ApiDefinitionMockConfig config, String apiId, String projectId) {