MeterSphere是一个功能强大的测试工具,在接口测试方面也有很多好用的地方,在使用MeterSphere进行一轮接口测试后,梳理了一下在使用MeterSphere进行接口测试时的操作流程。
仅以工具操作角度进行接口测试流程步骤分解,按顺序依次是:
一般在提测单中会附有接口文档,如下为接口文档中某个接口的具体描述。我们可以在这个接口描述中获取我们测试一个接口时所需要的大部分信息。
根据接口文档编写接口测试点,最好以思维导图的方式进行编写;
(1)接口用例测试点checklist
接口的所有参数验证 |
验证输入定义的所有参数时接口能正常返回 |
接口的必须参数验证 |
验证输入定义的必须参数时接口能正常返回 |
接口参数输入不存在值 |
验证得到的结果为空或者返回对应的错误码(取决于开发的处理,对于删除接口,该情况一般也会返回成功,可以接受) |
接口参数边界值测试 |
验证边界值情况下能正常返回,超出边界值返回对应的响应码 |
接口参数输入为空(必须参数) |
验证返回对应的错误码 |
接口参数字符验证 |
验证参数输入为字符型时,输入所有可输入字符均可正常返回 |
参数组合测试 |
有的接口可能会有多个参数,这些参数之间可能存在依赖关系。需要测试这些参数的各种合理或者不合理的组合。 |
参数顺序测试 |
有的接口可能对参数的顺序有要求,可以测试改变参数顺序时接口的行为是否正常。 |
接口参数数据类型验证 |
验证输入未定义的数据值或类型时返回相应返回码(数据类型一般在文件类型等用处需要考虑) |
接口参数长度验证 |
验证输入不符合定义长度的数据参数返回对应的返回码(一般是需求定义了的需要加) |
接口输入其他组织下的参数 |
验证得到的结果为空或者返回对应的错误码(取决于开发的处理,对于删除接口,该情况一般也会返回成功,可以接受) |
接口使用无权限的token |
验证返回对应的错误码 |
接口输入token为空 |
验证返回对应的错误码 |
接口输入错误的token |
验证返回对应的错误码 |
接口进行并发请求 |
验证都能请求成功,且接口响应时间达到要求 |
业务逻辑验证 |
使用接口场景验证多个接口正常状态下的执行是否成功 |
(2)接口测试点编写完成后,需要与开发等进行测试点的评审,并根据评审修改测试点
在MeterSphere上需要新建本次测试的接口的模块
(1)进入接口测试--接口定义--项目,选择本次所属的项目
(2)选择/新建模块,根据接口种类进行分类新建
新建了测试模块后,我们还需要创建测试环境(如果已经存在就不需要了)
接口测试--接口定义--环境选择--环境配置
注意:
Ⅰ、4处填写域名,只需要填写http://后的值,不要把http://也写进去。
Ⅱ、5处由于token权限大部分接口需要使用,所以直接在环境变量中进行配置。
Ⅲ、点击第6个步骤进行添加,才能把编辑的域名加到下发列表,才能正常保存。
Ⅳ、点击第7个步骤确定按钮,才能保存当前的修改。
由于大部分接口都需要使用token进行鉴权才能正常请求,故把获取token的脚本放在环境配置中,在每个接口前都运行一下,将获得的token值传给变量,供接口调用,代码如下:
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import groovy.json.JsonSlurper;
CloseableHttpClient httpClient = HttpClients.createDefault();
#其他接口获取token修改此处,接口url
HttpPost httpPost = new HttpPost("http://xxxx/auth/user/login");
httpPost.setHeader("User-Agent", "Apifox/1.0.0 (https://apifox.com)");
httpPost.setHeader("Content-Type", "application/json");
#其他接口获取token修改此处,接口请求参数
httpPost.setEntity(new StringEntity('{"authType": "TENANT_xxx","clientId": "xxxx","tenantCode": "xxxxxx","username": "xxxx","password": "xxxxxx"}'));
HttpResponse response = httpClient.execute(httpPost);
String responseString = EntityUtils.toString(response.getEntity());
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(responseString)
String meeting_token = object.data.accessToken
#设置token值为meeting_token,供后续接口调用
vars.put("meeting_token", meeting_token)
由于MeterSphere对python的支持性不好,使用python或java代码来获取接口都会报错,经尝试使用groovy格式代码可以正常获取token值;代码加入地方如下图所示
Ⅰ、基础信息
名称:建议写上接口需求文档中的序号+接口名称(对后续排序有好处)
请求、模块、责任人、状态:必填,按情况填写,一般有默认值
标签、描述:可不填,有需要时填写
Ⅱ、请求头
在环境变量中已填写请求头Authorization,不需要再进行填写
Ⅲ、QUERY参数、REST参数:根据接口文档进行填写。
Ⅳ、请求体:点击关闭JSON-SCHEMA按钮,可一次性复制多个参数值,开启则是需要一个一个参数进行填写。
点击TEST按钮,进入到接口测试页面,再点击测试按钮,可以发送请求,查看当前接口的编写是否正常。
点击case按钮后,点击添加按钮,即可新建一个新的用例;
另外,如果已有新建的用例,点击已有用例后的复制按钮,可以复制该用例,进行简单修改,就能再新建一个用例
1----用例名称,根据测试点输入
2----用例等级,根据用例优先级输入
3----标签,可以直接输入当前用例名称,对后续添加场景有用,建议每条用例都输入
4----请求头,一般情况不必输入,因为环境配置中已输入。
如果是测试token相关,需要输入对应的token值来覆盖环境变量中的设置。
5----请求参数,根据用例需求填写
6----响应内容,点击展开可查看响应体、响应头、控制台、断言、提取、请求内容
7----执行历史,可以查看当前用例之前的执行参数及结果
填写完用例的请求参数等之后,还需要设置断言来判断当前用例是否执行成功。断言方式有多种,推荐以下两种:
Ⅰ、文档结构校验,一般用于正常场景下的用例,保证用例的返回值与设定一致。
再打开结构性校验的编辑框,这里建议先运行用例,再将正常运行的结果复制到此处(复制JSON文本方式的结果),点击确定后,结果导入,会生成结构校验的数据表格
最后,我们需要编辑这个结构表:1、对照需求表,将定义的返回参数值勾上必含选项(注意:数组类像data、content等内部还有数据结构的,不要勾选,包括其下的object类型的空白值也不要勾选,否则校验不通过);2、在内容校验处,将值-等于修改为不校验。一般校验值只校验返回码值,如果能明确返回值不变,也可以进行值的校验。
最后一步,需要点击右上角,选择环境后面的保存按钮,保存当前编写的用例。
Ⅱ、JSONPath断言方式,该方式是MeterSphere推荐的断言方式,非常简便。
点击推荐JSONPath断言按钮后(当然,你要先运行才能进行JSONPath断言),会弹出如下所示页面。点击图中标注的按钮就可以快速生成JSONPath的断言了。最后也要点击保存,保存当前用例的编写。
需要先点击保存后才能执行用例,保存后点击上方蓝色的执行按钮即可执行用例;
Ⅰ、批量选择用例
1----需要先选择环境
2----全选按钮
3----更多操作按钮
4----批量执行按钮
5----页码及数量,此处需要注意,每次批量运行的用例最多只能50条,因为工具只能批量运行当前页码所能选择的最大用例数量进行批量执行。并且默认是十条每页,超过十条记得切换每页的数量。
Ⅱ、批量运行配置
点击批量执行后,会出现批量执行的配置,推荐串行+集合报告;运行完了会有一份整体的报告,能看到每条用例的执行结果和整体成功率。
Ⅰ、接口列表处查看,可以查看该接口的用例数量和最近依次运行的通过率
Ⅱ、用例列表处查看,可以查看单个用例的最近一次的执行结果及所有执行次数中的通过率
由于用例测试存在的1、一次最多只能执行50条用例;2、用例中不能添加其他接口的操作,会导致用例无法完全自动执行;3、后续需要多次巡检式运行的话,执行用例大概率需要修改很多前置条件,较为费时;所以把接口的批量测试转移到场景测试中;
Ⅰ、接口测试----接口自动化----点击加号按钮----创建场景
Ⅱ、填写场景名称等信息----点击添加按钮----点击接口列表导入(也可以通过其他方式导入)
Ⅲ、选择接口模块----选择用例----高级搜索(可通过标签进行搜索)----全选----引用(接口用例修改此处也随之修改)
编辑场景时,需要保证该场景能随时顺利运行,所以需要进行调试;
1、前置操作:需要创造用例需要的环境。如查询应用版本列表的接口用例场景测试,我们需要先在场景第一条用例前加上获取当前存在的应用ID,后续用例才能通过这个ID来获取应用列表,从而完整的进行场景的运行
2、定义变量:需要定义部分变量,如sn等值,在不同时间运行,该值会有修改,那么将该值定义为场景变量,后续只需要修改场景中变量的值即可
3、场景后置操作(后置接口):部分接口场景需要进行后置操作,如上传应用,如果对同一应用进行多次上传则会提示应用已存在;那么我们需要在应用安装成功后,新加一个卸载应用的场景步骤,此为场景的后置操作;
4、步骤后置操作:通过步骤中的后置操作提取该步骤返回值中的某个值,供下个接口调用,可以使用JSONPath提取,也较为方便。
变量的设置:meeting_token:SSSSSSS
变量的引用:${meeting_token}
场景测试分为两类:
1、单个接口场景测试,拿单个接口中的每一条用例以及必要的其他接口操作作为场景步骤。这是为了后续需要时不时的跑一下接口,定义在场景中较方便高效。(前提则是该接口下的所有用例均运行通过,才能进行该接口的场景测试。否则必定失败,没有测试的意义。)
2、多接口场景测试,一般只拿各个接口中的正向用例作为步骤,验证功能逻辑的准确性。如应用管理的几个接口,为了验证逻辑正常,可设计:查找应用----上传应用----安装应用----查找大屏应用----卸载大屏该应用----查看大屏应用;来完成一个逻辑功能的验证
与接口中多个接口批量执行功能基本一致。
可在多场景运行后,导出测试报告为PDF。