前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我来给MeterSphere写测试用例03

我来给MeterSphere写测试用例03

作者头像
Antony
发布2020-12-03 15:01:29
8420
发布2020-12-03 15:01:29
举报

测试项目新建

从MeterSphere的设计思路来看,它并没有引入系统来作为测试用例的一个容器,而是使用了测试项目来代表一个大的用例集合。用户可以在某个项目中选择一批用例组成一个测试计划,并分配个测试人员执行测试。作为整个旅程的第一项任务,是在登录之后新创建一个测试项目,为后续其它业务操作提供上下文。

被测接口 - 项目新建

首先观察一下controller源码。

代码语言:javascript
复制
package io.metersphere.controller;

@RestController
@RequestMapping(value = "/project")
public class ProjectController {
    @PostMapping("/add")
    @RequiresRoles(value = {RoleConstants.TEST_MANAGER, RoleConstants.TEST_USER,}, logical = Logical.OR)
    public Project addProject(@RequestBody Project project) {
        return projectService.addProject(project);
    }
}

可以了解到新增项目这个接口

  • 访问URL是:/project/add @RequestMapping(value = "/project")表示整个ProjectController 类的访问路径是"/project" @PostMapping("/add")表示新增项目这个接口的访问路径是"add", 接口类型是Post。 合并起来,这个接口的完整URL就是"/project/add"
  • 接口类型:POST 这个在URL时已经介绍过了
  • 接口入参:接受Project类的实例作为入参 在接口定义的入参中通过@RequestBody注解进行标注。
  • 接口返回值:Project类的实例 当然这里看到的只是controller类里某个方法的返回值。MeterSphere还在切面中提供了统一格式的HTTP接口返回格式,感兴趣的读者可以参考ResultHolder。controller方法中返回的Project类实例将作为data字段的属性值。
  • 权限:测试经理和测试用户 通过Shiro提供的@RequiresRoles注解来实现

测试用例编写

根据上述分析,编写一个简单的新增测试项目的测试用例。

代码语言:javascript
复制
    @Test
    public void testAddProject() throws Exception {
        Project project=new Project();
        project.setName("IamName");
        String projectAdd= doPost("/project/add",JSON.toJSONString(project));   
//将相应的数据转换为字符串
        ResultHolder resultHolder= JSON.parseObject(projectAdd,ResultHolder.class);
       // assertThat(resultHolder.isSuccess()).isTrue();
        Project proj= JSON.parseObject(String.valueOf(resultHolder.getData()),Project.class);
        assertThat(proj.getName()).isEqualTo(project.getName());
    }

Project这个实体有着诸多的属性,不过在创建测试项目时,仅仅提供测试项目名称即可通过系统校验创建成功。因此,在用例中做了简化处理。另外,在接口返回的data中是经过序列化以后的Project实例。笔者此处用name的一致性做断言。在创建过程中,系统会自动分配一个id给到这个新增的项目上,也可以额外判断id非空来断言。

在测试项目中新建测试模块

一般来说,在进行系统功能的分解和测试用例的组织时,常见的就是所谓系统-模块-功能点的树形结构划分。MeterSphere也在“项目”中引入了“模块”的概念。如果说一个项目的用例集是一棵树的话,那么模块就是这棵树的枝条,而用例就是最末端的树叶子了。以下是该项目demo网站上的一个模块截图。可以看到,通过模块-子模块这样的一层层嵌套,形成了一个测试用用例集的树形结构。

在简单了解了模块的含义和功能后,就来到了本小节的第二个案例,在之前新建的测试项目中新建一个测试模块,用于下挂测试用例。

做过接口自动化测试的读者可能都使用过Chrome浏览器的开发者工具。在打开该工具,并在前台新建测试模块后,通过该工具可以查看到这个过程中的http请求与响应。如以下是请求的部分。

通过这个过程,我们了解到这个接口的url是 "/case/node/add",由此可以通过查找定位这个接口对应的服务端代码。

代码语言:javascript
复制
 package io.metersphere.track.controller;
 
 @RequestMapping("/case/node")
 @RestController
 @RequiresRoles(value = {RoleConstants.ADMIN, RoleConstants.TEST_MANAGER, RoleConstants.TEST_USER, RoleConstants.TEST_VIEWER, RoleConstants.ORG_ADMIN}, logical = Logical.OR)
 public class TestCaseNodeController {
 
  @PostMapping("/add")
  @RequiresRoles(value = {RoleConstants.TEST_USER, RoleConstants.TEST_MANAGER}, logical = Logical.OR)
  public String addNode(@RequestBody TestCaseNode node) {
  return testCaseNodeService.addNode(node);
  }
 }

这样,就可以开始编写基于MockMVC的新建模块的用例了。

代码语言:javascript
复制
  @Order(2)
  @Test
  @DisplayName("02模块-在新项目中创建模块")
  public void testAddModuleInProject() throws Exception {
  String name="node-"+getRandom();
  testCaseNode.setProjectId(project.getId());
  testCaseNode.setName(name);
  testCaseNode.setLevel(1);
  String projectAdd= doPost("/case/node/add",JSON.toJSONString(testCaseNode));
  ResultHolder resultHolder= JSON.parseObject(projectAdd,ResultHolder.class);
  String id=String.valueOf(resultHolder.getData());
  testCaseNode.setId(id);
  assertThat(testCaseNode.getId()).isNotNull();
  }

如前所述,测试模块的实质是测试项目这棵树下的非叶子节点,因此在创建时除了指定名字之外,还需要指定ProjectId。另外,如果不是根目录下的模块,而是子模块的话,还需要额外指定父模块,即:

代码语言:javascript
复制
 testCaseNode.setParentId

这个接口的返回值是新增的这个测试模块的id号。返回整个对象或者只是id,这些都是一个比较友好的设计。接口的调用者可以凭此来判断断言是否成功。本用例中简单地断言了testCaseNode为非空,隐含意思是新建成功。

完成了项目和模块的新建之后,就完成了本次旅程的第一步。后续就可以创建测试用例,并启动测试计划和评审流程了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试项目新建
    • 被测接口 - 项目新建
      • 测试用例编写
      • 在测试项目中新建测试模块
      相关产品与服务
      云开发 CLI 工具
      云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档