一、API:
1,单个API的验证(简单)可以用pytest+tavern+yaml来验证
a,功能 :
参数为空
边界值
参数必输项
参数的类型
业务
b,安全 :请求参数有没有加密,有没有对应的密钥,有没有增加反爬虫的机制,接口是否能无限制发送请求
c,性能 :并发请求
2,外部API的验证:支付 物流 可以mockserver外部接口。
3,基于业务场景的全链路验证.
a,复杂性,基于产品形态。
b,数据怎么解决
c,业务关联性---动态参数的解决
d,业务覆盖
二、Tavern
Tavern是用于HTTP,MQTT或其他协议的基于pytest的高级API测试框架。我们为什么需要选择它,因为它具备如下的优势:
1、轻量级,简单,高效,即使你没有任何的代码基础,也是可以很轻松高效的完成API的自动化测试
2、容易编写,阅读和理解,它是基于yaml文件来编写API的测试点的,所以看起来很直观
3、可以测试基于HTTP协议以及MQTT和其他的协议
4、它的生态在不断发展和完善中
- Tavern环境:
1,pip install pyyaml
2,pip intall pytest==4.5.0
3, pip install tavern
yaml文件规范
1,区分大小写
2,缩进表示层级关系,尽量使用空格,不要使用tab
3,注释用#
4,支持的数据格式:对象键值对、数组
三、案例
from flask import Flask,jsonify
from flask_restful import Api,Resource,reqparse
app=Flask(__name__)
api=Api(app)
class LoginView(Resource):
def get(selfs):
return {'status':0,'msg':'ok','data':'this is a login page'}
def post(self):
parser=reqparse.RequestParser()
parser.add_argument('username',type=str,required=True,help='用户名不能为空')
parser.add_argument('password',type=str,required=True,help='账户密码不能为空')
parser.add_argument('age',type=int,help='年龄必须为正整数')
parser.add_argument('sex',type=str,help='性别只能是男或是女',choices=['女','男'])
args=parser.parse_args()
return jsonify(args)
api.add_resource(LoginView,'/login/',endpoint='login')
if __name__ == '__main__':
app.run(debug=True)
如何对上面的接口进行测试,创建test_login.tavern.yaml