接口测试是什么
个人认为接口测试就是输入参数,检验输出的正确性。简单的理解为一个接口就是一个url,可以有参数也可以没有参数,参数可以在url后面也可以在请求体里面,其实你只要理解http协议,就知道接口测试是什么了。
比如,我们有一个图书管理系统,有以下功能:
- 新增图书:通过新增图书接口,新增一条图书数据
- 查询图书:通过查询图书接口,正确过滤图书列表数据
- 更新图书:通过更新图书接口,更新图书数据
- 删除图书:通过删除图书接口,删除图书数据
从上面可以看出,用户在前端输入数据或者执行相关操作,会调用相应的接口,通过接口对后端的数据进行增删改查。
接口测试流程
需求分析阶段
- 参与需求评审会议,了解我们当前需求需要实现的具体功能,任务优先级,测试范围,上线时间等相关信息。
- 提问需求有疑惑的地方,尽量要做到心中有数。作为Test Lead,才能根据相关信息更好的分配任务,制定测试策略。
设计评审阶段
- 设计评审会议上前后端会约定好api规则,后端按照相关约定进行开发,前端只需要调用相应api获取后端数据进行展示。
- 测试需要了解api的设计规则,前端UI的表现。
- 测试需要了解不同api之间的依赖和调用关系,具体落地数据的位置。
- 熟悉系统的业务流程,画出数据业务流程图。
测试设计阶段
- 设计接口功能测试用例,正向和反向的用例,预期的输入输出,建议写成用例文件归档,便于后续的自动化接口测试,设计用例时有两个技巧:以输入为导向设计用例,以输出结果为导向设计用例
- 设计接口性能测试用例
- 设计接口兼容性测试用例
- UI和接口的交互测试(需要思考UI和接口存在重复测试的问题?)
测试执行阶段
- api文档测试,确保开发提供接口文档,检查文档内容是否正确,包括:URL,请求方法,Header,请求参数,返回值,字段描述等
- 开发提测后,并且后端代码已经部署到测试环境,可以通过postman或者swagger进行冒烟测试,冒烟测试可以对每个接口选择一条正向和反向的用例,保证每一条api都是能够运行成功,冒烟测试通过后,再对接口进行详细的功能测试
- 前端和接口的交互测试,通过抓包校验前端传参是否正确,后端返回是否符合预期,前端展示是否正确,
- 实时查看后端服务日志,Linux服务器可以通过tail命令,观察是否有error日志
- 提bug时,可以将请求和响应内容贴到bug描述中,这样开发就可以拿对应的请求直接进行调试,同时附上error日志截图,有利于开发做出判断
如何篡改测试数据
- 通过Charles & Fiddler接口工具抓包,篡改请求或者响应
- 修改数据库的数据
- 自动化测试的话可以通过第三方库,Java可以用RestAssured,WireMock,Python可以Faker等
接口功能测试要点
- 每个接口都要有正向和反向的用例
- 必填非必填
- 空参数,null
- 参数长度
- 参数范围,枚举参数,比如用户状态:激活,未激活,已删除等状态都需要遍历到
- 字符类型
- 边界值校验
- 接口返回的错误码校验
- 权限校验
- 落地数据的正确性
- 返回数据的正确性
- 安全性校验,参数加密,sql注入等
- 数据唯一性校验
- 查询数据量很大,分页查询或者只返回前多少条数据
- 逻辑校验
接口功能测试
- 查看接口文档,有哪些入参和出参,没有接口文档,直接用接口工具或者F12自己分析,厉害的可以自己看源码或者直接问开发。
- 设计测试数据,无非就是(字符类型,长度,必填非必填,前后空白格),写好预期结果是怎样
- 测试要点:接口的正常性验证,异常验证,参数组合,参数加密,篡改请求和响应等
- 验证返回结果的Response
- 提交Bug,回归测试
接口性能测试
- 单接口的基准性能
- 单接口的高并发性能
- 业务流程的高并发性能(多接口)
接口业务流程测试
比如登录购物流程:登录->选择商品->购物车->付款,假如这里面有4个接口,每个接口都有对应的依赖,那么我们需要一个全局变量来记录接口的返回值,用于后面的接口调用
Jmeter可以通过正则匹配取值用于下一个接口,也可以用Python Requests调用接口,将返回值赋值给一个关键字,下一个接口需要用到时直接调用该接口并使用它返回的关键字,可以避免接口直接的相互关联,这样代码更容易维护。
举例:
Jmeter如何使用依赖
1.选择商品接口需要用到登录接口返回的tokenid,首先调用登录接口,正则匹配取到tokenid赋值给全局变量
2.调用商品接口的时候使用这个全局变量即可
Python如何使用依赖
1.每个接口都写成一个方法,当接口A需要用到接口B的返回值时,直接先调用接口B,取出想要的值传给接口A
2.返回结果与预期结果进行对比
接口自动化测试(暂时先不展开讲)
- Python+pytest+requests框架
- Java+RestAssured+TestNG
Http协议常用状态码
200:请求返回正常
301:请求永久重定向
302:请求临时重定向
304:请求重定向至本地缓存
400:客户端请求错误
401:客户端请求没有经过授权
403:客户端请求被拒绝
404:客户端请求的资源在服务端不存在
500:服务端错误
503:服务端临时错误