关于接口自动化的实施步骤
接口用例的编写:
1.单个接口的正常用例(各个参数正常各类型传值)
2.单个接口的异常用例(各个常见的错误码报错)
3.相互关联接口的组合调用(走业务流程)
4.简单验证code,msg
5.对结果进行校验,可以校验如下内容:
(1)字段有/无数据的校验
(2)返回数据的条数
(3)数据字段的类型
(4)数组长度,字典的值
---------------------------------------------------
4个阶段:
1.基本正常用例+先完成简单的验证码验证(覆盖所有接口)
2.对异常用例进行完善
3.接口之间相互调用(跑业务流程)
4.接口进行数据校验
------------------------------------------------------
接口编写原则:
1.各个用例保证独立性,不相互依赖
2.用例可以重复的跑
校验两个json是否一致:
def verify_data(resdata,expdata,ignorkey=[]): logging.info("-" * 100) logging.info("响应数据:{0}".format(resdata)) logging.info("期望数据:{0}".format(expdata)) logging.info("-" * 100) result_all = [] def compare(resdata,expdata,key): # 判断他们的类型是否相同 if type(resdata) == type(expdata): if isinstance(resdata,dict): # 判断是key否是一致 resdiff = set(resdata.keys()).difference(set(expdata.keys())) if resdiff: result_all.append(f"节点:{key} 缺少key-->{resdiff}") for k in resdata.keys(): key = k if k not in resdiff and k not in ignorkey: compare(resdata.get(key),expdata.get(key),key) elif isinstance(resdata,list): # 判断长度 if len(resdata) == len(expdata): for index,values in enumerate(zip(resdata,expdata)): compare(values[0],values[1],key+str(index)) else: result_all.append(f"节点:{key} 长度不一致-->res: {resdata}, exp: {expdata}") else: if resdata == expdata: pass # 期望值填“*” 时忽略 elif expdata == "*": pass elif resdata != expdata: result_all.append(f"节点:{key} 值不一致-->res: {resdata}, exp: {expdata}") else: if expdata != "*": result_all.append(f"节点:{key} 类型不一致-->res: {type(resdata)}, exp: {type(expdata)}") compare(resdata,expdata,key="root") if result_all: logging.error('\n'.join(result_all)) assert result_all == [] else: assert result_all == []
鸡肉是我的最爱!