zoukankan      html  css  js  c++  java
  • pytest失败截图加载到html报告内

    conftest.py 里添加截图的逻辑
    # coding:utf-8
    import os
    from selenium import webdriver
    import pytest
    from common.settings import PROXY_SERVER
    
    driver = None
    
    
    @pytest.mark.hookwrapper
    def pytest_runtest_makereport(item):
        """
        当测试失败的时候,自动截图,展示到html报告中
        :param 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="600px;height:300px;" ' 
                           'onclick="window.open(this.src)" align="right"/></div>' % screen_img
                    extra.append(pytest_html.extras.html(html))
            report.extra = extra
    
    
    def _capture_screenshot():
        '''
        截图保存为base64,展示到html中
        :return:
        '''
        return driver.get_screenshot_as_base64()
    
    
    @pytest.fixture(scope='session', autouse=True)
    def browser():
        global driver
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument('--proxy-server={}'.format(PROXY_SERVER))
        if os.getenv("DOCKER") == "True":
            chrome_options.add_argument("--headless")
            chrome_options.add_argument("--disable-gpu")
            chrome_options.add_argument("--no-sandbox")
            chrome_options.add_argument("--ignore-certificate-errors")
        driver = webdriver.Chrome(options=chrome_options)
        driver.implicitly_wait(30)
        yield driver
        driver.quit()
    

      case 级别调用时

    from page_object.application.app_create import AppCreatePage
    
    
    class TestCreateApp():
    
        def 测试创建应用(self, browser):
            create_page = AppCreatePage(browser)
            create_page.open_create_app()
            create_page.create_app()
    

      这里吧driver当做一个参数传给类,方便于page object模式开发写UI自动化

  • 相关阅读:
    上传base64编码图片
    mysql
    当程序员老去 揭秘不为人知背后的辛酸故事
    Java中break的作用
    Random类
    使用dsoframer控件出现"Unable to display the inactive document. Click here to reactivate the document."的问题
    给IT新人的15个建议:苦逼程序员的辛酸反省与总结
    XML开发总结
    解决Office软件冲突问题
    PopupMenu控件的使用
  • 原文地址:https://www.cnblogs.com/hchan/p/12931563.html
Copyright © 2011-2022 走看看