「这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战」。
前言
从事软件测试工作,怎能不知、不会接口测试为何物,不管前端是啥(app\h5\web\小程序)凡是你肉眼所见的都是通过后台服务接口提供的数据所渲染的,那么于服务而言,它又是衔接服务(不管是系统还是模块)更好的完成业务流(通讯)及提供完整的业务数据(数据交换)。总而言之,谁也离不开接口。
什么是接口
咱们所知的接口,通常是指前端通过调用后台url,获取响应数据,渲染页面呈现出来的过程。那么这个过程里,调用后台url就可以看做是接口(API),连接前后端的通道;它是系统能力的提供者,API是接口定义的具体实现。
API接口实现
解开接口背后的秘密,它实际上是一个个的函数,由函数内部去处理相应的业务逻辑,最终将结果返回给前端渲染,然后就是我们看到的样子。
作者既然以python语言入手,那么就以其中Flask框架来演示接口的本质:
- Flask框架,写一个登录接口,然后启动服务,查看接口文档
'''
Created on 2021年5月24日
@author: qguan
'''
from flask import Flask, jsonify
from flask_restplus import Api, Resource, fields, reqparse
app = Flask(__name__)
# 接口文档头
api = Api(app, version='1.0', title='Swagger接口文档', description='用户中心',)
# 设置中文编码
app.config['JSON_AS_ASCII'] = False
# app.config['JSONIFY_MIMETYPE'] ="application/json;charset=utf-8"
# 接口
http = api.namespace('login', description='登录接口') # 模块命名空间
# 响应参数
todo = api.model('描述', { # 返回值模型
'result': fields.Integer(readonly=True, description='True of False'),
'token': fields.String(required=True, description='Return Token')
})
# 定义接口参数
parser = reqparse.RequestParser() # 参数模型
parser.add_argument('zone', type=str, required=True, help="国别码/区号")
parser.add_argument('mobile', type=str, required=True, help="手机号")
parser.add_argument('code', type=int, required=True, help="验证码")
class TodoDAO(Resource):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.params = parser.parse_args()
@http.expect(parser) # 用于解析对应文档参数,
@http.response(200, "success response", todo) # 对应解析文档返回值
def get(self):
if not all([self.params.get("zone"),self.params.get("mobile"),self.params.get("code")]):
return jsonify({"code":-1, "msg":"参数不能为空"})
if "86" not in self.params.get("zone"):
return jsonify({"code":-2, "msg":"国别码站不支持其他国家地区"})
elif len(self.params.get("mobile")) != 11:
return jsonify({"code":-3, "msg":"目前仅支持11位中国大陆手机号"})
elif len(str(self.params.get("code"))) != 4:
return jsonify({"code":-4, "msg":"验证码不正确"})
return jsonify({"code":0, "msg":"登录成功"})
http.add_resource(TodoDAO, "/ByMobile", endpoint="to_do")
if __name__ == '__main__':
app.run(debug=True)
复制代码
- 接口文档,包括请求地址、请求方法、请求参数、请求头、响应参数:
- swagger接口文档本身也支持执行接口测试(后面会有工具介绍如何做接口测试)
什么是接口测试
类比功能测试,咱在前端(app)点击某个按钮、页面功能,需要有所反馈,总不能是静止没有响应的,让人不知所措,那么它需要测试,回到接口,编码具体实现了接口的功能,但是没有测试,不知道它能提供什么样的数据(功能),同样让人不放心;所以它也需要测试。那它怎么测,它又不像客户端有可以点击的地方,这就需要通过一定的手段(工具)模拟测试。经验总结接口测试的要点:验证接口传输数据的正确性、安全性及性能,对应的就是接口功能测试、接口安全测试、接口性能测试。
为什么要做接口测试
原因呢,上面也说一点,就是它的正确性,一个没有经过测试的接口,怎么放心交给前端给到用户去使用?
- 接口放在前端那是一个一个的url地址,那么在后端它可能存在千丝万缕的关系,这就是业务关联性,简单点说,有些事情不是一个接口就能完成的,在开发架构上讲的是高内聚低耦合。
- 接口的功能比较单一,容易覆盖测试范围,更容易持续集成,减少人工回归成本和时间资源,缩短测试周期,更能有效的阻击因接口或其他接口的变动而引起的程序问题。
- 相对于前端功能而言,它又偏底层,更接近代码,如熟知的分层测试金字塔,塔尖的是UI功能测试、随之是服务层接口测试、最后是代码单元测试;从而越早测试越能发现问题,越早发现问题,那么修复它的成本就越低。




近期评论