feat(项目管理): 项目管理-应用设置-性能测试配置功能

This commit is contained in:
WangXu10 2023-09-06 14:24:02 +08:00 committed by 刘瑞斌
parent ac387b6fd0
commit 3435390650
11 changed files with 172 additions and 5 deletions

View File

@ -145,6 +145,8 @@ public class PermissionConstants {
public static final String PROJECT_APPLICATION_TEST_PLAN_UPDATE = "PROJECT_APPLICATION_TEST_PLAN:UPDATE"; public static final String PROJECT_APPLICATION_TEST_PLAN_UPDATE = "PROJECT_APPLICATION_TEST_PLAN:UPDATE";
public static final String PROJECT_APPLICATION_UI_READ = "PROJECT_APPLICATION_UI:READ"; public static final String PROJECT_APPLICATION_UI_READ = "PROJECT_APPLICATION_UI:READ";
public static final String PROJECT_APPLICATION_UI_UPDATE = "PROJECT_APPLICATION_UI:UPDATE"; public static final String PROJECT_APPLICATION_UI_UPDATE = "PROJECT_APPLICATION_UI:UPDATE";
public static final String PROJECT_APPLICATION_PERFORMANCE_TEST_READ = "PROJECT_APPLICATION_PERFORMANCE_TEST:READ";
public static final String PROJECT_APPLICATION_PERFORMANCE_TEST_UPDATE = "PROJECT_APPLICATION_PERFORMANCE_TEST:UPDATE";
/*------ end: PROJECT_APPLICATION ------*/ /*------ end: PROJECT_APPLICATION ------*/
public static final String PROJECT_BASE_INFO_READ = "PROJECT_BASE_INFO:READ"; public static final String PROJECT_BASE_INFO_READ = "PROJECT_BASE_INFO:READ";
} }

View File

