pytest+allure报告添加用例失败截图

allure报告添加用例失败截图

前言

使用uiautomator2做app自动化测试时,希望可以在用户失败时自动添加失败截图。pytest 有个很好的钩子函数 pytest_runtest_makereport 可以获取到用例执行的结果,所以我们在这个钩子函数里面判断用例失败后截图就可以。

allure报告添加截图可以使用 allure.attach 方法

钩子函数

在 conftest.py 文件写用例执行的钩子函数

driver = None  # 定义一个全局driver对象
devices = [d.serial for d in adbutils.adb.device_list()]

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    # 什么时候去识别用例的执行结果呢?
    # 后置处理 yield:表示测试用例执行完了
    outcome = yield
    rep = outcome.get_result()  # 获取测试用例执行完成之后的结果
    if rep.when == 'call' and rep.failed:  # 判断用例执行情况:被调用并且失败
        # 实现失败截图并添加到allure附件。截图方法需要使用driver对象,想办法把driver传过来
        # 如果操作步骤过程中有异常,那么用例失败,在这里完成截图操作
        img = driver.screenshot(format='raw')
        # 将截图展示在allure测试报告上
        allure.attach(img, '断言失败截图', allure.attachment_type.PNG)

自定义实现fixture

# 自定义fixture实现driver初始化及赋值并且返回
@pytest.fixture(scope='session', autouse=True)
def init_driver():
    global driver  # global变量,相当于给上面driver = None赋值了
    if driver is None:
        driver = u2.connect(devices[0])
    return driver

用例中使用

conftest.py 不用导入,pytest在执行用例时会自动化查找。自定义实现的init_driver函数作为参数传入用例方法中。


@allure.feature('咨询模块')
class TestConsulting:
    def setup_class(self):
        self.driver = u2.connect(devices[0])
        GetUtils.pop_up_monitor(self.driver)
        self.driver.app_start(page.USER_PACKAGE_NAME)
        self.ul = ConsultingService(self.driver)

    @pytest.mark.run(order=31)
    @pytest.mark.parametrize("name", ["xx"])
    @allure.story("xxx")
    def test_consulting_service(self, init_driver, name):
        with allure.step("xxxx"):
            self.ul.psychological_counseling()
posted @ 2022-12-19 16:48  吓吾一跳  阅读(866)  评论(0编辑  收藏  举报