pytest-rerunfailures,pytest报错
1.断言基础知识测试用例的三个要素:输入、执行条件和预期输出。
预期输出取决于断言。简单来说,就是把实际结果和预期结果进行比较。如果符合预期,测试通过;如果不符合预期,测试失败。
1.断言语法pytest不同于unittest。pytest使用python自己的assert关键字断言,unittest使用自己的断言,需要self调用。
Assert关键字后面可以跟一个表达式。只要表达式的最终结果为真,则断言通过,用例执行成功,否则用例失败。
常见格式:
断言xx:判断xx为真断言非xx:判断xx为非真断言a在b中:判断b包含aassert a==b:判断a等于bassert a!=b:判断A不等于bassert a b:判断A大于b(,=,=等。) 2.用户定义的断言失败信息。第一种:什么都不做,报告默认的错误信息,比如assert 1 = 23 :assert error:assert 1 = 23 。
第二种:用户自定义的错误信息,比如assert 1==23 , 1。‘1’不是等于23吗?故障后报告:AssertionError: 1不是等于23吗?
二。异常断言1。异常断言pytest.raisespytest.raises是上下文管理器。当它所管理的执行代码抛出我们指定类型的异常时,它可以将异常作为异常对象捕获,继续执行后续代码,而不会报错。
Pytest.raises将只捕获指定的异常类型。如果遇到其他类型的异常或者没有报错,会直接报错,导致用例执行失败。
应用场景:当某些代码块或函数会引发意外异常,导致程序无法运行时,使用raises来捕获匹配的异常,代码可以继续正常运行。
定义测试_目录01_8():
# pytest.raises将捕获AttributeError类型。如果这个错误发生在执行代码中,它将继续执行而不报告错误,对于其他类型的错误,它仍然会报告一个错误。
#常见类型:AttributeError ValueError等。BaseException(通用捕获)
使用pytest.raises(AttributeError)作为e:
raise attribute error( attribute error )#这是执行代码。
# raise ValueError(“值错误”)
打印()
Print(错误类型:,type(e.type),e.type) #错误类型:
Print(错误类型名称:,type(e.typename),e.typename) #错误类型名称:属性错误
Print(错误信息:,type(e.value),e.value) #错误信息:属性错误
assert e.type==AttributeError
assert e . typename== attribute error
# assert e . value== attribute error #这是错误的语法,type(e.value)=,是类,不是字符串,需要以下方式。
assert“属性报告了str(e.value)执行结果中的错误:用例通过。
执行过程:执行代码报告属性错误——异常管理器捕获并生成异常实例e——继续执行管理器外的其他代码。
异常的公共属性:类型、类型名、值、回溯
注意:如果异常管理的执行代码中没有预测的异常,将会报告一个错误,用例的执行将会失败。
2.异常断言定期匹配pytest.raises上下文管理器,并支持正则表达式。match参数是正则表达式,这意味着re.search()
匹配的是异常实例的值。如果异常类型匹配,并且异常信息值和re.search (expression )也匹配,则意味着发生了预期的异常。
执行结果:通过
def测试_目录01_9():
with pytest.raises(ValueError,match=r 。*\d$ )作为e:
# raise value error( value error )#这将导致用例失败:断言错误:regexpattern 。* \ \ d $ 与“值错误”不匹配。
引发ValueError(“该值被报告为错误666”)
打印()
Print(错误类型:,type(e.type),e.type) #错误类型:
Print(错误类型名称:,type(e.typename),e.typename) #错误类型名称:值错误
Print(错误信息:,type(e.value),e.value) #错误信息:值错误666
Print (error:,type (e.traceback),e.traceback) # error: []
断言e.type==ValueError
assert e.typename==ValueError
# assert e . value== attribute error #这是错误的语法,type(e.value)=,是类,不是字符串,需要以下方式。
在str(e.value) III中断言“值被报告为错误”。pytest使用xfail来处理失败。xfail的意思是将测试用例标记为预期失败,常用于测试尚未实现的功能或尚未修复的错误。
当测试被标记为预期失败时(用修饰符pytest.mark.xfail标记):
无异常,通过,测试报告显示xpass预期异常,失败,测试报告显示xfail其他异常,失败,测试报告显示failed 1 . xfail基本语法@ pytest . mark . xfail(condition=none,*,reason=none,raises=none,run=true,strict=false
Condition( bool或str)( true/false或条件字符串)将测试函数标记为xfail的条件。如果是bool,还必须指定以下原因。reason(str)——测试函数被标记为xfail的原因描述,在报告错误后会显示,相当于自定义异常提示引发(type[exception])——测试函数预计会引起的子类异常,如ValueError、TypeError等。其他人没有通过测试。run(bool)-测试函数是否被实际执行。如果为False,函数将始终为xfail,并且不会严格执行(bool)-如果测试结果为xpassed,则默认为False。如果为真,即用例没有错误,测试结果也是失败。您可以在pytest.ini配置文件中指定xfail_strict,这将对xfail的全局用例生效。如果配置文件和用例都存在,以用例中的为准。2.检查断言decorator @ py test . mark . xfail(raises= exception type )
检查是否有任何异常。有三种常见情况:
@ pytest . mark . xfaill(raises=ValueError)#检查断言装饰器并检查value error类型错误。
def测试_目录01_9():
# Case 1:出现预期错误,用例XFAIL未来不执行。
# raise value error( value error )# xfaildir 01/dir 01 _ test . py:test _ dir 01 _ 9
#案例2:发生其他错误,用例失败,不会影响用例,以后执行不会继续。
引发AttributeError(属性错误)# failed dir 01/dir 01 _ test . py:test _ dir 01 _ 9-attribute error:属性错误
#案例3:没有错误,用例XPASS
# print(我可以到这里吗?)# xpass dir 01/dir 01 _ test . py:test _ dir 01 _ 9摘要:
用pytest.raise可能更适合刻意测试异常代码@ py test . mark . xfail对于检查未修复的错误(即可能发生异常),使用check断言可能更好。3.reason自定义错误消息@ pytest . mark . xfaill(raises=value error,reason=即值错误)# check
def测试_目录01_9():
#出现预期错误,用例XFAIL将伴随失败原因的描述。
Raise ValueError(值报错)# dir 01/dir 01 _ test . py:test _ dir 01 _ 9x fail(即值报错)4 .条件用法两种用法:
#条件使用它的两种方法
# @ pytest . mark . xfaill( 11 ^ 2 ,raises=typeerror) #第一种字符串会把字符串解析成表达式,判断11 ^ 2得到bool。
# @ pytest.mark.xfaill (11 2 ,raises=typeerror) # 11 2为False,此装饰器不会生效。
@ pytest.mark.xfaill (11 2,reason= 11大于2,我生效,raises=TypeError) #第二种bool原因
def测试_函数_003():
引发类型错误( 777) # xfail
#引发AttributeError(888) #失败
#断言为真# xpassed
# assert False #失败示例:
导入系统
@ pytest . mark . xfail(sys . platform== win32 ,reason=当平台为Win32时,此用例由xfail管理,否则为常用用例)
def测试_函数_003():
assert true # xpass dir 01/dir 01 _ test . py:test _ function _ 003当平台为win32时,此用例由xfail管理,否则为常用用例。
# Assert false # xfail dir 01/dir 01 _ test . py:test _ function _ 003当平台为win32时,此用例由XFail管理,否则为常用用例。条件是:sys.platform==win32
满足条件:用例xfail将生效,如果没有错误则为XPASS,如果有错误则为XFAIL。
不合格:是没有xfail管理的普通用例。
参考菠萝
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。