如何在pytest失败时仅显示AssertException而非TimeoutException
简洁解决方法
直接在except块里主动抛出AssertionError,加上from None切断原异常的上下文关联,这样pytest就只会显示AssertionError的信息,不会输出原异常的栈日志,同时测试会正常标记为失败:
try: el = WebDriverWait(wd, 10).until(EC.presence_of_element_located((By.XPATH, "//textarea[@name='claims']"))) except (NoSuchElementException, TimeoutException): raise AssertionError("passportmock not working") from None
说明
- 原来的
assert False会触发AssertionError,但Python默认会把捕获到的TimeoutException/NoSuchElementException作为这个错误的上下文保留,pytest就会同时打印两个异常的栈信息。加from None就是明确告诉Python不要保留原异常的上下文,只展示我们抛出的AssertionError。 - 这种写法不需要额外变量,代码更简洁。另外你之前用
pytest.exit()不行的原因是,它会直接终止整个pytest进程,而非标记当前测试用例失败,所以测试状态会显示为成功。
内容的提问来源于stack exchange,提问作者MortenB
相关产品推荐
相关产品推荐

