轉: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報告展示