MeterSphere 使用 MeterSphere 进行场景化接口测试

MeterSphere 小助手 · 2020年08月27日 · 最后由 big9sun 回复于 2021年11月26日 · 6786 次阅读

测试目标

使用 MeterSphere 的接口测试功能,测试 MeterSphere 项目管理相关接口是否正常

测试场景

  • 通过查询项目列表接口,获取现有的项目列表,并判断当前项目列表中没有要创建的项目「接口测试项目」
  • 通过创建项目接口,创建一个名称和描述都为「接口测试项目」的项目,并从返回结果中获取该项目的 ID
  • 通过查询指定项目接口,传入上一步中获取的「接口测试项目」的 ID,并且判断返回中的项目 ID、名称及描述是否符合预期
  • 通过删除项目接口,传入「接口测试项目」的 ID 删除该项目,并通过返回信息判断是否删除成功
  • 通过查询指定项目接口,传入「接口测试项目」的 ID 再次查询该项目,通过返回信息再次确认该项目是否删除成功

接口分析

MeterSphere 的接口文档位于所部署环境中的 /swagger-ui 路径中,在该文档中的 project-controller 分组中可以找到我们所需的各个接口

对应上述测试场景,在这里我们需要用到以下接口

  • GET /project/listAll
  • POST /project/add
  • GET /project/get/{id}
  • GET /project/delete/{projectId}

依次查看每个接口的定义,可以发现各个接口的返回都是类似如下形式,因此我们可以通过 JSONPath 的方式来获取特定的返回值,判断其是否符合预期或提取为变量供后续请求使用

{
    "success": true,
    "message": "Message",
    "data": {
        "key1": "value1",
        "key2": "value2"
    }
}

创建接口测试

接下来我们就可以在 MeterSphere 创建一个接口测试,来模拟测试上述测试场景。在本次测试中,我们通过调用登录接口并共享 Cookie 的方式来处理接口的认证问题

详细步骤

  1. 创建测试并配置场景
    在新创建的接口测试场景配置中,新建一个环境配置并填入被测系统的基本信息,同时在场景配置中选择新建的环境并勾选「共享 Cookie」


  2. 添加一个「登录 MeterSphere」的 HTTP 请求
    使用「POST /signin」接口,根据接口定义选择 POST 方法并通过 JSON 的格式传入用户名密码;同时添加断言,判断登录请求是否成功

  3. 添加一个「获取项目列表」的 HTTP 请求
    使用「GET /project/listAll」接口,在这个接口请求里我们依次添加两个断言:1. 响应内容中的 success 字段值为 true;2. 响应内容中不包含我们要新建的项目名称「接口测试项目」,断言编辑完成后点击「Add」按钮进行添加

  4. 添加一个「创建项目」的 HTTP 请求
    使用「POST /project/create」接口,根据接口定义通过 JSON 格式传入项目名称及描述信息,在这个请求中我们添加一个通用的「响应内容中的 success 字段值为 true」的断言,并通过 JSONPath 格式的提取功能,从返回数据中获取新创建的项目的 ID 存入 projectID 变量中,后续接口可以通过 ${projectID} 格式引用该变量

  5. 添加一个「查询新创建的项目」的 HTTP 请求
    使用「GET /project/get/{id}」接口,在该接口中我们通过在请求 URL 中引用 ${projectId} 变量的方式传入新创建的项目的 ID;同时依次添加 4 个断言:1. 响应内容中的 success 字段值为 true;2. 响应内容中的项目名称与创建时填写的一致;3. 响应内容中的项目描述与创建时填写的一致;4. 响应内容中的项目 ID 与之前获取的一致

  6. 添加一个「删除新创建的项目」的 HTTP 请求
    使用「GET /project/delete/{projectId}」接口,在该接口中我们通过在请求 URL 中引用 ${projectId} 变量的方式传入新创建的项目的 ID;同时添加一个通用的「响应内容中的 success 字段值为 true」的断言

  7. 添加一个「查询已删除的项目」的 HTTP 请求
    使用「GET /project/get/{id}」接口,在该接口中我们通过在请求 URL 中引用 ${projectId} 变量的方式传入新创建的项目的 ID;由于该项目已删除,根据接口定义其返回内容中的 data 字段应该为空,因而在这个接口中我们依次添加 2 个断言:1. 响应内容中的 success 字段值为 true;2. 响应内容中 data 字段为空;

运行接口测试

至此我们已经通过上面创建的一系列接口请求,实现了我们需要去验证的测试场景,接下来点击「保存并执行」按钮,系统执行完所有测试场景后将自动跳转到测试报告页面,在该页面中我们可以看到所有接口执行结果的概览,同时也可以在左侧的接口列表中选择某个接口查看其详细的请求及响应内容

共收到 10 条回复 时间 点赞

1、整体感觉用起来没有 postman 使用流畅
2、个人比较喜欢 postman 的各个语言的支持

roc 回复

各个语言的支持你指的是哪一方面啊

查询项目列表接口与创建项目接口也应该有关联吧,要是存在就不应该再往下执行了

酸柠檬 回复

嗯,是这个道理,目前接口的话只是串行执行,后面可以优化下增加失败终止和条件判断的功能

1、比如它只 python 、ruby 、js 等各个语言发送的 http 请求
2、这就要考虑了,若时其他语言写 http 接口,怎么最快速的 把它转换到 meterSphere 本身的接口
3、个人使用来习惯说,界面性按钮来定义,不太方便,是否支持 一个配置文件全部搞定

很赞,MeterSphere 未来可期。

roc 回复

你指的是生成各种语言的接口调用代码吗?
2、3 点的话可能要放在我们 2.0 的版本来改进了,很多自己做的测试平台是自底向上的,先有代码、脚本化的接口测试用例,再把这个框架扩展成平台,我们现在相当于是自顶向下的,直接做了个平台,背后虽然用到了 JMeter 但是 jmx 格式的脚本也是不适合直接编辑的。在 2.0 版本重构的时候会考虑下这个问题,既支持图形化配置的方式,也支持脚本、代码这种文本化的方式。

山里人 回复

感谢认可

仅楼主可见

我司在试用 metersphere,遇到一个问题,请求的接口响应 403 才代表接口测试通过,设置了断言 responsecode=403,在接口测试中跑完之后报告里接口测试结果失败,断言成功,我们期望返回 403 断言成功的时候接口测试结果是成功,这个能做到吗,还是说对于接口成功的判断就是响应码必须为 200

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册