Pytest agrega captura de pantalla de la operación fallida y usa CSS personalizado

Pytest agregar captura de pantalla fallida

En conftest.py, defina el método para tomar capturas de pantalla, tome capturas de pantalla automáticamente cuando falle y guarde las capturas de pantalla en la página html

from common.base_driver import BaseDriver
import pytest

driver = None

#失败自动截图,展示到html报告中
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item):
    pytest_html = item.config.pluginmanager.getplugin("html")
    outcome = yield
    report = outcome.get_result()
    extra = getattr(report, 'extra', [])

    if report.when == "call" or report.when == "setup":
        xfail = hasattr(report, 'wasxfail')
        if (report.skipped and xfail) or (report.failed and not xfail):
            file_name = report.nodeid.replace("::", "_") + ".png"
            screen_img = _capture_screenshot()
            if file_name:
                html = '<div><img src="data:image/png;base64,%s" alt="screenshot" style="width:600px;height:300px;" ' \
                       'onclick="window.open(this.src)" align="right"/></div>' % screen_img
                extra.append(pytest_html.extras.html(html))
        report.extra = extra


#截图保存为base_64,展示在html中
def _capture_screenshot():
    return driver.get_screenshot_as_base64()



#定义公共的fixture
@pytest.fixture
def common_driver():
    global driver
    driver = BaseDriver().base_driver()
    yield driver
    driver.close_app()
    driver.quit()


#定义含有toast弹框的fixture
@pytest.fixture
def common_toast_driver():
    global driver
    driver = BaseDriver().base_driver(automationName="UIAutomator2")
    yield driver
    driver.close_app()
    driver.quit()

Tenga en cuenta que en el método de modificación del dispositivo, no olvide el controlador global

Después de ejecutarse, la imagen que muestra el informe de prueba es demasiado ancha y alta, lo que hace que la imagen sea fea, por lo que debemos optimizar

CSS personalizado

Defina un directorio de activos en el directorio html_reports y copie el style.css del código fuente del complemento pytest-html a los activos en el directorio.

Use F12 para ver la ubicación de las imágenes informadas.

Modifique el estilo en el directorio img en class = "extra" .css, para hacer de este estilo la máxima prioridad, agregue!import

.extra div div img {
	width: 300px!important;
	height: 500px!important;
}

Modifique main.py, use --css, style.css路径y --self-contained-html(esto significa fusionar el estilo CSS que definimos en la página html)

import pytest
import time
from common.conf_dir import html_reports_dir

cur_time = time.strftime("%Y-%m-%d_%H-%M-%S")
pytest.main([
        #"--reruns=1",
        #"--reruns-delay=10",
        "-m", "fail",
        "--junitxml", f"{html_reports_dir}/autotest_report_{cur_time}.xml",
        "--html", f"{html_reports_dir}/autotest_report_{cur_time}.html",
        "--css", f"{html_reports_dir}/assets/style.css",
        "--self-contained-html"]
)

Efecto final

Este informe se ve mucho más hermoso ~

Artículo de referencia

"Captura de pantalla del error del informe 8-html del documento Pytest + error al volver a ejecutar "
"pytest-pytest-html genera un informe html"

Supongo que te gusta

Origin www.cnblogs.com/my_captain/p/12728012.html
Recomendado
Clasificación