refactor(测试计划): 创建计划并关联用例
This commit is contained in:
parent
0c3e9bcd36
commit
6421d1ebf0
|
@ -111,23 +111,4 @@ public class TestPlanController {
|
|||
}
|
||||
|
||||
|
||||
//todo 关注测试计划接口
|
||||
|
||||
//todo 取消关注测试计划接口
|
||||
|
||||
/*
|
||||
todo 归档测试计划
|
||||
·归档时要确定测试计划是完成状态
|
||||
·归档时所有数据要备份一套新的(包括各种用例的基本信息)。
|
||||
·关于环境:但是在查看归档内容的时候所属环境展示什么?只展示名字吗?
|
||||
·关于用例:那么是要在测试计划里能查看到用例的具体信息吗? 不归档的测试计划能查看吗?
|
||||
·功能用例里涉及到评审相关的也要备份吗?
|
||||
·功能用例里关联的其他自动化用例信息也要备份吗?
|
||||
·缺陷的整个流转过程也是要备份吗?
|
||||
·关于报告:
|
||||
·备份到什么程度?还需要在报告列表中展示这些报告吗?
|
||||
·每个用例调试出来的报告要备份吗?全部都备份?
|
||||
·执行记录呢也要完全备份吗?
|
||||
·归档的测试计划从哪里看?在测试计划列表中混合着展示吗?还是提供一个单独的按钮/页面/模块单独展示这些归档了的东西?
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
package io.metersphere.plan.dto.request;
|
||||
|
||||
import io.metersphere.system.dto.table.TableBatchProcessDTO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wx
|
||||
*/
|
||||
@Data
|
||||
public class BaseAssociateCaseRequest extends TableBatchProcessDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "模块id")
|
||||
private List<String> moduleIds;
|
||||
|
||||
/*@Schema(description = "类型:项目/测试计划/用例评审", allowableValues = {"PROJECT", "TEST_PLAN", "CASE_REVIEW"})
|
||||
private String associateType;
|
||||
|
||||
@Schema(description = "类型id: 项目id/测试计划id/用例评审id")
|
||||
private String associateTypeId;
|
||||
|
||||
@Schema(description = "用例类型: 功能用例/接口用例/接口场景用例", allowableValues = {"FUNCTIONAL", "API", "API_SCENARIO"})
|
||||
private List<String> associateCaseType;*/
|
||||
|
||||
@Schema(description = "功能用例选中的ids")
|
||||
private List<String> functionalSelectIds;
|
||||
|
||||
@Schema(description = "接口API用例选中的ids")
|
||||
private List<String> apiSelectIds;
|
||||
|
||||
@Schema(description = "接口CASE选中的ids")
|
||||
private List<String> apiCaseSelectIds;
|
||||
|
||||
@Schema(description = "接口场景用例选中的ids")
|
||||
private List<String> apiScenarioSelectIds;
|
||||
}
|
|
@ -74,4 +74,7 @@ public class TestPlanCreateRequest {
|
|||
public boolean isGroupOption() {
|
||||
return StringUtils.equals(this.type, TestPlanConstants.TEST_PLAN_TYPE_GROUP) || !StringUtils.equals(this.groupId, TestPlanConstants.TEST_PLAN_DEFAULT_GROUP_ID);
|
||||
}
|
||||
|
||||
@Schema(description = "查询用例的条件")
|
||||
private BaseAssociateCaseRequest baseAssociateCaseRequest;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import io.metersphere.sdk.util.Translator;
|
|||
import io.metersphere.system.dto.LogInsertModule;
|
||||
import io.metersphere.system.uid.IDGenerator;
|
||||
import io.metersphere.system.uid.NumGenerator;
|
||||
import io.metersphere.system.utils.ServiceUtils;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.ibatis.session.ExecutorType;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
|
@ -59,7 +60,7 @@ public class TestPlanFunctionalCaseService extends TestPlanResourceService {
|
|||
if (maxPos == null) {
|
||||
return 0;
|
||||
} else {
|
||||
return maxPos + DEFAULT_NODE_INTERVAL_POS;
|
||||
return maxPos + ServiceUtils.POS_STEP;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -89,7 +90,7 @@ public class TestPlanFunctionalCaseService extends TestPlanResourceService {
|
|||
this::saveTestPlanResource);
|
||||
}
|
||||
|
||||
private void saveTestPlanResource(@Validated TestPlanResourceAssociationParam associationParam) {
|
||||
public void saveTestPlanResource(@Validated TestPlanResourceAssociationParam associationParam) {
|
||||
long pox = this.getNextOrder(associationParam.getTestPlanId());
|
||||
long now = System.currentTimeMillis();
|
||||
List<TestPlanFunctionalCase> testPlanFunctionalCaseList = new ArrayList<>();
|
||||
|
@ -100,11 +101,12 @@ public class TestPlanFunctionalCaseService extends TestPlanResourceService {
|
|||
testPlanFunctionalCase.setNum(NumGenerator.nextNum(associationParam.getTestPlanNum() + "_" + associationParam.getProjectId(), ApplicationNumScope.TEST_PLAN_FUNCTION_CASE));
|
||||
testPlanFunctionalCase.setTestPlanId(associationParam.getTestPlanId());
|
||||
testPlanFunctionalCase.setFunctionalCaseId(associationIdList.get(i));
|
||||
testPlanFunctionalCase.setPos(pox + (i + 1) * DEFAULT_NODE_INTERVAL_POS);
|
||||
testPlanFunctionalCase.setPos(pox);
|
||||
testPlanFunctionalCase.setCreateTime(now);
|
||||
testPlanFunctionalCase.setCreateUser(associationParam.getOperator());
|
||||
testPlanFunctionalCase.setExecuteUser(associationParam.getOperator());
|
||||
testPlanFunctionalCaseList.add(testPlanFunctionalCase);
|
||||
pox += ServiceUtils.POS_STEP;
|
||||
}
|
||||
testPlanFunctionalCaseMapper.batchInsert(testPlanFunctionalCaseList);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package io.metersphere.plan.service;
|
||||
|
||||
import io.metersphere.plan.domain.*;
|
||||
import io.metersphere.plan.dto.TestPlanResourceAssociationParam;
|
||||
import io.metersphere.plan.dto.request.TestPlanBatchProcessRequest;
|
||||
import io.metersphere.plan.dto.request.TestPlanCreateRequest;
|
||||
import io.metersphere.plan.dto.request.TestPlanUpdateRequest;
|
||||
|
@ -108,12 +109,39 @@ public class TestPlanService {
|
|||
testPlanXPackFactory.getTestPlanGroupService().validateGroup(createTestPlan, testPlanConfig);
|
||||
}
|
||||
|
||||
handleAssociateCase(testPlanCreateRequest, createTestPlan);
|
||||
|
||||
testPlanMapper.insert(createTestPlan);
|
||||
testPlanConfigMapper.insert(testPlanConfig);
|
||||
testPlanLogService.saveAddLog(createTestPlan, operator, requestUrl, requestMethod);
|
||||
return createTestPlan.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理关联的用例
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
private void handleAssociateCase(TestPlanCreateRequest request, TestPlan testPlan) {
|
||||
//关联的功能用例
|
||||
handleFunctionalCase(request.getBaseAssociateCaseRequest().getFunctionalSelectIds(), testPlan);
|
||||
//TODO 关联接口用例/接口场景用例
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 关联的功能用例
|
||||
*
|
||||
* @param functionalSelectIds
|
||||
*/
|
||||
private void handleFunctionalCase(List<String> functionalSelectIds, TestPlan testPlan) {
|
||||
if (CollectionUtils.isNotEmpty(functionalSelectIds)) {
|
||||
TestPlanResourceAssociationParam associationParam = new TestPlanResourceAssociationParam(functionalSelectIds, testPlan.getProjectId(), testPlan.getId(), testPlan.getNum(), testPlan.getCreateUser());
|
||||
testPlanFunctionCaseService.saveTestPlanResource(associationParam);
|
||||
}
|
||||
}
|
||||
|
||||
private void validateTestPlan(TestPlan testPlan) {
|
||||
TestPlanExample example = new TestPlanExample();
|
||||
if (StringUtils.isBlank(testPlan.getId())) {
|
||||
|
|
|
@ -513,6 +513,8 @@ public class TestPlanTests extends BaseTest {
|
|||
request.setProjectId(project.getId());
|
||||
request.setTestPlanning(false);
|
||||
|
||||
BaseAssociateCaseRequest associateCaseRequest = new BaseAssociateCaseRequest();
|
||||
request.setBaseAssociateCaseRequest(associateCaseRequest);
|
||||
for (int i = 0; i < 999; i++) {
|
||||
String moduleId;
|
||||
if (i < 50) {
|
||||
|
@ -602,6 +604,7 @@ public class TestPlanTests extends BaseTest {
|
|||
itemRequest.setModuleId(a1Node.getId());
|
||||
itemRequest.setGroupId(groupTestPlanId7);
|
||||
itemRequest.setName("testPlan_group7_" + i);
|
||||
itemRequest.setBaseAssociateCaseRequest(associateCaseRequest);
|
||||
if (i == 0) {
|
||||
//测试项目没有开启测试计划模块时能否使用
|
||||
testPlanTestService.removeProjectModule(project, PROJECT_MODULE, "testPlan");
|
||||
|
@ -1078,8 +1081,8 @@ public class TestPlanTests extends BaseTest {
|
|||
TestPlanResourceSortResponse response = JSON.parseObject(JSON.toJSONString(resultHolder.getData()), TestPlanResourceSortResponse.class);
|
||||
Assertions.assertEquals(response.getSortNodeNum(), 1);
|
||||
funcList = testPlanTestService.selectTestPlanFunctionalCaseByTestPlanId(repeatCaseTestPlan.getId());
|
||||
Assertions.assertEquals(funcList.get(0).getId(), request.getDragNodeId());
|
||||
Assertions.assertEquals(funcList.get(1).getId(), request.getDropNodeId());
|
||||
Assertions.assertEquals(funcList.get(0).getId(), request.getDropNodeId());
|
||||
Assertions.assertEquals(funcList.get(1).getId(), request.getDragNodeId());
|
||||
LOG_CHECK_LIST.add(
|
||||
new CheckLogModel(request.getDragNodeId(), OperationLogType.UPDATE, URL_POST_RESOURCE_FUNCTIONAL_CASE_SORT)
|
||||
);
|
||||
|
@ -2051,4 +2054,31 @@ public class TestPlanTests extends BaseTest {
|
|||
ResultHolder editResultHolder = JSON.parseObject(editReturnData, ResultHolder.class);
|
||||
Assertions.assertNotNull(editResultHolder);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(301)
|
||||
public void testAdd() throws Exception {
|
||||
TestPlanCreateRequest request = new TestPlanCreateRequest();
|
||||
request.setProjectId(project.getId());
|
||||
request.setTestPlanning(false);
|
||||
|
||||
BaseAssociateCaseRequest associateCaseRequest = new BaseAssociateCaseRequest();
|
||||
associateCaseRequest.setFunctionalSelectIds(Arrays.asList("wx_fc_1", "wx_fc_2"));
|
||||
request.setBaseAssociateCaseRequest(associateCaseRequest);
|
||||
request.setName("测试一下关联");
|
||||
request.setPlannedEndTime(null);
|
||||
request.setPlannedStartTime(null);
|
||||
request.setRepeatCase(false);
|
||||
request.setAutomaticStatusUpdate(false);
|
||||
request.setPassThreshold(100);
|
||||
request.setDescription(null);
|
||||
request.setType(TestPlanConstants.TEST_PLAN_TYPE_PLAN);
|
||||
|
||||
MvcResult mvcResult = this.requestPostWithOkAndReturn(URL_POST_TEST_PLAN_ADD, request);
|
||||
String returnStr = mvcResult.getResponse().getContentAsString();
|
||||
ResultHolder holder = JSON.parseObject(returnStr, ResultHolder.class);
|
||||
String returnId = holder.getData().toString();
|
||||
Assertions.assertNotNull(returnId);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue