目前为止,我们已经创建了测试项目,并且在项目内创建了模块和用例。接下来,将介绍如何将测试用例纳入测试计划,并执行。
作为一个计划,一般都会存在着负责人、计划开始/结束时间等管理要素。以下是前台可以看到的测试计划界面。通过观察MeterSphere前台的测试计划界面,我们可以了解到,一个测试计划隶属于某个项目。随着项目的切换,测试计划清单也会随之切换,并且具备了一个计划所必须的关键要素。
测试流程管理简单来说就是定义好项目阶段-测试级别-测试类型,也就是说明确在不同项目阶段中,定义好若干的测试级别,并规定好各个级别所要实施的各类型测试活动。
目前随着敏捷研发模式,尤其是互联网类型的项目成为主流,项目更多的是随着业务发展而来的系统维护更新,采用更为轻量、阶段划分更为紧凑或者不明显的测试计划管理也是贴合实际需求的。因此我们可以看到MeterSphere这里使用了测试阶段+测试计划来安排测试活动。
聊完了测试项目的管理流程,言归正传来对MeterSphere的这个接口进行测试。以下是一个示例,
@Order(4) @Test @DisplayName("04测试计划-新建测试计划") public void addTestPlan() throws Exception { String input="{\"name\":\"1234\",\"projectIds\":[\"8e06530d-4125-4114-9b4e-dc1cd809c63a\"],\n" + " \"principal\":\"demo\",\"stage\":\"system\",\"description\":\"demoo\",\n" + " \"plannedStartTime\":1604160000000,\"plannedEndTime\":1606147200000,\n" + " \"workspaceId\":\"f0d189dc-7e27-4a63-9702-976aff21d334\"}"; addTestPlanRequest=JSON.parseObject(input,AddTestPlanRequest.class); addTestPlanRequest.setProjectIds(Arrays.asList(project.getId())); addTestPlanRequest.setName("plan-"+getRandom()); addTestPlanRequest.setCreator("admin"); addTestPlanRequest.setDescription(getRandom()); addTestPlanRequest.setWorkspaceId(workspace.getId()); String result= doPost("/test/plan/add",JSON.toJSONString(addTestPlanRequest)); assertThat(result).contains("true"); result=doPost("/test/plan/list/all"," "); List<TestPlan> testPlans= JSON.parseArray(String.valueOf(JSON.parseObject(result,ResultHolder.class).getData()),TestPlan.class); assertThat(testPlans).isNotEmpty(); testPlan=testPlans.get(0); }
测试过程是这样的,
与先前的测试用例不同的是,这里在构建addTestPlanRequest对象时,首先通过一个JSON串的反序列化新创建了一个AddTestPlanRequest的实例,然后根据本测试用例的需要,对一些需要变化的属性重新进行了赋值。这是笔者经常使用的一个数据准备方式。特别是在一些单元测试和集成测试时,如果待构造的对象属性较多,且各个用例中均需要使用此类对象且存在大量重复属性的时候,就可以使用这种方式。先准备一个JSON串作为基础数据,然后在各个用例中通过反序列化来构造对象,并对变化部分重新赋值。这样隔离了共享一个类所带来的数据冲突问题,也不用重写对象的深拷贝方法,更避免了测试用例代码中大量存在的set方法调用。
另外还有一点提醒读者注意,MeterSphere团队在关联某个测试计划与测试项目时,使用的是List<String> 来记录测试项目,而不是单个的String
addTestPlanRequest.setProjectIds(Arrays.asList(project.getId()));
虽然目前来说测试计划只隶属于一个项目,笔者猜测不排除后续将测试计划独立出来,成为与测试项目平级的业务对象。
在创建了测试计划之后,我们要将之前创建的测试用例与之关联起来,也就是将测试用例纳入测试计划。
@Order(5) @Test @DisplayName("05测试计划-关联测试用例") public void addTestPlanRelevance() throws Exception { PlanCaseRelevanceRequest planCaseRelevanceRequest= new PlanCaseRelevanceRequest(); String input="{\"name\":\"1234\",\"projectIds\":[\"8e06530d-4125-4114-9b4e-dc1cd809c63a\"],\n" + " \"principal\":\"demo\",\"stage\":\"system\",\"description\":\"demoo\",\n" + " \"plannedStartTime\":1604160000000,\"plannedEndTime\":1606147200000,\n" + " \"workspaceId\":\"f0d189dc-7e27-4a63-9702-976aff21d334\"}"; QueryTestCaseRequest queryTestCaseRequest= new QueryTestCaseRequest(); queryTestCaseRequest.setPlanId(testPlan.getId()); queryTestCaseRequest.setTestCaseIds(Arrays.asList(testCase.getId())); queryTestCaseRequest.setProjectId(project.getId()); planCaseRelevanceRequest.setPlanId(testPlan.getId()); planCaseRelevanceRequest.setRequest(queryTestCaseRequest); planCaseRelevanceRequest.setTestCaseIds(Arrays.asList(testCase.getId())); String result= doPost("/test/plan/relevance",JSON.toJSONString(planCaseRelevanceRequest)); assertThat(result).contains("true"); }
至此,我们在原先创建了测试项目、测试模块,将测试用例挂到了相应的测试模块的基础上,在该测试项目之下创建了测试计划,将测试用例纳入了该计划。
本文分享自微信公众号 - 软件测试那些事(antony-not-available),作者:风月同天测试人
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2020-12-02
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句