pytest中的断言

python 复制代码
assert '{"deviceId":..."value":Null}' == '{"deviceId":...,"value":"0"}'
  
  Skipping 39 identical leading characters in diff, use -v to show
  - ","value":"0"}
  ?           ^^^
  + ","value":Null}

上面是pytest运行过程中,自动打印出的断言失败的日志。对应在测试场景中是在等待25秒后,从沙盒日志中获取设备的休眠状态,期望是:

复制代码
{"deviceId":"xxxxxxxxxx","dp":"149","value":"0"}

可能的状态有:

{"deviceId":"xxxxxxxxxx","dp":"149","value":"0"}、{"deviceId":"xxxxxxxxxx","dp":"149","value":"failed"}、{"deviceId":"xxxxxxxxxx","dp":"149","value":Null}

上面的日志是命中了第3种状态。基于测试场景,来分析一下断言失败的日志,首先这段断言日志是pytest的格式,虽然在pytest中断言跟python中的断言的写法一致,都是assert,但是在断言失败的错误信息上有很大的差异,pytest 断言错误信息比较详细,python中的断言错误信息只有assertionError.

上面断言错误中,

第一行:说明了assert断言失败的原因是两个JSON字符串的value字段值不一致,

第二行:前39个字符是一致的,

第三行:"-" 表示期望的值,是:","value":"0"}

第五行:"+" 表示实际的值,是:"value":Null}

第四行:"?"标志行,显示了不同之处。上方的"^^^"符号和下方的"Null"位置,表明期望值是"0",而实际值是Null。

后来又了解了一下pytest断言,整理如下:

1、pytest 中的断言和 Python 自带的 assert 语句非常相似,但 pytest 增加了一些功能,使得断言在测试中更易读和调试。

2、pytest断言会自动输出断言失败的详细信息

在纯 Python 中,assert 只在条件为 False 时抛出一个 AssertionError,并不提供条件的具体信息。而 pytest 在断言失败时,会自动捕获断言表达式中的变量值和详细的比较信息,让报错信息更直观。

3、pytest不需要使用 assert 后的消息参数

Python 原生 assert 支持可选的消息参数,用于在失败时输出自定义消息,例如 assert condition, "message".pytest 通常不需要,因为它会自动生成详细的错误消息,便于调试。

4、pytest 断言可以和插件(例如 pytest-mock, pytest.raises 等)很好地集成,支持更强大的测试功能。

5、pytest 的生态系统中有很多插件和扩展,支持更复杂的断言(如对异常、文件内容、浮点数等的检查)。

相关推荐
青少儿编程课堂10 分钟前
威佐夫博弈(双堆取子游戏)解析
c++·python·算法·bfs·信息学竞赛
hhzz31 分钟前
【OpenCV 入门到精通 03】图像入门:读取、显示、保存完全指南
人工智能·python·opencv·计算机视觉
金融小师妹2 小时前
AI趋势识别:黄仁勋宣布“AGI时代”到来,Astra能力跃迁背后的AI安全边界
大数据·python·深度学习·重构·逻辑回归
2501_941875284 小时前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享
开发语言·python
hfywmsj5 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
泡海椒7 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb8 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
sanjiaomao3338 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
linweidong10 小时前
中科闻歌Java面试题及参考答案
java·python·大模型·提示词·ai agent·mcp·rag原理
小玮看世界11 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法