From 85a5863d4d1e217ba05729dedb503961d8a06fef Mon Sep 17 00:00:00 2001 From: WangXu10 Date: Tue, 11 Jun 2024 14:22:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=B5=8B=E8=AF=95=E8=AE=A1=E5=88=92):=20?= =?UTF-8?q?=E5=B7=B2=E5=85=B3=E8=81=94=E5=9C=BA=E6=99=AF=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TestPlanApiScenarioController.java | 22 ++ .../request/TestPlanApiScenarioRequest.java | 3 + .../TestPlanApiScenarioPageResponse.java | 67 +++++ .../mapper/ExtTestPlanApiScenarioMapper.java | 4 + .../mapper/ExtTestPlanApiScenarioMapper.xml | 228 ++++++++++++++++++ .../service/TestPlanApiScenarioService.java | 102 +++++++- .../TestPlanApiScenarioControllerTests.java | 34 ++- .../dml/init_test_plan_api_scenario.sql | 43 ++++ 8 files changed, 498 insertions(+), 5 deletions(-) create mode 100644 backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanApiScenarioPageResponse.java create mode 100644 backend/services/test-plan/src/test/resources/dml/init_test_plan_api_scenario.sql diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/controller/TestPlanApiScenarioController.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/controller/TestPlanApiScenarioController.java index 8ab05ca3ef..670a0eb391 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/controller/TestPlanApiScenarioController.java +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/controller/TestPlanApiScenarioController.java @@ -1,15 +1,26 @@ package io.metersphere.plan.controller; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import io.metersphere.plan.dto.request.TestPlanApiScenarioRequest; +import io.metersphere.plan.dto.response.TestPlanApiScenarioPageResponse; import io.metersphere.plan.service.TestPlanApiScenarioService; import io.metersphere.sdk.constants.PermissionConstants; import io.metersphere.sdk.dto.api.task.TaskRequestDTO; +import io.metersphere.system.security.CheckOwner; +import io.metersphere.system.utils.PageUtils; +import io.metersphere.system.utils.Pager; import io.metersphere.system.utils.SessionUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + @Tag(name = "测试计划场景用例") @RestController @RequestMapping("/test-plan/api/scenario") @@ -25,4 +36,15 @@ public class TestPlanApiScenarioController { public TaskRequestDTO run(@PathVariable String id, @RequestParam(required = false) String reportId) { return testPlanApiScenarioService.run(id, reportId, SessionUtils.getUserId()); } + + + @PostMapping("/page") + @Operation(summary = "测试计划-已关联场景用例列表分页查询") + @RequiresPermissions(PermissionConstants.TEST_PLAN_READ) + @CheckOwner(resourceId = "#request.getTestPlanId()", resourceType = "test_plan") + public Pager> page(@Validated @RequestBody TestPlanApiScenarioRequest request) { + Page page = PageHelper.startPage(request.getCurrent(), request.getPageSize(), + StringUtils.isNotBlank(request.getSortString("id")) ? request.getSortString("id") : "create_time desc"); + return PageUtils.setPageInfo(page, testPlanApiScenarioService.hasRelateApiScenarioList(request, false)); + } } diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanApiScenarioRequest.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanApiScenarioRequest.java index 6fb1f1d212..a0fb2c9371 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanApiScenarioRequest.java +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/request/TestPlanApiScenarioRequest.java @@ -15,4 +15,7 @@ public class TestPlanApiScenarioRequest extends ApiScenarioPageRequest { @NotBlank(message = "{test_plan.id.not_blank}") private String testPlanId; + @Schema(description = "计划集id") + private String collectionId; + } \ No newline at end of file diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanApiScenarioPageResponse.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanApiScenarioPageResponse.java new file mode 100644 index 0000000000..356f4f86ab --- /dev/null +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/dto/response/TestPlanApiScenarioPageResponse.java @@ -0,0 +1,67 @@ +package io.metersphere.plan.dto.response; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author wx + */ +@Data +public class TestPlanApiScenarioPageResponse implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "ID") + private String id; + + @Schema(description = "业务ID") + private Long num; + + @Schema(description = "场景名称") + private String name; + + @Schema(description = "场景等级") + private String priority; + + @Schema(description = "项目id") + private String projectId; + + @Schema(description = "项目名称") + private String projectName; + + @Schema(description = "模块ID") + private String moduleId; + + @Schema(description = "环境fk") + private String environmentId; + + @Schema(description = "环境名称") + private String environmentName; + + @Schema(description = "执行结果") + private String lastExecResult; + + @Schema(description = "执行人") + private String executeUser; + + @Schema(description = "执行人名称") + private String executeUserName; + + @Schema(description = "最后执行时间") + private Long lastExecTime; + + @Schema(description = "创建人id") + private String createUser; + + @Schema(description = "创建人名称") + private String createUserName; + + @Schema(description = "测试集id") + private String testPlanCollectionId; + + @Schema(description = "报告id") + private String lastExecReportId; +} \ No newline at end of file diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiScenarioMapper.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiScenarioMapper.java index 4bbf29f4af..432963753e 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiScenarioMapper.java +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiScenarioMapper.java @@ -3,6 +3,8 @@ package io.metersphere.plan.mapper; import io.metersphere.plan.domain.TestPlanApiScenario; import io.metersphere.plan.dto.ResourceSelectParam; import io.metersphere.plan.dto.TestPlanCaseRunResultCount; +import io.metersphere.plan.dto.request.TestPlanApiScenarioRequest; +import io.metersphere.plan.dto.response.TestPlanApiScenarioPageResponse; import io.metersphere.project.dto.DropNode; import io.metersphere.project.dto.NodeSortQueryParam; import org.apache.ibatis.annotations.Param; @@ -26,4 +28,6 @@ public interface ExtTestPlanApiScenarioMapper { List selectCaseExecResultCount(String testPlanId); List selectByTestPlanIdAndNotDeleted(String testPlanId); + + List relateApiScenarioList(@Param("request") TestPlanApiScenarioRequest request, @Param("deleted") boolean deleted); } diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiScenarioMapper.xml b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiScenarioMapper.xml index 3f6fe5dc74..150f0edbfa 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiScenarioMapper.xml +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/mapper/ExtTestPlanApiScenarioMapper.xml @@ -82,4 +82,232 @@ WHERE t.test_plan_id = #{0} AND a.deleted = false + + + + + + and ( + api_scenario.num like concat('%', #{request.keyword},'%') + or api_scenario.name like concat('%', #{request.keyword},'%') + or api_scenario.tags like concat('%', #{request.keyword},'%') + ) + + + and api_scenario.id = #{request.scenarioId} + + + and api_scenario.module_id in + + #{nodeId} + + + + and t.test_plan_collection_id = #{request.collectionId} + + + + + + + + + + + + + + + + + + + + + + + + + + + and ( + (api_scenario.last_report_status is null or api_scenario.last_report_status = '') + or api_scenario.last_report_status in + + ) + + + and api_scenario.last_report_status in + + + + + and api_scenario.status in + + + + and api_scenario.create_user in + + + + and api_scenario.update_user in + + + + and api_scenario.delete_user in + + + + and api_scenario.version_id in + + + + and api_scenario.priority in + + + + and api_scenario.id in ( + select api_id from api_definition_custom_field where concat('custom_single_', field_id) = + #{key} + and trim(both '"' from `value`) in + + ) + + + and api_scenario.id in ( + select api_id from api_definition_custom_field where concat('custom_multiple_', field_id) = + #{key} + and + + ) + + + + + + + + + + and api_scenario.name + + + + + + + and api_scenario.num + + + + + + + and api_scenario.update_time + + + + + + + and api_scenario.create_time + + + + + + + and api_scenario.status + + + + + + + and (api_scenario.tags is null or api_scenario.tags + + + + ) + + + + and api_scenario.tags + + + + + + + + + + and api_scenario.id not in ( + + + and api_scenario.id in ( + + select api_id from api_definition_custom_field where field_id = #{custom.id} + + + and `value` + + + + + + and ${custom.value} + + + and left(replace(unix_timestamp(trim(both '"' from `value`)), '.', ''), 13) + + + + + + and trim(both '"' from `value`) + + + + + + ) + + + + + + + + and ${versionTable}.version_id = #{request.versionId} + + + and ${versionTable}.ref_id = #{request.refId} + + + AND ${versionTable}.latest = 1 + + \ No newline at end of file diff --git a/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanApiScenarioService.java b/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanApiScenarioService.java index 7d7ef76787..71b84a9703 100644 --- a/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanApiScenarioService.java +++ b/backend/services/test-plan/src/main/java/io/metersphere/plan/service/TestPlanApiScenarioService.java @@ -15,21 +15,31 @@ import io.metersphere.plan.domain.TestPlanApiScenarioExample; import io.metersphere.plan.dto.ResourceLogInsertModule; import io.metersphere.plan.dto.TestPlanCaseRunResultCount; import io.metersphere.plan.dto.TestPlanCollectionDTO; +import io.metersphere.plan.dto.TestPlanCollectionEnvDTO; import io.metersphere.plan.dto.request.BaseCollectionAssociateRequest; import io.metersphere.plan.dto.request.ResourceSortRequest; import io.metersphere.plan.dto.request.TestPlanApiScenarioRequest; +import io.metersphere.plan.dto.response.TestPlanApiScenarioPageResponse; import io.metersphere.plan.dto.response.TestPlanOperationResponse; import io.metersphere.plan.mapper.*; +import io.metersphere.project.domain.Project; +import io.metersphere.project.domain.ProjectExample; import io.metersphere.project.dto.MoveNodeSortDTO; +import io.metersphere.project.mapper.ProjectMapper; import io.metersphere.sdk.constants.*; +import io.metersphere.sdk.domain.Environment; +import io.metersphere.sdk.domain.EnvironmentExample; import io.metersphere.sdk.dto.api.task.*; import io.metersphere.sdk.exception.MSException; +import io.metersphere.sdk.mapper.EnvironmentMapper; import io.metersphere.sdk.util.BeanUtils; import io.metersphere.sdk.util.Translator; import io.metersphere.system.dto.LogInsertModule; +import io.metersphere.system.service.UserLoginService; import io.metersphere.system.uid.IDGenerator; import io.metersphere.system.utils.ServiceUtils; import jakarta.annotation.Resource; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSession; @@ -62,6 +72,14 @@ public class TestPlanApiScenarioService extends TestPlanResourceService implemen private ApiScenarioRunService apiScenarioRunService; @Resource private ApiExecuteService apiExecuteService; + @Resource + private ProjectMapper projectMapper; + @Resource + private UserLoginService userLoginService; + @Resource + private ExtTestPlanCollectionMapper extTestPlanCollectionMapper; + @Resource + private EnvironmentMapper environmentMapper; public TestPlanApiScenarioService() { GetRunScriptServiceRegister.register(ApiExecuteResourceType.TEST_PLAN_API_SCENARIO, this); @@ -132,7 +150,7 @@ public class TestPlanApiScenarioService extends TestPlanResourceService implemen } @Override - public void associateCollection(String planId, Map> collectionAssociates,String userId) { + public void associateCollection(String planId, Map> collectionAssociates, String userId) { List apiScenarios = collectionAssociates.get(AssociateCaseType.API_SCENARIO); // TODO: 调用具体的关联场景用例入库方法 入参{计划ID, 测试集ID, 关联的用例ID集合} } @@ -161,6 +179,7 @@ public class TestPlanApiScenarioService extends TestPlanResourceService implemen List scenarioPage = apiScenarioService.getScenarioPage(request, isRepeat, request.getTestPlanId()); return scenarioPage; } + public TestPlanOperationResponse sortNode(ResourceSortRequest request, LogInsertModule logInsertModule) { TestPlanApiScenario dragNode = testPlanApiScenarioMapper.selectByPrimaryKey(request.getMoveId()); if (dragNode == null) { @@ -234,4 +253,85 @@ public class TestPlanApiScenarioService extends TestPlanResourceService implemen TestPlanApiScenario testPlanApiScenario = testPlanApiScenarioMapper.selectByPrimaryKey(taskItem.getResourceId()); return apiScenarioRunService.getRunScript(request, testPlanApiScenario.getApiScenarioId()); } + + + /** + * 已关联接口场景列表 + * + * @param request + * @param deleted + * @return + */ + public List hasRelateApiScenarioList(TestPlanApiScenarioRequest request, boolean deleted) { + List list = extTestPlanApiScenarioMapper.relateApiScenarioList(request, deleted); + buildApiScenarioResponse(list); + return list; + } + + private void buildApiScenarioResponse(List apiScenarioList) { + if (CollectionUtils.isNotEmpty(apiScenarioList)) { + Map projectMap = getProject(apiScenarioList); + Map userMap = getUserMap(apiScenarioList); + handleScenarioAndEnv(apiScenarioList, projectMap, userMap); + } + } + + private void handleScenarioAndEnv(List apiScenarioList, Map projectMap, Map userMap) { + //获取二级节点环境 + List secondEnv = extTestPlanCollectionMapper.selectSecondCollectionEnv(CaseType.SCENARIO_CASE.getKey(), ModuleConstants.ROOT_NODE_PARENT_ID); + Map secondEnvMap = secondEnv.stream().collect(Collectors.toMap(TestPlanCollectionEnvDTO::getId, item -> item)); + //当前用例环境 + List caseEnvIds = apiScenarioList.stream().map(TestPlanApiScenarioPageResponse::getEnvironmentId).toList(); + EnvironmentExample environmentExample = new EnvironmentExample(); + environmentExample.createCriteria().andIdIn(caseEnvIds); + List caseEnv = environmentMapper.selectByExample(environmentExample); + Map caseEnvMap = caseEnv.stream().collect(Collectors.toMap(Environment::getId, Environment::getName)); + apiScenarioList.forEach(item -> { + item.setProjectName(projectMap.get(item.getProjectId())); + item.setCreateUserName(userMap.get(item.getCreateUser())); + TestPlanCollectionEnvDTO collectEnv = secondEnvMap.get(item.getTestPlanCollectionId()); + if (StringUtils.equalsIgnoreCase(collectEnv.getEnvironmentId(), ModuleConstants.ROOT_NODE_PARENT_ID)) { + //计划集 == 默认环境 处理默认环境 + doHandleDefaultEnv(item, caseEnvMap); + } else { + //计划集 != 默认环境 + doHandleEnv(item, collectEnv); + } + }); + } + + private void doHandleEnv(TestPlanApiScenarioPageResponse item, TestPlanCollectionEnvDTO collectEnv) { + if (StringUtils.isNotBlank(collectEnv.getEnvironmentName())) { + item.setEnvironmentId(collectEnv.getEnvironmentId()); + item.setEnvironmentName(collectEnv.getEnvironmentName()); + } else { + item.setEnvironmentId(null); + item.setEnvironmentName(null); + } + } + + private void doHandleDefaultEnv(TestPlanApiScenarioPageResponse item, Map caseEnvMap) { + if (caseEnvMap.containsKey(item.getEnvironmentId())) { + item.setEnvironmentName(caseEnvMap.get(item.getEnvironmentId())); + } else { + item.setEnvironmentId(null); + item.setEnvironmentName(null); + } + } + + private Map getUserMap(List apiScenarioList) { + List userIds = new ArrayList<>(); + userIds.addAll(apiScenarioList.stream().map(TestPlanApiScenarioPageResponse::getCreateUser).toList()); + userIds.addAll(apiScenarioList.stream().map(TestPlanApiScenarioPageResponse::getExecuteUser).toList()); + return userLoginService.getUserNameMap(userIds.stream().filter(StringUtils::isNotBlank).distinct().toList()); + } + + + private Map getProject(List apiScenarioList) { + List projectIds = apiScenarioList.stream().map(TestPlanApiScenarioPageResponse::getProjectId).toList(); + ProjectExample projectExample = new ProjectExample(); + projectExample.createCriteria().andIdIn(projectIds); + List projectList = projectMapper.selectByExample(projectExample); + return projectList.stream().collect(Collectors.toMap(Project::getId, Project::getName)); + } } diff --git a/backend/services/test-plan/src/test/java/io/metersphere/plan/controller/TestPlanApiScenarioControllerTests.java b/backend/services/test-plan/src/test/java/io/metersphere/plan/controller/TestPlanApiScenarioControllerTests.java index ef26e0b325..4c1629dcb3 100644 --- a/backend/services/test-plan/src/test/java/io/metersphere/plan/controller/TestPlanApiScenarioControllerTests.java +++ b/backend/services/test-plan/src/test/java/io/metersphere/plan/controller/TestPlanApiScenarioControllerTests.java @@ -16,6 +16,8 @@ import io.metersphere.api.dto.scenario.ScenarioOtherConfig; import io.metersphere.api.service.scenario.ApiScenarioService; import io.metersphere.api.utils.ApiDataUtils; import io.metersphere.plan.domain.TestPlanApiScenario; +import io.metersphere.plan.dto.request.TestPlanApiCaseRequest; +import io.metersphere.plan.dto.request.TestPlanApiScenarioRequest; import io.metersphere.plan.mapper.TestPlanApiScenarioMapper; import io.metersphere.plan.service.TestPlanApiScenarioService; import io.metersphere.project.api.assertion.MsResponseCodeAssertion; @@ -26,15 +28,17 @@ import io.metersphere.sdk.dto.api.task.GetRunScriptRequest; import io.metersphere.sdk.dto.api.task.TaskItem; import io.metersphere.sdk.util.JSON; import io.metersphere.system.base.BaseTest; +import io.metersphere.system.controller.handler.ResultHolder; import io.metersphere.system.uid.IDGenerator; import jakarta.annotation.Resource; -import org.junit.jupiter.api.MethodOrderer; -import org.junit.jupiter.api.Order; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.*; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.jdbc.Sql; +import org.springframework.test.context.jdbc.SqlConfig; +import org.springframework.test.web.servlet.MvcResult; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -50,6 +54,7 @@ public class TestPlanApiScenarioControllerTests extends BaseTest { private static final String BASE_PATH = "/test-plan/api/scenario/"; public static final String RUN = "run/{0}"; public static final String RUN_WITH_REPORT_ID = "run/{0}?reportId={1}"; + public static final String API_SCENARIO_PAGE = "page"; @Resource private TestPlanApiScenarioService testPlanApiScenarioService; @@ -172,4 +177,25 @@ public class TestPlanApiScenarioControllerTests extends BaseTest { private Object getMsHttpElementStr(MsHTTPElement msHTTPElement) { return JSON.parseObject(ApiDataUtils.toJSONString(msHTTPElement)); } + + + + @Test + @Order(3) + @Sql(scripts = {"/dml/init_test_plan_api_scenario.sql"}, config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED)) + public void testApiCasePageList() throws Exception { + TestPlanApiScenarioRequest request = new TestPlanApiScenarioRequest(); + request.setCurrent(1); + request.setPageSize(10); + request.setTestPlanId("wxxx_plan_1"); + request.setProjectId("wxx_project_1234"); + this.requestPost(API_SCENARIO_PAGE, request); + request.setSort(new HashMap<>() {{ + put("createTime", "desc"); + }}); + MvcResult mvcResult = this.requestPostWithOkAndReturn(API_SCENARIO_PAGE, request); + String returnData = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8); + ResultHolder resultHolder = JSON.parseObject(returnData, ResultHolder.class); + Assertions.assertNotNull(resultHolder); + } } diff --git a/backend/services/test-plan/src/test/resources/dml/init_test_plan_api_scenario.sql b/backend/services/test-plan/src/test/resources/dml/init_test_plan_api_scenario.sql new file mode 100644 index 0000000000..4f526d2597 --- /dev/null +++ b/backend/services/test-plan/src/test/resources/dml/init_test_plan_api_scenario.sql @@ -0,0 +1,43 @@ +INSERT INTO `test_plan`(`id`, `num`, `project_id`, `group_id`, `module_id`, `name`, `status`, `type`, `tags`, `create_time`, `create_user`, `update_time`, `update_user`, `planned_start_time`, `planned_end_time`, `actual_start_time`, `actual_end_time`, `description`) +VALUES + ('wxxx_plan_1', 5000, 'wxx_1234', 'NONE', '1', 'qwe', 'PREPARED', 'TEST_PLAN', NULL, 1714980158000, 'WX', 1714980158000, 'WX', 1714980158000, 1714980158000, 1714980158000, 1714980158000, '11'), + ('wxxx_plan_2', 10000, 'wxx_1234', 'NONE', '1', 'eeew', 'PREPARED', 'TEST_PLAN', NULL, 1714980158000, 'WX', 1714980158000, 'WX', 1714980158000, 1714980158000, 1714980158000, 1714980158000, '11'); + + +INSERT INTO `test_plan_config`(`test_plan_id`, `automatic_status_update`, `repeat_case`, `pass_threshold`, + `case_run_mode`) +VALUES ('wxxx_plan_1', b'0', b'0', 100, 'PARALLEL'), + ('wxxx_plan_2', b'0', b'0', 100, 'PARALLEL'); + + +INSERT INTO project (id, num, organization_id, name, description, create_user, update_user, create_time, update_time, module_setting) +VALUES + ('wxx_project_1234', 5, 1, 'wx', 'wx', 'admin', 'admin', unix_timestamp() * 1000, unix_timestamp() * 1000,'["bugManagement","caseManagement","apiTest","testPlan"]'); + + +INSERT INTO `test_plan_api_scenario`(`id`, `test_plan_id`, `api_scenario_id`, `environment_id`, `execute_user`, `last_exec_result`, `last_exec_report_id`, `create_time`, `create_user`, `pos`, `test_plan_collection_id`, `grouped`, `last_exec_time`) +VALUES + ('wxxx_plan_scenario_1', 'wxxx_plan_1', 'wxxx_api_scenario_1', '1', 'admin', '', NULL, 1716370415311, 'admin', 64, 'wxxx_collection_2', b'0', 1716370415311), + ('wxxx_plan_scenario_2', 'wxxx_plan_1', 'wxxx_api_scenario_2', '123', 'admin', '', NULL, 1716370415311, 'admin', 64, 'wxxx_collection_3', b'0', 1716370415311); + +INSERT INTO `api_scenario`(`id`, `name`, `priority`, `status`, `step_total`, `request_pass_rate`, `last_report_status`, `last_report_id`, `num`, `deleted`, `pos`, `version_id`, `ref_id`, `latest`, `project_id`, `module_id`, `description`, `tags`, `grouped`, `environment_id`, `create_user`, `create_time`, `delete_time`, `delete_user`, `update_user`, `update_time`) +VALUES + ('wxxx_api_scenario_1', 'axx', 'P0', 'UNDERWAY', 3, '0.46', 'ERROR', '971160841641984', 100027, b'0', 5568, '718273150722066', '1023696881426432', b'1', 'wxx_project_1234', 'root', '', '[]', b'0', 'wx_env_123', '714940256100352', 1717489987182, NULL, NULL, '714940256100352', 1717557159805), + ('wxxx_api_scenario_2', 'xww', 'P0', 'UNDERWAY', 3, '0.46', 'ERROR', '971160841641984', 100027, b'0', 5568, '718273150722066', '1023696881426432', b'1', 'wxx_project_1234', 'root', '', '[]', b'0', 'wx_env_123', '714940256100352', 1717489987182, NULL, NULL, '714940256100352', 1717557159805); + + + +INSERT INTO `test_plan_collection`(`id`, `test_plan_id`, `name`, `type`, `environment_id`, `test_resource_pool_id`, `pos`, `create_user`, `create_time`, `parent_id`) +VALUES + ('wxxx_collection_1', 'wxxx_plan_1', 'wxxx_wx_1', 'SCENARIO', 'NONE', 'NONE', 1, 'admin', 1716370415311, 'NONE'), + ('wxxx_collection_2', 'wxxx_plan_1', 'wxxx_wx_2', 'SCENARIO', 'wx_env_123', 'NONE', 2, 'admin', 1716370415311, 'wxxx_collection_1'), + ('wxxx_collection_3', 'wxxx_plan_2', 'wxxx_wx_3', 'SCENARIO', 'NONE', 'NONE', 3, 'admin', 1716370415311, 'wxxx_collection_1'); + + + +INSERT INTO `environment`(`id`, `name`, `project_id`, `create_user`, `update_user`, `create_time`, `update_time`, `mock`, `description`, `pos`) +VALUES + ('wx_env_123', 'Mock环境', 'wxx_project_1234', 'admin', 'admin', 1716175907000, 1716175907000, b'1', NULL, 64), + ('wx_env_223', '测试环境', 'wxx_project_1234', 'admin', 'admin', 1716175907000, 1716175907000, b'1', NULL, 128); + +