@ -32,6 +32,21 @@ public enum ProjectApplicationType {
APPLICATION_SHARE_UI_REPORT, APPLICATION_SHARE_UI_REPORT,
//性能测试
/**
* 性能测试报告保留范围 value
*/
APPLICATION_CLEAN_PERFORMANCE_TEST_REPORT,
/**
* 性能测试报告有效期 value
*/
APPLICATION_SHARE_PERFORMANCE_TEST_REPORT,
/**
* 性能测试脚本审核人
*/
APPLICATION_PERFORMANCE_TEST_SCRIPT_REVIEWER,
//缺陷管理 //缺陷管理
/** /**
* 同步缺陷 标识 * 同步缺陷 标识

View File

@ -109,5 +109,7 @@ permission.project_application_test_plan.read=Test plan read
permission.project_application_test_plan.update=Test plan update permission.project_application_test_plan.update=Test plan update
permission.project_application_ui.read=UI test read permission.project_application_ui.read=UI test read
permission.project_application_ui.update=UI test update permission.project_application_ui.update=UI test update
permission.project_application_performance_test.read=Performance test read
permission.project_application_performance_test.update=Performance test update
permission.project_base_info.name=Project base info permission.project_base_info.name=Project base info
permission.project_log.name=Operation log permission.project_log.name=Operation log

View File

@ -109,5 +109,7 @@ permission.project_application_test_plan.read=测试计划-查询
permission.project_application_test_plan.update=测试计划-编辑 permission.project_application_test_plan.update=测试计划-编辑
permission.project_application_ui.read=UI测试-查询 permission.project_application_ui.read=UI测试-查询
permission.project_application_ui.update=UI测试-编辑 permission.project_application_ui.update=UI测试-编辑
permission.project_application_performance_test.read=性能测试-查询
permission.project_application_performance_test.update=性能测试-编辑
permission.project_base_info.name=基本信息 permission.project_base_info.name=基本信息
permission.project_log.name=日志 permission.project_log.name=日志

View File

@ -109,5 +109,7 @@ permission.project_application_test_plan.read=測試計劃-查詢
permission.project_application_test_plan.update=測試計劃-編輯 permission.project_application_test_plan.update=測試計劃-編輯
permission.project_application_ui.read=UI測試-查詢 permission.project_application_ui.read=UI測試-查詢
permission.project_application_ui.update=UI測試-編輯 permission.project_application_ui.update=UI測試-編輯
permission.project_application_performance_test.read=性能測試-查詢
permission.project_application_performance_test.update=性能測試-編輯
permission.project_base_info.name=基本信息 permission.project_base_info.name=基本信息
permission.project_log.name=日誌 permission.project_log.name=日誌

View File

@ -6,10 +6,14 @@ import io.metersphere.project.service.ProjectApplicationService;
import io.metersphere.sdk.constants.PermissionConstants; import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.log.annotation.Log; import io.metersphere.sdk.log.annotation.Log;
import io.metersphere.sdk.log.constants.OperationLogType; import io.metersphere.sdk.log.constants.OperationLogType;
import io.metersphere.sdk.util.SessionUtils;
import io.metersphere.system.domain.User;
import io.metersphere.system.service.UserService;
import io.metersphere.validation.groups.Updated; import io.metersphere.validation.groups.Updated;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -23,7 +27,8 @@ import java.util.List;
public class ProjectApplicationController { public class ProjectApplicationController {
@Resource @Resource
private ProjectApplicationService projectApplicationService; private ProjectApplicationService projectApplicationService;
@Resource
private UserService userService;
/** /**
* ==========测试计划========== * ==========测试计划==========
@ -63,4 +68,31 @@ public class ProjectApplicationController {
public List<ProjectApplication> getUI(@Validated @RequestBody ProjectApplicationRequest request) { public List<ProjectApplication> getUI(@Validated @RequestBody ProjectApplicationRequest request) {
return projectApplicationService.get(request); return projectApplicationService.get(request);
} }
/**
* ==========性能测试==========
*/
@PostMapping("/update/performance-test")
@Operation(summary = "应用设置-性能测试-配置")
@RequiresPermissions(PermissionConstants.PROJECT_APPLICATION_PERFORMANCE_TEST_UPDATE)
@Log(type = OperationLogType.UPDATE, expression = "#msClass.updatePerformanceLog(#application)", msClass = ProjectApplicationService.class)
public ProjectApplication updatePerformanceTest(@Validated({Updated.class}) @RequestBody ProjectApplication application) {
return projectApplicationService.update(application);
}
@PostMapping("/performance-test")
@Operation(summary = "应用设置-性能测试-获取配置")
@RequiresPermissions(PermissionConstants.PROJECT_APPLICATION_PERFORMANCE_TEST_READ)
public List<ProjectApplication> getPerformanceTest(@Validated @RequestBody ProjectApplicationRequest request) {
return projectApplicationService.get(request);
}
@GetMapping("/performance-test/user/{projectId}")
@Operation(summary = "应用设置-性能测试-获取审核人")
@RequiresPermissions(PermissionConstants.PROJECT_APPLICATION_PERFORMANCE_TEST_READ)
public List<User> getCheckUser(@PathVariable String projectId) {
return projectApplicationService.getProjectUserList(StringUtils.defaultIfBlank(projectId, SessionUtils.getCurrentProjectId()));
}
} }

View File

@ -17,4 +17,11 @@ public interface ExtProjectUserRoleMapper {
* @return 项目成员列表 * @return 项目成员列表
*/ */
List<User> listProjectRoleMember(@Param("request") ProjectUserRoleMemberRequest request); List<User> listProjectRoleMember(@Param("request") ProjectUserRoleMemberRequest request);
/**
* 根据项目id获取 项目成员
* @param sourceId
* @return
*/
List<User> getProjectUserList(@Param("sourceId") String sourceId);
} }

View File

