pytest---allure報告添加用例失敗截圖


轉:https://www.cnblogs.com/yoyoketang/p/13537355.html

 

前言

使用 selenium 做 web 自動化的時候,很多小伙伴希望用例失敗的時候能截圖,把異常截圖展示到allure報告里面。
pytest 有個很好的鈎子函數 pytest_runtest_makereport 可以獲取到用例執行的結果,所以我們在這個鈎子函數里面判斷用例失敗后截圖就可以了。
allure報告添加截圖可以使用 allure.attach 方法

失敗截圖

關於 pytest_runtest_makereport 獲取用例執行結果的鈎子函數介紹可以看前面這篇https://www.cnblogs.com/yoyoketang/p/12609871.html
在 conftest.py 文件寫用例執行的鈎子函數

import pytest
from selenium import webdriver
import os
import allure
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/


_driver = None


@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    ''' 獲取每個用例狀態的鈎子函數 :param item: :param call: :return: '''
    # 獲取鈎子方法的調用結果
    outcome = yield
    rep = outcome.get_result()
    # 僅僅獲取用例call 執行結果是失敗的情況, 不包含 setup/teardown
    if rep.when == "call" and rep.failed:
        mode = "a" if os.path.exists("failures") else "w"
        with open("failures", mode) as f:
            # let's also access a fixture for the fun of it
            if "tmpdir" in item.fixturenames:
                extra = " (%s)" % item.funcargs["tmpdir"]
            else:
                extra = ""
            f.write(rep.nodeid + extra + "\n")
        # 添加allure報告截圖
        if hasattr(_driver, "get_screenshot_as_png"):
            with allure.step('添加失敗截圖...'):
                allure.attach(_driver.get_screenshot_as_png(), "失敗截圖", allure.attachment_type.PNG)


@pytest.fixture(scope='session')
def browser():
    global _driver
    if _driver is None:
        _driver =webdriver.Chrome()
    yield _driver
    print("1111111111")
    _driver.quit()

用例運行

整個目錄結構如下

test_login.py文件內容如下

import pytest
from selenium import webdriver
import allure
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/


def test_login(browser):
    with allure.step("step1:打開登錄首頁"):
        browser.get("http://ip:6009/admin/login/?next=/admin/")
    with allure.step("step2:輸入賬號:admin"):
        browser.find_element_by_name("username").send_keys("admin")
    with allure.step("step2:輸入密碼:123456"):
        browser.find_element_by_name("password").send_keys("123456")
    # 故意斷言失敗,看是否會截圖
    assert browser.title == "悠悠"

運行用例后,截圖會存到./report 報告目錄,allure報告展示

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM