refactor(接口测试): 优化报告显示
This commit is contained in:
parent
4f5980d46c
commit
f666240c09
|
@ -73,25 +73,25 @@ public class ApiTaskCenterController {
|
|||
apiTaskCenterService.projectStop(request, SessionUtils.getCurrentProjectId(), SessionUtils.getUserId());
|
||||
}
|
||||
|
||||
@GetMapping("/api/project/stop/{id}")
|
||||
@GetMapping("/api/project/stop/{moduleType}/{id}")
|
||||
@Operation(summary = "项目-任务中心-接口用例/场景-停止任务")
|
||||
@RequiresPermissions(PermissionConstants.PROJECT_API_REPORT_READ)
|
||||
public void stopById(@PathVariable String id) {
|
||||
apiTaskCenterService.stopById(id, SessionUtils.getUserId(), OperationLogModule.PROJECT_MANAGEMENT_TASK_CENTER, "/task/center/api/project/stop");
|
||||
public void stopById(@PathVariable String moduleType, @PathVariable String id) {
|
||||
apiTaskCenterService.stopById(moduleType, id, SessionUtils.getUserId(), OperationLogModule.PROJECT_MANAGEMENT_TASK_CENTER, "/task/center/api/project/stop");
|
||||
}
|
||||
|
||||
@GetMapping("/api/org/stop/{id}")
|
||||
@GetMapping("/api/org/stop/{moduleType}/{id}")
|
||||
@Operation(summary = "组织-任务中心-接口用例/场景-停止任务")
|
||||
@RequiresPermissions(PermissionConstants.ORGANIZATION_TASK_CENTER_READ_STOP)
|
||||
public void stopOrgById(@PathVariable String id) {
|
||||
apiTaskCenterService.stopById(id, SessionUtils.getUserId(), OperationLogModule.SETTING_ORGANIZATION_TASK_CENTER, "/task/center/api/org/stop");
|
||||
public void stopOrgById(@PathVariable String moduleType, @PathVariable String id) {
|
||||
apiTaskCenterService.stopById(moduleType, id, SessionUtils.getUserId(), OperationLogModule.SETTING_ORGANIZATION_TASK_CENTER, "/task/center/api/org/stop");
|
||||
}
|
||||
|
||||
@GetMapping("/api/system/stop/{id}")
|
||||
@GetMapping("/api/system/stop/{moduleType}/{id}")
|
||||
@Operation(summary = "系统-任务中心-接口用例/场景-停止任务")
|
||||
@RequiresPermissions(PermissionConstants.PROJECT_API_REPORT_READ)
|
||||
public void stopSystemById(@PathVariable String id) {
|
||||
apiTaskCenterService.stopById(id, SessionUtils.getUserId(), OperationLogModule.SETTING_SYSTEM_TASK_CENTER, "/task/center/api/system/stop");
|
||||
public void stopSystemById(@PathVariable String moduleType,@PathVariable String id) {
|
||||
apiTaskCenterService.stopById(moduleType ,id, SessionUtils.getUserId(), OperationLogModule.SETTING_SYSTEM_TASK_CENTER, "/task/center/api/system/stop");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,5 +22,14 @@ public class ApiScenarioReportDTO extends ApiScenarioReport {
|
|||
private String creatUserName;
|
||||
@Schema(description = "请求总数")
|
||||
private Long requestTotal;
|
||||
|
||||
@Schema(description = "等待时间")
|
||||
private Long waitingTime;
|
||||
@Schema(description = "步骤失败数")
|
||||
private Long stepErrorCount;
|
||||
@Schema(description = "步骤误报数")
|
||||
private Long stepFakeErrorCount;
|
||||
@Schema(description = "步骤未执行数")
|
||||
private Long stepPendingCount;
|
||||
@Schema(description = "步骤成功数")
|
||||
private Long stepSuccessCount;
|
||||
}
|
||||
|
|
|
@ -36,4 +36,6 @@ public interface ExtApiReportMapper {
|
|||
void updateReportStatus(@Param("ids") List<String> ids, @Param("time") long time, @Param("userId") String userId);
|
||||
|
||||
List<ReportDTO> selectByIds(@Param("ids") List<String> ids);
|
||||
|
||||
void updateApiCaseStatus(@Param("ids") List<String> ids);
|
||||
}
|
||||
|
|
|
@ -11,6 +11,17 @@
|
|||
#{id}
|
||||
</foreach>
|
||||
</update>
|
||||
<update id="updateApiCaseStatus">
|
||||
update api_test_case
|
||||
set last_report_status = 'STOPPED'
|
||||
where id in
|
||||
(select api_test_case_id from api_test_case_record where api_report_id
|
||||
in
|
||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
)
|
||||
</update>
|
||||
|
||||
<select id="list" resultType="io.metersphere.api.domain.ApiReport">
|
||||
select
|
||||
|
@ -186,7 +197,7 @@
|
|||
api_report.deleted = false
|
||||
and api_report.test_plan_id = 'NONE'
|
||||
and api_report.start_time BETWEEN #{startTime} AND #{endTime}
|
||||
and status in ('PENDING', 'RUNNING')
|
||||
and status in ('PENDING', 'RUNNING', 'RERUNNING')
|
||||
<if test="ids != null and ids.size() > 0">
|
||||
and id in
|
||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package io.metersphere.api.mapper;
|
||||
|
||||
import io.metersphere.api.domain.ApiScenarioBlob;
|
||||
import io.metersphere.api.domain.ApiScenarioReport;
|
||||
import io.metersphere.api.dto.definition.ApiReportBatchRequest;
|
||||
import io.metersphere.api.dto.definition.ApiReportPageRequest;
|
||||
|
@ -44,4 +45,8 @@ public interface ExtApiScenarioReportMapper {
|
|||
* 根据项目获取组织id
|
||||
*/
|
||||
List<ReportDTO> getOrgListByProjectIds(@Param("ids") List<String> ids);
|
||||
|
||||
ApiScenarioBlob getScenarioBlob(String id);
|
||||
|
||||
void updateApiScenario(List<String> subList);
|
||||
}
|
||||
|
|
|
@ -11,6 +11,16 @@
|
|||
#{id}
|
||||
</foreach>
|
||||
</update>
|
||||
<update id="updateApiScenario">
|
||||
update api_scenario
|
||||
set last_report_status = 'STOPPED'
|
||||
where id in (
|
||||
select api_scenario_id from api_scenario_record where api_scenario_report_id in
|
||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
)
|
||||
</update>
|
||||
|
||||
<select id="list" resultType="io.metersphere.api.domain.ApiScenarioReport">
|
||||
select
|
||||
|
@ -114,7 +124,7 @@
|
|||
api_scenario_report.deleted = false
|
||||
and api_scenario_report.test_plan_id = 'NONE'
|
||||
and api_scenario_report.start_time BETWEEN #{startTime} AND #{endTime}
|
||||
and status in ('PENDING', 'RUNNING')
|
||||
and status in ('PENDING', 'RUNNING', 'RERUNNING')
|
||||
<if test="ids != null and ids.size() > 0">
|
||||
and id in
|
||||
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||
|
@ -203,6 +213,13 @@
|
|||
#{id}
|
||||
</foreach>
|
||||
</select>
|
||||
<select id="getScenarioBlob" resultType="io.metersphere.api.domain.ApiScenarioBlob">
|
||||
select
|
||||
api_scenario_blob.*
|
||||
from api_scenario_blob inner join api_scenario_record on api_scenario_blob.id = api_scenario_record.api_scenario_id
|
||||
where api_scenario_record.api_scenario_report_id = #{id}
|
||||
|
||||
</select>
|
||||
|
||||
<sql id="filters">
|
||||
<if test="${filter} != null and ${filter}.size() > 0">
|
||||
|
|
|
@ -263,17 +263,18 @@ public class ApiTaskCenterService {
|
|||
try {
|
||||
LogUtils.info(String.format("开始发送停止请求到 %s 节点执行", endpoint), subList.toString());
|
||||
TaskRunnerClient.stopApi(endpoint, subList);
|
||||
} catch (Exception e) {
|
||||
LogUtils.error(e);
|
||||
if (request.getModuleType().equals(TaskCenterResourceType.API_CASE.toString())) {
|
||||
extApiReportMapper.updateReportStatus(subList, System.currentTimeMillis(), userId);
|
||||
extApiReportMapper.updateApiCaseStatus(subList);
|
||||
//记录日志
|
||||
saveLog(subList, userId, path, method, module, TaskCenterResourceType.API_CASE.toString());
|
||||
} else if (request.getModuleType().equals(TaskCenterResourceType.API_SCENARIO.toString())) {
|
||||
extApiScenarioReportMapper.updateReportStatus(subList, System.currentTimeMillis(), userId);
|
||||
extApiScenarioReportMapper.updateApiScenario(subList);
|
||||
saveLog(subList, userId, path, method, module, TaskCenterResourceType.API_SCENARIO.toString());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
LogUtils.error(e);
|
||||
throw new MSException(RESOURCE_POOL_EXECUTE_ERROR, e.getMessage());
|
||||
}
|
||||
});
|
||||
|
@ -324,11 +325,12 @@ public class ApiTaskCenterService {
|
|||
stopApiTask(request, List.of(currentProjectId), userId, PROJECT_STOP, HttpMethodConstants.POST.name(), OperationLogModule.PROJECT_MANAGEMENT_TASK_CENTER);
|
||||
}
|
||||
|
||||
public void stopById(String id, String userId, String module, String path) {
|
||||
public void stopById(String moduleType, String id, String userId, String module, String path) {
|
||||
List<String> reportIds = new ArrayList<>();
|
||||
reportIds.add(id);
|
||||
TaskCenterBatchRequest request = new TaskCenterBatchRequest();
|
||||
request.setSelectIds(reportIds);
|
||||
request.setModuleType(moduleType);
|
||||
stopApiTask(request, null, userId, path, HttpMethodConstants.GET.name(), module);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,8 +7,10 @@ import io.metersphere.api.mapper.*;
|
|||
import io.metersphere.api.utils.ApiDataUtils;
|
||||
import io.metersphere.sdk.constants.ApiExecuteResourceType;
|
||||
import io.metersphere.sdk.domain.Environment;
|
||||
import io.metersphere.sdk.domain.EnvironmentGroup;
|
||||
import io.metersphere.sdk.dto.api.result.RequestResult;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.metersphere.sdk.mapper.EnvironmentGroupMapper;
|
||||
import io.metersphere.sdk.mapper.EnvironmentMapper;
|
||||
import io.metersphere.sdk.util.BeanUtils;
|
||||
import io.metersphere.sdk.util.SubListUtils;
|
||||
|
@ -59,6 +61,8 @@ public class ApiReportService {
|
|||
private TestResourcePoolMapper testResourcePoolMapper;
|
||||
@Resource
|
||||
private EnvironmentMapper environmentMapper;
|
||||
@Resource
|
||||
private EnvironmentGroupMapper environmentGroupMapper;
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
|
||||
|
@ -193,6 +197,11 @@ public class ApiReportService {
|
|||
if (environment != null) {
|
||||
environmentName = environment.getName();
|
||||
}
|
||||
EnvironmentGroup environmentGroup = environmentGroupMapper.selectByPrimaryKey(apiReportDTO.getEnvironmentId());
|
||||
if (environmentGroup != null) {
|
||||
environmentName = environmentGroup.getName();
|
||||
}
|
||||
|
||||
}
|
||||
apiReportDTO.setEnvironmentName(environmentName);
|
||||
apiReportDTO.setCreatUserName(userMapper.selectByPrimaryKey(apiReportDTO.getCreateUser()).getName());
|
||||
|
|
|
@ -8,14 +8,18 @@ import io.metersphere.api.dto.report.ApiScenarioReportListDTO;
|
|||
import io.metersphere.api.dto.scenario.ApiScenarioReportDTO;
|
||||
import io.metersphere.api.dto.scenario.ApiScenarioReportDetailDTO;
|
||||
import io.metersphere.api.dto.scenario.ApiScenarioReportStepDTO;
|
||||
import io.metersphere.api.dto.scenario.ScenarioConfig;
|
||||
import io.metersphere.api.mapper.*;
|
||||
import io.metersphere.api.utils.ApiDataUtils;
|
||||
import io.metersphere.sdk.constants.ApiReportStatus;
|
||||
import io.metersphere.sdk.domain.Environment;
|
||||
import io.metersphere.sdk.domain.EnvironmentGroup;
|
||||
import io.metersphere.sdk.dto.api.result.RequestResult;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.metersphere.sdk.mapper.EnvironmentGroupMapper;
|
||||
import io.metersphere.sdk.mapper.EnvironmentMapper;
|
||||
import io.metersphere.sdk.util.BeanUtils;
|
||||
import io.metersphere.sdk.util.JSON;
|
||||
import io.metersphere.sdk.util.SubListUtils;
|
||||
import io.metersphere.sdk.util.Translator;
|
||||
import io.metersphere.system.mapper.TestResourcePoolMapper;
|
||||
|
@ -23,6 +27,7 @@ import io.metersphere.system.mapper.UserMapper;
|
|||
import io.metersphere.system.service.UserLoginService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.ibatis.session.ExecutorType;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
|
@ -60,6 +65,8 @@ public class ApiScenarioReportService {
|
|||
@Resource
|
||||
private EnvironmentMapper environmentMapper;
|
||||
@Resource
|
||||
private EnvironmentGroupMapper environmentGroupMapper;
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
|
||||
|
@ -182,6 +189,13 @@ public class ApiScenarioReportService {
|
|||
if (CollectionUtils.isEmpty(scenarioReportSteps)) {
|
||||
throw new MSException(Translator.get("api_scenario_report_not_exist"));
|
||||
}
|
||||
if (BooleanUtils.isFalse(scenarioReport.getIntegrated())) {
|
||||
ApiScenarioBlob apiScenarioBlob = extApiScenarioReportMapper.getScenarioBlob(id);
|
||||
if (apiScenarioBlob != null) {
|
||||
ScenarioConfig scenarioConfig = JSON.parseObject(new String(apiScenarioBlob.getConfig()), ScenarioConfig.class);
|
||||
scenarioReportDTO.setWaitingTime(scenarioConfig.getOtherConfig().getStepWaitTime());
|
||||
}
|
||||
}
|
||||
//将scenarioReportSteps按照parentId进行分组 值为list 然后根据sort进行排序
|
||||
Map<String, List<ApiScenarioReportStepDTO>> scenarioReportStepMap = scenarioReportSteps.stream().collect(Collectors.groupingBy(ApiScenarioReportStepDTO::getParentId));
|
||||
// TODO 查询修改
|
||||
|
@ -191,6 +205,11 @@ public class ApiScenarioReportService {
|
|||
scenarioReportDTO.setStepTotal(steps.size());
|
||||
scenarioReportDTO.setRequestTotal(scenarioReportDTO.getErrorCount() + scenarioReportDTO.getPendingCount() + scenarioReportDTO.getSuccessCount() + scenarioReportDTO.getFakeErrorCount());
|
||||
scenarioReportDTO.setChildren(steps);
|
||||
|
||||
scenarioReportDTO.setStepErrorCount(steps.stream().filter(step -> StringUtils.equals(ApiReportStatus.ERROR.name(), step.getStatus())).count());
|
||||
scenarioReportDTO.setStepSuccessCount(steps.stream().filter(step -> StringUtils.equals(ApiReportStatus.SUCCESS.name(), step.getStatus())).count());
|
||||
scenarioReportDTO.setStepPendingCount(steps.stream().filter(step -> StringUtils.equals(ApiReportStatus.PENDING.name(), step.getStatus())).count());
|
||||
scenarioReportDTO.setStepFakeErrorCount(steps.stream().filter(step -> StringUtils.equals(ApiReportStatus.FAKE_ERROR.name(), step.getStatus())).count());
|
||||
//控制台信息 console
|
||||
ApiScenarioReportLogExample example = new ApiScenarioReportLogExample();
|
||||
example.createCriteria().andReportIdEqualTo(id);
|
||||
|
@ -207,6 +226,10 @@ public class ApiScenarioReportService {
|
|||
if (environment != null) {
|
||||
environmentName = environment.getName();
|
||||
}
|
||||
EnvironmentGroup environmentGroup = environmentGroupMapper.selectByPrimaryKey(scenarioReport.getEnvironmentId());
|
||||
if (environmentGroup != null) {
|
||||
environmentName = environmentGroup.getName();
|
||||
}
|
||||
}
|
||||
scenarioReportDTO.setEnvironmentName(environmentName);
|
||||
scenarioReportDTO.setCreatUserName(userMapper.selectByPrimaryKey(scenarioReport.getCreateUser()).getName());
|
||||
|
@ -248,7 +271,11 @@ public class ApiScenarioReportService {
|
|||
} else {
|
||||
step.setStatus(ApiReportStatus.PENDING.name());
|
||||
}
|
||||
|
||||
} else if (stepTypes.contains(step.getStepType())) {
|
||||
step.setStatus(ApiReportStatus.PENDING.name());
|
||||
if (StringUtils.equals(ApiScenarioStepType.CONSTANT_TIMER.name(), step.getStepType())) {
|
||||
step.setStatus(ApiReportStatus.SUCCESS.name());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -403,6 +403,7 @@ public class ApiScenarioService extends MoveNodeService {
|
|||
public ApiScenario add(ApiScenarioAddRequest request, String creator) {
|
||||
checkAddExist(request);
|
||||
ApiScenario scenario = getAddApiScenario(request, creator);
|
||||
scenario.setStepTotal(request.getSteps().size());
|
||||
apiScenarioMapper.insert(scenario);
|
||||
|
||||
// 更新场景配置
|
||||
|
@ -627,6 +628,7 @@ public class ApiScenarioService extends MoveNodeService {
|
|||
ApiScenario scenario = BeanUtils.copyBean(new ApiScenario(), request);
|
||||
scenario.setUpdateUser(updater);
|
||||
scenario.setUpdateTime(System.currentTimeMillis());
|
||||
scenario.setStepTotal(CollectionUtils.isNotEmpty(request.getSteps()) ? request.getSteps().size() : 0);
|
||||
apiScenarioMapper.updateByPrimaryKeySelective(scenario);
|
||||
|
||||
if (request.getScenarioConfig() != null) {
|
||||
|
|
|
@ -23,7 +23,9 @@ import io.metersphere.sdk.constants.PermissionConstants;
|
|||
import io.metersphere.sdk.constants.SessionConstants;
|
||||
import io.metersphere.sdk.domain.Environment;
|
||||
import io.metersphere.sdk.domain.EnvironmentExample;
|
||||
import io.metersphere.sdk.domain.EnvironmentGroup;
|
||||
import io.metersphere.sdk.domain.ShareInfo;
|
||||
import io.metersphere.sdk.mapper.EnvironmentGroupMapper;
|
||||
import io.metersphere.sdk.mapper.EnvironmentMapper;
|
||||
import io.metersphere.sdk.mapper.ShareInfoMapper;
|
||||
import io.metersphere.sdk.util.JSON;
|
||||
|
@ -72,6 +74,8 @@ public class ApiReportControllerTests extends BaseTest {
|
|||
private TestResourcePoolMapper testResourcePoolMapper;
|
||||
@Resource
|
||||
private EnvironmentMapper environmentMapper;
|
||||
@Resource
|
||||
private EnvironmentGroupMapper environmentGroupMapper;
|
||||
|
||||
private static final String BASIC = "/api/report/case";
|
||||
private static final String PAGE = BASIC + "/page";
|
||||
|
@ -307,6 +311,21 @@ public class ApiReportControllerTests extends BaseTest {
|
|||
apiReportMapper.updateByPrimaryKeySelective(apiReport1);
|
||||
this.requestGetWithOk(GET + "test-report-id");
|
||||
|
||||
EnvironmentGroup environmentGroup = new EnvironmentGroup();
|
||||
environmentGroup.setId("env_group_id");
|
||||
environmentGroup.setProjectId(DEFAULT_PROJECT_ID);
|
||||
environmentGroup.setName("env_group_name");
|
||||
environmentGroup.setCreateUser("admin");
|
||||
environmentGroup.setUpdateUser("admin");
|
||||
environmentGroup.setUpdateTime(System.currentTimeMillis());
|
||||
environmentGroup.setCreateTime(System.currentTimeMillis());
|
||||
environmentGroup.setPos(1L);
|
||||
environmentGroupMapper.insert(environmentGroup);
|
||||
apiReport1.setEnvironmentId("env_group_id");
|
||||
apiReportMapper.updateByPrimaryKeySelective(apiReport1);
|
||||
this.requestGetWithOk(GET + "test-report-id");
|
||||
environmentGroupMapper.deleteByPrimaryKey("env_group_id");
|
||||
|
||||
reports = new ArrayList<>();
|
||||
apiReport = new ApiReport();
|
||||
apiReport.setId("test-report-id-no-step-true");
|
||||
|
|
|
@ -394,6 +394,7 @@ public class ApiScenarioControllerTests extends BaseTest {
|
|||
ApiScenarioBlob apiScenarioBlob = apiScenarioBlobMapper.selectByPrimaryKey(id);
|
||||
ApiScenario copyApiScenario = BeanUtils.copyBean(new ApiScenario(), apiScenario);
|
||||
copyApiScenario = BeanUtils.copyBean(copyApiScenario, request);
|
||||
copyApiScenario.setStepTotal(apiScenario.getStepTotal());
|
||||
Assertions.assertEquals(apiScenario, copyApiScenario);
|
||||
if (scenarioConfig != null) {
|
||||
Assertions.assertEquals(scenarioConfig, JSON.parseObject(new String(apiScenarioBlob.getConfig()), ScenarioConfig.class));
|
||||
|
|
|
@ -23,7 +23,9 @@ import io.metersphere.sdk.constants.PermissionConstants;
|
|||
import io.metersphere.sdk.constants.SessionConstants;
|
||||
import io.metersphere.sdk.domain.Environment;
|
||||
import io.metersphere.sdk.domain.EnvironmentExample;
|
||||
import io.metersphere.sdk.domain.EnvironmentGroup;
|
||||
import io.metersphere.sdk.domain.ShareInfo;
|
||||
import io.metersphere.sdk.mapper.EnvironmentGroupMapper;
|
||||
import io.metersphere.sdk.mapper.EnvironmentMapper;
|
||||
import io.metersphere.sdk.mapper.ShareInfoMapper;
|
||||
import io.metersphere.sdk.util.JSON;
|
||||
|
@ -72,6 +74,8 @@ public class ApiScenarioReportControllerTests extends BaseTest {
|
|||
private TestResourcePoolMapper testResourcePoolMapper;
|
||||
@Resource
|
||||
private EnvironmentMapper environmentMapper;
|
||||
@Resource
|
||||
private EnvironmentGroupMapper environmentGroupMapper;
|
||||
|
||||
private static final String BASIC = "/api/report/scenario";
|
||||
private static final String PAGE = BASIC + "/page";
|
||||
|
@ -290,14 +294,14 @@ public class ApiScenarioReportControllerTests extends BaseTest {
|
|||
List<ApiScenarioReportDetail> details = new ArrayList<>();
|
||||
for (int i = 1; i < 20; i++) {
|
||||
ApiScenarioReportDetail apiReportDetail = new ApiScenarioReportDetail();
|
||||
apiReportDetail.setId("test-report-detail-id" + i+2);
|
||||
apiReportDetail.setId("test-report-detail-id" + i + 2);
|
||||
apiReportDetail.setReportId("test-scenario-report-id");
|
||||
apiReportDetail.setStepId("test-scenario-report-step-id" + i);
|
||||
if (i % 2 == 0) {
|
||||
apiReportDetail.setStatus(ApiReportStatus.SUCCESS.name());
|
||||
apiReportDetail.setResponseSize(1L);
|
||||
apiReportDetail.setRequestTime(2L);
|
||||
} else if (i % 3 == 0){
|
||||
} else if (i % 3 == 0) {
|
||||
apiReportDetail.setStatus(null);
|
||||
apiReportDetail.setResponseSize(0L);
|
||||
apiReportDetail.setRequestTime(2L);
|
||||
|
@ -336,6 +340,22 @@ public class ApiScenarioReportControllerTests extends BaseTest {
|
|||
apiScenarioReportMapper.updateByPrimaryKeySelective(scenarioReport1);
|
||||
this.requestGetWithOk(GET + "test-scenario-report-id");
|
||||
|
||||
//插入一个环境组
|
||||
EnvironmentGroup environmentGroup = new EnvironmentGroup();
|
||||
environmentGroup.setId("env_group_id");
|
||||
environmentGroup.setProjectId(DEFAULT_PROJECT_ID);
|
||||
environmentGroup.setName("env_group_name");
|
||||
environmentGroup.setCreateUser("admin");
|
||||
environmentGroup.setUpdateUser("admin");
|
||||
environmentGroup.setUpdateTime(System.currentTimeMillis());
|
||||
environmentGroup.setCreateTime(System.currentTimeMillis());
|
||||
environmentGroup.setPos(1L);
|
||||
environmentGroupMapper.insert(environmentGroup);
|
||||
scenarioReport1.setEnvironmentId("env_group_id");
|
||||
apiScenarioReportMapper.updateByPrimaryKeySelective(scenarioReport1);
|
||||
this.requestGetWithOk(GET + "test-scenario-report-id");
|
||||
environmentGroupMapper.deleteByPrimaryKey("env_group_id");
|
||||
|
||||
mockMvc.perform(getRequestBuilder(GET + "test"))
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().is5xxServerError());
|
||||
|
@ -396,7 +416,7 @@ public class ApiScenarioReportControllerTests extends BaseTest {
|
|||
Assertions.assertNotNull(shareInfoDTO.getShareUrl());
|
||||
Assertions.assertNotNull(shareInfoDTO.getId());
|
||||
String shareId = shareInfoDTO.getId();
|
||||
MvcResult mvcResult1 = this.requestGetWithOk(BASIC+ "/share/" + shareId + "/" + "test-scenario-report-id")
|
||||
MvcResult mvcResult1 = this.requestGetWithOk(BASIC + "/share/" + shareId + "/" + "test-scenario-report-id")
|
||||
.andReturn();
|
||||
ApiScenarioReportDTO apiReportDTO = ApiDataUtils.parseObject(JSON.toJSONString(parseResponse(mvcResult1).get("data")), ApiScenarioReportDTO.class);
|
||||
Assertions.assertNotNull(apiReportDTO);
|
||||
|
@ -409,7 +429,7 @@ public class ApiScenarioReportControllerTests extends BaseTest {
|
|||
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().is5xxServerError());
|
||||
|
||||
mvcResult = this.requestGetWithOk(BASIC+ "/share/detail/" + shareId + "/" + "test-scenario-report-id" + "/" + "test-scenario-report-step-id1")
|
||||
mvcResult = this.requestGetWithOk(BASIC + "/share/detail/" + shareId + "/" + "test-scenario-report-id" + "/" + "test-scenario-report-step-id1")
|
||||
.andReturn();
|
||||
List<ApiScenarioReportDetailDTO> data = ApiDataUtils.parseArray(JSON.toJSONString(parseResponse(mvcResult).get("data")), ApiScenarioReportDetailDTO.class);
|
||||
Assertions.assertNotNull(data);
|
||||
|
@ -418,10 +438,10 @@ public class ApiScenarioReportControllerTests extends BaseTest {
|
|||
shareInfo1.setUpdateTime(1702950953000L);
|
||||
shareInfoMapper.updateByPrimaryKey(shareInfo1);
|
||||
|
||||
mockMvc.perform(getRequestBuilder(BASIC+ "/share/" + shareId + "/" + "test-scenario-report-id"))
|
||||
mockMvc.perform(getRequestBuilder(BASIC + "/share/" + shareId + "/" + "test-scenario-report-id"))
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().is5xxServerError());
|
||||
|
||||
|
||||
|
||||
shareInfo = new ApiReportShareRequest();
|
||||
shareInfo.setReportId("test-scenario-report-id");
|
||||
|
@ -445,7 +465,7 @@ public class ApiScenarioReportControllerTests extends BaseTest {
|
|||
projectApplicationMapper.insert(projectApplication);
|
||||
}
|
||||
|
||||
mvcResult1 = this.requestGetWithOk(BASIC+ "/share/" + shareId + "/" + "test-scenario-report-id")
|
||||
mvcResult1 = this.requestGetWithOk(BASIC + "/share/" + shareId + "/" + "test-scenario-report-id")
|
||||
.andReturn();
|
||||
apiReportDTO = ApiDataUtils.parseObject(JSON.toJSONString(parseResponse(mvcResult1).get("data")), ApiScenarioReportDTO.class);
|
||||
Assertions.assertNotNull(apiReportDTO);
|
||||
|
@ -456,7 +476,7 @@ public class ApiScenarioReportControllerTests extends BaseTest {
|
|||
shareInfo1.setUpdateTime(1702950953000L);
|
||||
shareInfoMapper.updateByPrimaryKey(shareInfo1);
|
||||
|
||||
mockMvc.perform(getRequestBuilder(BASIC+ "/share/" + shareId + "/" + "test-scenario-report-id"))
|
||||
mockMvc.perform(getRequestBuilder(BASIC + "/share/" + shareId + "/" + "test-scenario-report-id"))
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().is5xxServerError());
|
||||
}
|
||||
|
|
|
@ -202,7 +202,7 @@ public class ApiTaskCenterControllerTests extends BaseTest {
|
|||
@Order(12)
|
||||
public void stopById() throws Exception {
|
||||
mockPost("/api/stop", "");
|
||||
mockMvc.perform(MockMvcRequestBuilders.get("/task/center/api/project/stop/task-report-id0")
|
||||
mockMvc.perform(MockMvcRequestBuilders.get("/task/center/api/project/stop/API_CASE/task-report-id0")
|
||||
.header(SessionConstants.HEADER_TOKEN, sessionId)
|
||||
.header(SessionConstants.CSRF_TOKEN, csrfToken)
|
||||
.header(SessionConstants.CURRENT_PROJECT, DEFAULT_PROJECT_ID)
|
||||
|
@ -210,14 +210,14 @@ public class ApiTaskCenterControllerTests extends BaseTest {
|
|||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn();
|
||||
mockPost("/api/stop", "");
|
||||
mockMvc.perform(MockMvcRequestBuilders.get("/task/center/api/org/stop/task-report-id0")
|
||||
mockMvc.perform(MockMvcRequestBuilders.get("/task/center/api/org/stop/API_SCENARIO/task-report-id0")
|
||||
.header(SessionConstants.HEADER_TOKEN, sessionId)
|
||||
.header(SessionConstants.CSRF_TOKEN, csrfToken)
|
||||
.header(SessionConstants.CURRENT_PROJECT, DEFAULT_PROJECT_ID)
|
||||
.header(SessionConstants.CURRENT_ORGANIZATION, DEFAULT_ORGANIZATION_ID))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn();
|
||||
mockMvc.perform(MockMvcRequestBuilders.get("/task/center/api/system/stop/task-report-id0")
|
||||
mockMvc.perform(MockMvcRequestBuilders.get("/task/center/api/system/stop/API_SCENARIO/task-report-id0")
|
||||
.header(SessionConstants.HEADER_TOKEN, sessionId)
|
||||
.header(SessionConstants.CSRF_TOKEN, csrfToken)
|
||||
.header(SessionConstants.CURRENT_PROJECT, DEFAULT_PROJECT_ID)
|
||||
|
|
|
@ -43,14 +43,14 @@ export function batchStopRealProjectApi(data: TableQueryParams) {
|
|||
return MSR.post<CommonList<RealTaskCenterApiCaseItem>>({ url: batchStopRealProjectApiUrl, data });
|
||||
}
|
||||
|
||||
export function stopRealSysApi(id: string) {
|
||||
return MSR.get({ url: `${stopRealSysApiUrl}/${id}` });
|
||||
export function stopRealSysApi(moduleType: string, id: string) {
|
||||
return MSR.get({ url: `${stopRealSysApiUrl}/${moduleType}/${id}` });
|
||||
}
|
||||
export function stopRealOrdApi(id: string) {
|
||||
return MSR.get({ url: `${stopRealOrdApiUrl}/${id}` });
|
||||
export function stopRealOrdApi(moduleType: string, id: string) {
|
||||
return MSR.get({ url: `${stopRealOrdApiUrl}/${moduleType}/${id}` });
|
||||
}
|
||||
export function stopRealProjectApi(id: string) {
|
||||
return MSR.get({ url: `${stopRealProjectApiUrl}/${id}` });
|
||||
export function stopRealProjectApi(moduleType: string, id: string) {
|
||||
return MSR.get({ url: `${stopRealProjectApiUrl}/${moduleType}/${id}` });
|
||||
}
|
||||
|
||||
// 定时任务
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
:label="t('case.execute.reportName')"
|
||||
:rules="[{ required: true, message: t('apiTestManagement.reportNameRequired') }]"
|
||||
:validate-trigger="['blur', 'input']"
|
||||
asterisk-position="end"
|
||||
>
|
||||
<a-input
|
||||
v-model="batchExecuteForm.integratedReportName"
|
||||
|
@ -77,6 +78,7 @@
|
|||
<a-form-item
|
||||
field="poolId"
|
||||
:label="t('case.execute.pool')"
|
||||
asterisk-position="end"
|
||||
:rules="[{ required: true, message: t('apiTestManagement.poolRequired') }]"
|
||||
>
|
||||
<a-select v-model="batchExecuteForm.poolId" :placeholder="t('common.pleaseSelect')">
|
||||
|
|
|
@ -88,25 +88,25 @@
|
|||
<div class="countItem">
|
||||
<div class="mb-[2px] mr-[4px] h-[6px] w-[6px] rounded-full bg-[rgb(var(--success-6))]"></div>
|
||||
<div class="mr-2 text-[var(--color-text-4)]">{{ t('report.detail.successCount') }}</div>
|
||||
{{ getIndicators(detail.successCount) }}
|
||||
{{ getIndicators(detail.stepSuccessCount) }}
|
||||
</div>
|
||||
<!-- 误报 -->
|
||||
<div class="countItem">
|
||||
<div class="mb-[2px] mr-[4px] h-[6px] w-[6px] rounded-full bg-[rgb(var(--warning-6))]"></div>
|
||||
<div class="mr-2 text-[var(--color-text-4)]">{{ t('report.detail.fakeErrorCount') }}</div>
|
||||
{{ getIndicators(detail.fakeErrorCount) }}
|
||||
{{ getIndicators(detail.stepFakeErrorCount) }}
|
||||
</div>
|
||||
<!-- 失败 -->
|
||||
<div class="countItem">
|
||||
<div class="mb-[2px] mr-[4px] h-[6px] w-[6px] rounded-full bg-[rgb(var(--danger-6))]"></div>
|
||||
<div class="mr-2 text-[var(--color-text-4)]">{{ t('report.detail.errorCount') }}</div>
|
||||
{{ getIndicators(detail.errorCount) }}
|
||||
{{ getIndicators(detail.stepErrorCount) }}
|
||||
</div>
|
||||
<!-- 未执行 -->
|
||||
<div class="countItem">
|
||||
<div class="mb-[2px] mr-[4px] h-[6px] w-[6px] rounded-full bg-[var(--color-text-input-border)]"></div>
|
||||
<div class="mr-2 text-[var(--color-text-4)]">{{ t('report.detail.pendingCount') }}</div>
|
||||
{{ getIndicators(detail.pendingCount) }}
|
||||
{{ getIndicators(detail.stepPendingCount) }}
|
||||
</div>
|
||||
</div>
|
||||
<StepProgress :report-detail="detail" height="8px" radius="var(--border-radius-mini)" />
|
||||
|
@ -254,6 +254,10 @@
|
|||
children: [], // 步骤列表
|
||||
stepTotal: 0, // 步骤总数
|
||||
console: '',
|
||||
stepSuccessCount: 0, // 步骤成功数
|
||||
stepErrorCount: 0, // 步骤失败数
|
||||
stepFakeErrorCount: 0, // 步骤误报数
|
||||
stepPendingCount: 0, // 步骤未执行数
|
||||
});
|
||||
|
||||
const cascaderKeywords = ref<string>('');
|
||||
|
|
|
@ -293,6 +293,7 @@
|
|||
await loadRealMap.value[props.group].batchStop({
|
||||
selectIds: selectAll ? [] : selectIds,
|
||||
selectAll,
|
||||
moduleType: props.moduleType,
|
||||
});
|
||||
resetSelector();
|
||||
Message.success(t('project.taskCenter.stopSuccess'));
|
||||
|
@ -330,7 +331,7 @@
|
|||
},
|
||||
onBeforeOk: async () => {
|
||||
try {
|
||||
await loadRealMap.value[props.group].stop(record.id);
|
||||
await loadRealMap.value[props.group].stop(props.moduleType, record.id);
|
||||
resetSelector();
|
||||
Message.success(t('project.taskCenter.stopSuccess'));
|
||||
initData();
|
||||
|
|
|
@ -18,7 +18,8 @@ export default {
|
|||
'project.taskCenter.viewReport': 'View report',
|
||||
'project.taskCenter.batchStopTask': 'Are you sure to stop {num} tasks?',
|
||||
'project.taskCenter.stopTask': 'Are you sure to stop {name} task?',
|
||||
'project.taskCenter.stopTaskContent': 'After stopping,{name} please operate with caution?',
|
||||
'project.taskCenter.stopTaskContent':
|
||||
'Stopping will affect report generation, and the completed report cannot be stopped.',
|
||||
'project.taskCenter.confirmStop': 'Confirm stop',
|
||||
'project.taskCenter.stopSuccess': 'Stop successfully',
|
||||
'project.taskCenter.testResource': 'Test resource',
|
||||
|
|
|
@ -18,7 +18,7 @@ export default {
|
|||
'project.taskCenter.viewReport': '查看报告',
|
||||
'project.taskCenter.batchStopTask': '确定停止 {num} 个任务吗?',
|
||||
'project.taskCenter.stopTask': '确定停止 {name} 个任务吗?',
|
||||
'project.taskCenter.stopTaskContent': '停止后,{ name }请谨慎操作?',
|
||||
'project.taskCenter.stopTaskContent': '停止后会影响报告的生成,执行完成的报告不可以停止',
|
||||
'project.taskCenter.confirmStop': '确认停止',
|
||||
'project.taskCenter.stopSuccess': '停止成功',
|
||||
'project.taskCenter.testResource': '测试资源',
|
||||
|
|
Loading…
Reference in New Issue