refactor(接口测试): 代码格式以及规范调整

This commit is contained in:
lan-yonghui 2023-11-10 16:05:16 +08:00 committed by Craftsman
parent 3b0a24da8b
commit 06bc78dc29
7 changed files with 49 additions and 65 deletions

View File

@ -188,4 +188,4 @@ public class ApiDefinition implements Serializable {
return this.getEscapedColumnName();
}
}
}
}

View File

@ -73,10 +73,10 @@ public class ApiDefinitionController {
@PostMapping("/page")
@Operation(summary = "接口测试-接口管理-接口列表")
@RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ)
public Pager<List<ApiDefinitionDTO>> getListByPage(@Validated @RequestBody ApiDefinitionPageRequest request) {
public Pager<List<ApiDefinitionDTO>> getPage(@Validated @RequestBody ApiDefinitionPageRequest request) {
Page<Object> page = PageHelper.startPage(request.getCurrent(), request.getPageSize(),
StringUtils.isNotBlank(request.getSortString()) ? request.getSortString() : "create_time desc");
return PageUtils.setPageInfo(page, apiDefinitionService.getApiDefinitionPage(request));
return PageUtils.setPageInfo(page, apiDefinitionService.getApiDefinitionPage(request, false));
}
}

View File

@ -10,18 +10,8 @@ import lombok.EqualsAndHashCode;
* @version: 1.0
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ApiCaseComputeDTO {
@Schema(description = "更新人名称")
private String updateUserName;
@Schema(description = "删除人名称")
private String deleteUserName;
@Schema(description = "版本名称")
private String versionName;
@Schema(description = "接口ID")
private String apiDefinitionId;
@ -34,10 +24,13 @@ public class ApiCaseComputeDTO {
@Schema(description = "用例通过率")
private String casePassRate;
@Schema(description = "用例成功")
@Schema(description = "成功用例")
private int success;
@Schema(description = "用例失败")
@Schema(description = "失败用例")
private int error;
@Schema(description = "误报用例")
private int fakeError;
}

View File

@ -10,7 +10,7 @@ import java.util.List;
public interface ExtApiDefinitionMapper {
void deleteApiToGc(@Param("ids") List<String> ids, @Param("userId") String userId, @Param("time") long time);
List<ApiDefinitionDTO> list(@Param("request") ApiDefinitionPageRequest request);
List<ApiDefinitionDTO> list(@Param("request") ApiDefinitionPageRequest request, @Param("deleted") boolean deleted);
List<ApiCaseComputeDTO> selectApiCaseByIdsAndStatusIsNotTrash(@Param("ids") List<String> ids, @Param("projectId") String projectId);

View File

@ -21,6 +21,7 @@
api_definition.deleted, project_version.name as version_name
from api_definition
LEFT JOIN project_version ON project_version.id = api_definition.version_id
where deleted = #{deleted}
<include refid="queryWhereCondition"/>
</select>
@ -31,13 +32,14 @@
t1.api_definition_id apiDefinitionId,
count( t1.id ) caseTotal,
SUM( CASE WHEN t2.`status` = 'SUCCESS' THEN 1 ELSE 0 END ) AS `success`,
SUM( CASE WHEN t2.`status` IN ( 'ERROR', 'FAKE_ERROR' ) THEN 1 ELSE 0 END ) AS `error`,
SUM( CASE WHEN t2.`status` = 'ERROR' THEN 1 ELSE 0 END ) AS `error`,
SUM( CASE WHEN t2.`status` = 'FAKE_ERROR' THEN 1 ELSE 0 END ) AS `fakeError`,
CONCAT( FORMAT( SUM( IF ( t2.`status` = 'SUCCESS', 1, 0 ))/ COUNT( t1.id )* 100, 2 ), '%' ) casePassRate
FROM
api_test_case t1
LEFT JOIN api_report t2 ON t1.last_report_id = t2.id
WHERE
t1.project_id = #{projectId} and (t1.`status` is null or t1.`status` != 'Trash')
t1.project_id = #{projectId} and t1.deleted = 0
GROUP BY
t1.api_definition_id
@ -48,36 +50,34 @@
</foreach>
</select>
<sql id="queryWhereCondition">
<where>
<if test="request.keyword != null and request.keyword != ''">
and (
api_definition.num like concat('%', #{request.keyword},'%')
or api_definition.name like concat('%', #{request.keyword},'%')
or api_definition.tags like JSON_CONTAINS(tags, concat('["',#{request.keyword},'"]'))
)
</if>
<if test="request.projectId != null and request.projectId != ''">
and api_definition.project_id = #{request.projectId}
</if>
<if test="request.protocol != null and request.protocol != ''">
AND api_definition.protocol = #{request.protocol}
</if>
<include refid="filters">
<property name="filter" value="request.filter"/>
</include>
<if test="request.keyword != null and request.keyword != ''">
and (
api_definition.num like concat('%', #{request.keyword},'%')
or api_definition.name like concat('%', #{request.keyword},'%')
or api_definition.tags like JSON_CONTAINS(tags, concat('["',#{request.keyword},'"]'))
)
</if>
<if test="request.projectId != null and request.projectId != ''">
and api_definition.project_id = #{request.projectId}
</if>
<if test="request.protocol != null and request.protocol != ''">
AND api_definition.protocol = #{request.protocol}
</if>
<include refid="filters">
<property name="filter" value="request.filter"/>
</include>
<if test="request.combine != null and request.combine != ''">
<include refid="combine">
<property name="condition" value="request.combine"/>
<property name="name" value="request.name"/>
<property name="ObjectTags" value="request.combine.tags"/>
</include>
</if>
<include refid="queryVersionCondition">
<property name="versionTable" value="api_definition"/>
<if test="request.combine != null and request.combine != ''">
<include refid="combine">
<property name="condition" value="request.combine"/>
<property name="name" value="request.name"/>
<property name="ObjectTags" value="request.combine.tags"/>
</include>
</where>
</if>
<include refid="queryVersionCondition">
<property name="versionTable" value="api_definition"/>
</include>
</sql>
<sql id="filters">

View File

@ -9,8 +9,6 @@ import io.metersphere.api.dto.request.ApiDefinitionPageRequest;
import io.metersphere.api.enums.ApiReportStatus;
import io.metersphere.api.mapper.ApiDefinitionMapper;
import io.metersphere.api.mapper.ExtApiDefinitionMapper;
import io.metersphere.project.domain.Project;
import io.metersphere.system.mapper.BaseProjectMapper;
import io.metersphere.system.service.UserLoginService;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.NotNull;
@ -33,8 +31,6 @@ public class ApiDefinitionService {
@Resource
private ExtApiDefinitionMapper extApiDefinitionMapper;
@Resource
private BaseProjectMapper baseProjectMapper;
@Resource
private UserLoginService userLoginService;
@ -60,15 +56,15 @@ public class ApiDefinitionService {
}
public List<ApiDefinitionDTO> getApiDefinitionPage(ApiDefinitionPageRequest request){
List<ApiDefinitionDTO> list = extApiDefinitionMapper.list(request);
public List<ApiDefinitionDTO> getApiDefinitionPage(ApiDefinitionPageRequest request, Boolean deleted){
List<ApiDefinitionDTO> list = extApiDefinitionMapper.list(request, deleted);
if (!CollectionUtils.isEmpty(list)) {
buildConvertInfo(list);
convertUserIdToName(list);
calculateApiCase(list, request.getProjectId());
}
return list;
}
private void buildConvertInfo(List<ApiDefinitionDTO> list) {
private void convertUserIdToName(List<ApiDefinitionDTO> list) {
Set<String> userIds = extractUserIds(list);
Map<String, String> userMap = userLoginService.getUserNameMap(new ArrayList<>(userIds));
@ -85,14 +81,6 @@ public class ApiDefinitionService {
.collect(Collectors.toSet());
}
private Map<String, String> fetchProjectNames(List<ApiDefinitionDTO> list) {
List<String> projectIds = list.stream()
.map(ApiDefinitionDTO::getProjectId)
.collect(Collectors.toList());
List<Project> projects = baseProjectMapper.selectProjectByIdList(projectIds);
return projects.stream().collect(Collectors.toMap(Project::getId, Project::getName));
}
private void calculateApiCase(List<ApiDefinitionDTO> list, String projectId) {
List<String> ids = list.stream().map(ApiDefinitionDTO::getId).toList();
List<ApiCaseComputeDTO> apiCaseComputeList = extApiDefinitionMapper.selectApiCaseByIdsAndStatusIsNotTrash(ids, projectId);
@ -103,11 +91,13 @@ public class ApiDefinitionService {
if (apiCaseComputeDTO != null) {
item.setCaseTotal(apiCaseComputeDTO.getCaseTotal());
item.setCasePassRate(apiCaseComputeDTO.getCasePassRate());
// 状态优先级 未执行未通过通过
// 状态优先级 未执行未通过误报FAKE_ERROR通过
if ((apiCaseComputeDTO.getError() + apiCaseComputeDTO.getSuccess()) < apiCaseComputeDTO.getCaseTotal()) {
item.setCaseStatus(ApiReportStatus.PENDING.name());
} else if (apiCaseComputeDTO.getError() > 0) {
item.setCaseStatus(ApiReportStatus.ERROR.name());
} else if (apiCaseComputeDTO.getFakeError() > 0) {
item.setCaseStatus(ApiReportStatus.FAKE_ERROR.name());
} else {
item.setCaseStatus(ApiReportStatus.SUCCESS.name());
}

View File

@ -128,13 +128,14 @@ public class ApiDefinitionControllerTests extends BaseTest {
@Test
@Order(6)
@Sql(scripts = {"/dml/init_api_definition.sql"}, config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED))
public void getListBPage() throws Exception {
public void getPage() throws Exception {
ApiDefinitionPageRequest request = new ApiDefinitionPageRequest();
request.setProjectId(DEFAULT_PROJECT_ID);
request.setCurrent(1);
request.setPageSize(10);
this.requestPost(URL_DEFINITION_PAGE, request);
request.setSort(new HashMap<>() {{
put("createTime", "desc");
put("createTime", "asc");
}});
// ALL 全部 KEYWORD 关键字 FILTER 筛选 COMBINE 自定义