pytest学习08--html报告报错截图+失败重跑
前言:
做web自动化的小伙伴应该都希望在html报告中显示失败后的截图,提升报告的档次,pytest-html也可以生成带截图的报告
conftest.py
1、失败截图可以写到conftest.py文件里,这样用例运行时,只要检测用到用例实例,就调用截图的方法,并且把截图保存到html报告上
# !/usr/bin/env python # -*-coding:utf-8 -*-
# conftest.;py文件 """ # File : conftest.py # Time :2021/11/20 14:35 # Author :author Kong_hua_sheng_25304 # version :python 3.8 # Description: """ from selenium import webdriver import pytest driver: webdriver.Chrome = None @pytest.mark.hookwrapper def pytest_runtest_makereport(item): """ 当测试失败时,自动截图,展示到html报告中 :param item: :return: """ pytest_html = item.config.pluginmanager.getplugin('html') outcome = yield report = outcome.get_result() extra = getattr(report,'extra',[]) print("type item: ",type(item)) print("type report: ",type(report)) print("extra:",extra) if report.when == 'call' or report.when == 'setup': xfail = hasattr(report,'wasfail') if (report.skipped and xfail) or (report.failed and not xfail): file_name = report.nodeid.replace("::","_")+".png" screen_img = _capter_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 def _capter_screenshot(): """ 截图保存为base64,展示到html中 :return: """ return driver.get_screenshot_as_base64() @pytest.fixture(scope='session',autouse=True) def browser(): global driver if driver is None: driver = webdriver.Chrome() return driver
# test_01.py文件 import time import pytest from selenium import webdriver def test_yoyo_01(browser): """ :type browser: webdriver.Chrome """ browser.get("https://www.cnblogs.com/yoyoketang/") time.sleep(3) t = browser.title assert t == "上海-悠悠" browser.close()
报告展示内容:
在CMD终端执行:pytest -s test_o1.py --html=report.html --self-contained-html
生成的报告如下:
失败重试:
用例失败再重测1次,命令行加个参数--rerun就可以了
pytest --reruns 2 -s test_o1.py --html=report.html --self-contained-html