gpt4 book ai didi

python - 如何检测pytest测试用例何时失败?

转载 作者:太空狗 更新时间:2023-10-29 18:03:43 26 4
gpt4 key购买 nike

我正在使用 pytest 和 selenium 来自动化网站。我只想在测试用例失败时拍摄一些屏幕截图。我以前使用过 TestNG,对于 TestNG,使用 ITestListner 非常简单。我们在 pytest 中有类似的东西吗?

我尝试使用 teardown_method() 来实现这一点但是当测试用例失败时,这个方法不会被执行。

import sys

from unittestzero import Assert
class TestPY:
def setup_method(self, method):
print("in setup method")
print("executing " + method.__name__)

def teardown_method(self, method):
print(".....teardown")
if sys.exc_info()[0]:
test_method_name = method
print test_method_name

def test_failtest(self):
Assert.fail("failed test")

teardown_method() 只有在没有失败时才执行

最佳答案

根据你post在 stackoverflow 上,我可以分享一下我的想法,我希望它会有所帮助:眨眼:您要做的是处理标准 AssertionError 异常,该异常可以由 assert 引发 关键字或通过 unittest.TestCase 中实现的任何断言方法或者可能引发自定义异常的任何自定义断言方法。有 3 种方法可以做到这一点:

  1. 使用 try-except-finally build 。一些基本示例:

    try:
    Assert.fail("failed test")
    except AssertionError:
    get_screenshot()
    raise
  2. 或者使用with语句,作为上下文管理器:

    class TestHandler:
    def __enter__(self):
    # maybe some set up is expected before assertion method call
    pass

    def __exit__(self, exc_type, exc_val, exc_tb):
    # catch whether exception was raised
    if isinstance(exc_val, AssertionError):
    get_screenshot()


    with TestHandler():
    Assert.fail("failed test")

    here you can dive deeper on how to play with it

  3. 在我看来,最后一个是最优雅的方法。使用 decorators .使用此装饰器,您可以装饰任何测试方法:

    def decorator_screenshot(func):
    def wrapper(*args, **kwargs):
    try:
    func(*args, **kwargs)
    except AssertionError:
    get_screenshot()
    raise
    return wrapper


    @decorator_screenshot
    def test_something():
    Assert.fail("failed test")

关于python - 如何检测pytest测试用例何时失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com