专栏首页软件测试那些事MeterSphere系列05-将测试用例纳入测试计划

MeterSphere系列05-将测试用例纳入测试计划

我来给MeterSphere写测试用例05

目前为止,我们已经创建了测试项目,并且在项目内创建了模块和用例。接下来,将介绍如何将测试用例纳入测试计划,并执行。

作为一个计划,一般都会存在着负责人、计划开始/结束时间等管理要素。以下是前台可以看到的测试计划界面。通过观察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);
     }

测试过程是这样的,

  • 首先组织测试计划的信息,主要是测试计划的名字、创建人、工作空间、所属项目、测试阶段等信息。
  • 然后通过调用接口完成计划的创建。
  • 最后通过查询来获取刚才新建的测试计划并保存。

通过JSON串准备基础数据

与先前的测试用例不同的是,这里在构建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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我来给MeterSphere写测试用例07

    我们通过测试计划的管理接口来实现用例的执行结果上报,将之前新增并纳入测试计划的用例标注为执行通过。以下是用例,

    Antony
  • Mockito.when().thenReturn

    在之前的案例中,通过Mockito.when().thenReturn的方式构造了测试桩,来控制StockService.getPrice()这个方法的返回值。

    Antony
  • 异步回调方法-PowerMock系列之6

    在异步系统的测试中,经常会涉及到了回调callback的单元测试。百度了一下异步测试之后,基本上的案例都来自于这里:

    Antony
  • 谈谈“测试计划”这点事

    最近,通过一个需求让我对测试计划有了一个清晰的了解以及运用,下面是在整个测试计划制定的要点以及测试计划制定过程中遇到一些问题,在此进行总结与分享:

    用户5521279
  • Linux 下使用 Monit 实现服务挂掉自动拉起

    由于应用稳定性或者服务器资源限制等问题,应用就会出现自动挂掉的情况,此时就需要自动拉起应用。

    叨叨软件测试
  • Python 为什么不支持 switch 语句?

    主要是因为 switch 在其它语言中太常见了,而 Python 却不支持,这样的独特性本身就值得关注,而回答这个问题,也能更加看清 Python 在程序设计上...

    崔庆才
  • Python 为什么不支持 switch 语句?

    在这篇文章里,我们会聊一聊为什么 Python 决定不支持 switch 语句。

    Python进击者
  • Python 为什么不支持 switch 语句?

    主要是因为 switch 在其它语言中太常见了,而 Python 却不支持,这样的独特性本身就值得关注,而回答这个问题,也能更加看清 Python 在程序设计上...

    Python猫
  • 奇怪的问题:连上外网工程就可以启动,关掉外网就无法启动

    需要在虚拟机上搭建一个演示环境寄给客户来试用,昨天好好的工程,今天突然无法启动了,提示hibernate.InvalidMappingException,连上网...

    西门呀在吹雪
  • 关于评审开发人员的sql语句(r3笔记第11天)

    在平时的工作中,经常会有一些开发人员提出一些数据库相关的一些问题。可能问的最多的就是sql语句了。 按照一个标准的流程,开发提交的sql语句在完成一系列测试之后...

    jeanron100

扫码关注云+社区

领取腾讯云代金券