断言的用法:在pytest中,使用assert进行断言,格式为:assert 表达式;如果表达式为True则断言成功,否则断言失败
断言使用的场景
1、新增接口add
- 响应数据里会直接返回msg:成功,还有新增id----可
以直接去断言,断言关键数据:code msg - 接口没有返回数据None code 200
1)是否有查询接口:有,直接查询的接口查询:resList:[{},{},{}很多条数据,或提交数据关键信息 in resList
2)没有查询接口或者该端没有权限去查询:需要数据库权限--Python操作数据mysql,mongodb
断言优化:涉及到log的写到日志中
pytest常见的断言类型:
断言xx是否为真:assert xx
断言xx是否不为真:assert not xx
断言相等 : assert a==b
断言包含 : assert a in b
断言不包含: assert a not in b
断言不等于 : assert a!=b
断言大于 : assert a > b
断言小于 : assert a < b
unittest的三个断言:
assertEqual(expect,result) 断言相等
assertIn(expect,result) 断言包含
assertTure(expect,result) 断言为真
在common中新建断言文件apiAssert.py
import traceback
from utils.handle_loguru import log
class ApiAssert:
@classmethod # 类方法 不需要实例化
def api_assert(cls,result,conditony,exp_result,msg='断言操作'):
# 断言结果描述--把结果放到日志中去
pass_msg = '验证通过,断言结果:预期是:,实际结果是:'
fail_msg = '验证失败,断言结果:预期是:,实际结果是:'
# 简单方案
# if condition == ‘==’:
# assert 1==1
# elif condition =='in' :
#assert 1 in [1,2,3]
try:
assert_type={
'==' : result == exp_result,
'>' : result > exp_result,
'<' : result < exp_result,
'in' : result in exp_result,
'not in' : result not in exp_result,
}
# 使用断言类型
if condition in assert_type:
assert assert_type[conditon] # 断言操作
else :
# 断言类型不存在--报错
raise ValueError('请输入正确的断言情况') # 创建异常实例--进入到excepet中去
except Exception as error:
log.error(traceback.format_exc()) # 打印详细的报错
# 在这里已经处理了异常,如果不抛出,pytest不知道,不能被统计到
raise error # 抛出异常
在case中调用:
ApiAssert.api_assert(res['msg'],'==',exp_resp['msg'])
网友评论