@ -10,4 +10,16 @@
and u.name like concat('%', #{request.keyword}, '%') and u.name like concat('%', #{request.keyword}, '%')
</if> </if>
</select> </select>
<select id="getProjectUserList" resultType="io.metersphere.system.domain.User">
SELECT
u.id,
u.NAME
FROM
`user` u
LEFT JOIN user_role_relation urr ON u.id = urr.user_id
WHERE
urr.source_id = #{sourceId} and u.deleted = false
order by u.create_time desc
</select>
</mapper> </mapper>

View File

@ -3,6 +3,7 @@ package io.metersphere.project.service;
import io.metersphere.project.domain.ProjectApplication; import io.metersphere.project.domain.ProjectApplication;
import io.metersphere.project.domain.ProjectApplicationExample; import io.metersphere.project.domain.ProjectApplicationExample;
import io.metersphere.project.job.CleanUpReportJob; import io.metersphere.project.job.CleanUpReportJob;
import io.metersphere.project.mapper.ExtProjectUserRoleMapper;
import io.metersphere.project.mapper.ProjectApplicationMapper; import io.metersphere.project.mapper.ProjectApplicationMapper;
import io.metersphere.project.request.ProjectApplicationRequest; import io.metersphere.project.request.ProjectApplicationRequest;
import io.metersphere.sdk.constants.OperationLogConstants; import io.metersphere.sdk.constants.OperationLogConstants;
@ -15,6 +16,8 @@ import io.metersphere.sdk.sechedule.BaseScheduleService;
import io.metersphere.sdk.util.JSON; import io.metersphere.sdk.util.JSON;
import io.metersphere.sdk.util.SessionUtils; import io.metersphere.sdk.util.SessionUtils;
import io.metersphere.system.domain.Schedule; import io.metersphere.system.domain.Schedule;
import io.metersphere.system.domain.User;
import io.metersphere.system.mapper.ExtUserMapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
@ -35,6 +38,9 @@ public class ProjectApplicationService {
@Resource @Resource
private BaseScheduleService baseScheduleService; private BaseScheduleService baseScheduleService;
@Resource
private ExtProjectUserRoleMapper extProjectUserRoleMapper;
/** /**
* 更新配置信息 * 更新配置信息
@ -67,8 +73,9 @@ public class ProjectApplicationService {
String type = application.getType(); String type = application.getType();
//TODO 自定义id配置 &其他配置 //TODO 自定义id配置 &其他配置
if (StringUtils.equals(type, ProjectApplicationType.APPLICATION_CLEAN_TEST_PLAN_REPORT.name()) if (StringUtils.equals(type, ProjectApplicationType.APPLICATION_CLEAN_TEST_PLAN_REPORT.name())
|| StringUtils.equals(type, ProjectApplicationType.APPLICATION_CLEAN_UI_REPORT.name())) { || StringUtils.equals(type, ProjectApplicationType.APPLICATION_CLEAN_UI_REPORT.name())
//清除 测试计划/UI 报告 定时任务 || StringUtils.equals(type, ProjectApplicationType.APPLICATION_CLEAN_PERFORMANCE_TEST_REPORT.name())) {
//清除 测试计划/UI测试/性能测试 报告 定时任务
this.doHandleSchedule(application); this.doHandleSchedule(application);
} }
} }
@ -110,6 +117,7 @@ public class ProjectApplicationService {
/** /**
* 获取配置信息 * 获取配置信息
*
* @param request * @param request
* @return * @return
*/ */
@ -124,6 +132,11 @@ public class ProjectApplicationService {
} }
public List<User> getProjectUserList(String projectId) {
return extProjectUserRoleMapper.getProjectUserList(projectId);
}
/** /**
* 测试计划 日志 * 测试计划 日志
* *
@ -145,6 +158,15 @@ public class ProjectApplicationService {
return delLog(application, OperationLogModule.PROJECT_PROJECT_MANAGER, "UI配置"); return delLog(application, OperationLogModule.PROJECT_PROJECT_MANAGER, "UI配置");
} }
/**
* 性能测试 日志
*
* @param application
* @return
*/
public LogDTO updatePerformanceLog(ProjectApplication application) {
return delLog(application, OperationLogModule.PROJECT_PROJECT_MANAGER, "性能测试配置");
}
private LogDTO delLog(ProjectApplication application, String module, String content) { private LogDTO delLog(ProjectApplication application, String module, String content) {
ProjectApplicationExample example = new ProjectApplicationExample(); ProjectApplicationExample example = new ProjectApplicationExample();

View File

@ -143,6 +143,14 @@
{ {
"id": "PROJECT_APPLICATION_UI:UPDATE", "id": "PROJECT_APPLICATION_UI:UPDATE",
"name": "permission.project_application_ui.update" "name": "permission.project_application_ui.update"
},
{
"id": "PROJECT_APPLICATION_PERFORMANCE_TEST:READ",
"name": "permission.project_application_performance_test.read"
},
{
"id": "PROJECT_APPLICATION_PERFORMANCE_TEST:UPDATE",
"name": "permission.project_application_performance_test.update"
} }
] ]
}, },

