Robot Framework中Should Be Equal As Numbers容差设置后测试失败的解决
解决Robot Framework中数值容差等于时测试失败的问题
问题原因
你遇到的问题本质是浮点数精度误差:十进制的0.61和0.62无法被二进制浮点数精确表示,实际计算两者差值时,结果会是0.010000000000000009这类略大于0.01的数值,导致Should Be Equal As Numbers判断差值超出容差,测试失败。
解决方案
方案1:手动计算差值并判断
绕过Should Be Equal As Numbers的浮点数精度问题,直接计算差值的绝对值,再判断是否小于等于容差:
*** Settings *** Library BuiltIn *** Test Cases *** Compare Values With Tolerance ${value1} Set Variable 0.61 ${value2} Set Variable 0.62 ${diff} Evaluate abs(${value1} - ${value2}) Should Be True ${diff} <= 0.01
方案2:使用精确十进制类型运算
利用Python的Decimal类型处理精确的十进制计算,从根源避免浮点数误差:
*** Settings *** Library BuiltIn *** Test Cases *** Compare Values With Tolerance ${value1} Evaluate from decimal import Decimal; Decimal('0.61') ${value2} Evaluate from decimal import Decimal; Decimal('0.62') ${diff} Evaluate abs(${value1} - ${value2}) Should Be True ${diff} <= Decimal('0.01')
方案3:微调容差值(临时 workaround)
如果不想修改逻辑,可以稍微放大容差值,覆盖浮点数精度带来的微小偏差:
Should Be Equal As Numbers ${value1} ${value2} tolerance=0.0100000001
内容的提问来源于stack exchange,提问作者Noah
相关产品推荐
相关产品推荐