View File

@ -77,7 +77,6 @@ public class ProjectApplicationControllerTests extends BaseTest {
*/ */
/** /**
* ==========UI测试 start========== * ==========UI测试 start==========
*/ */
@ -90,7 +89,6 @@ public class ProjectApplicationControllerTests extends BaseTest {
@Test @Test
@Order(4) @Order(4)
public void testUiClean() throws Exception { public void testUiClean() throws Exception {
this.testGetTestPlan();
//新增 //新增
ProjectApplication request = creatRequest(ProjectApplicationType.APPLICATION_CLEAN_UI_REPORT.name(), TIME_TYPE_VALUE); ProjectApplication request = creatRequest(ProjectApplicationType.APPLICATION_CLEAN_UI_REPORT.name(), TIME_TYPE_VALUE);
this.requestPost(UI_UPDATE_URL, request); this.requestPost(UI_UPDATE_URL, request);
@ -131,6 +129,71 @@ public class ProjectApplicationControllerTests extends BaseTest {
*/ */
/**
* ==========性能测试 start==========
*/
// 性能测试
public static final String PERFORMANCE_UPDATE_URL = "/project/application/update/performance-test";
//获取配置
public static final String GET_PERFORMANCE_URL = "/project/application/performance-test";
//获取脚本审核人
public static final String GET_USER_URL = "/project/application/performance-test/user";
//应用配置 - UI测试 - 清理报告配置
@Test
@Order(7)
public void testPerformanceClean() throws Exception {
//新增
ProjectApplication request = creatRequest(ProjectApplicationType.APPLICATION_CLEAN_PERFORMANCE_TEST_REPORT.name(), TIME_TYPE_VALUE);
this.requestPost(PERFORMANCE_UPDATE_URL, request);
//更新
request.setTypeValue("4M");
this.requestPost(PERFORMANCE_UPDATE_URL, request);
// @@异常参数校验
updatedGroupParamValidateTest(ProjectApplicationDefinition.class, PERFORMANCE_UPDATE_URL);
}
//应用管理 - UI测试 - 分享报告配置
@Test
@Order(8)
public void testPerformanceShare() throws Exception {
//新增
ProjectApplication request = creatRequest(ProjectApplicationType.APPLICATION_SHARE_PERFORMANCE_TEST_REPORT.name(), TIME_TYPE_VALUE);
this.requestPost(PERFORMANCE_UPDATE_URL, request);
//更新
request.setTypeValue("5M");
this.requestPost(PERFORMANCE_UPDATE_URL, request);
}
//应用管理 - UI测试 - 脚本审核
@Test
@Order(9)
public void testPerformanceReviewer() throws Exception {
//新增
ProjectApplication request = creatRequest(ProjectApplicationType.APPLICATION_PERFORMANCE_TEST_SCRIPT_REVIEWER.name(), "admin");
this.requestPost(PERFORMANCE_UPDATE_URL, request);
}
//应用管理 - UI测试 - 获取配置
@Test
@Order(10)
public void testGetPerformance() throws Exception {
//清理报告 + 分享报告
List<String> types = Arrays.asList(ProjectApplicationType.APPLICATION_CLEAN_PERFORMANCE_TEST_REPORT.name(), ProjectApplicationType.APPLICATION_SHARE_PERFORMANCE_TEST_REPORT.name(), ProjectApplicationType.APPLICATION_PERFORMANCE_TEST_SCRIPT_REVIEWER.name());
ProjectApplicationRequest request = this.getRequest(types);
this.requestPostWithOkAndReturn(GET_PERFORMANCE_URL, request);
// @@异常参数校验
updatedGroupParamValidateTest(ProjectApplicationRequestDefinition.class, GET_PERFORMANCE_URL);
}
@Test
@Order(11)
public void testGetUser() throws Exception {
this.requestGetWithOkAndReturn(GET_USER_URL + "/default-project-2");
}
private ProjectApplicationRequest getRequest(List<String> types) { private ProjectApplicationRequest getRequest(List<String> types) {
ProjectApplicationRequest request = new ProjectApplicationRequest(); ProjectApplicationRequest request = new ProjectApplicationRequest();
request.setProjectId(PROJECT_ID); request.setProjectId(PROJECT_ID);