【pytest】自带的测试报告之Hook钩子函数追加测试执行人/时间/错误截图

前言:pytest框架本身就提供了一个html测试报告的模板,而且使用也非常简单,只是简单的同时,报告上一些要素就会不足。但是我们也可以通过Hook函数追加一些关键信息,所以追求完美的你,一定不会错过下面的追加内容的 👀。

目录

一、生成html测试报告

二、添加测试人

三、添加测试执行时间

四、添加错误截屏


一、生成html测试报告

  1. 首先需要导入一个类库:pytest--html
  2. 然后打开Terminal,执行命令:pytest --html=XXX.html,在当前脚本所在文件中即可生成一个最简单的html测试报告。

报告1.0版本如下:

二、添加测试人

  1. 在框架根目录下创建一个conftest.py文件,我们需要将追加内容放在这个文件下,以便使其对所有报告都生效。
  2. 追加内容要使用optionalhook标签,同时这里还需要再导入一个类库 from py.xml import html。
  3. 在conftest.py文件中添加命令如下:
  4. from py.xml import html
    import pytest
    
    
    # 在html测试报告中添加测试人信息
    @pytest.mark.optionalhook
    def pytest_html_results_summary(prefix, summary, postfix):
        prefix.extend([html.p("测试人: Tom")])
  5.  添加好之后还是回到之前运行命令的地方,命令不变:pytest --html=XXX.html

报告2.0版本如下,多了一个测试人:

三、添加测试执行时间

  1. 同样进入conftest.py文件进行追加内容,可以和前面的内容共存的。我这就不写在一起了以免看的太乱了
  2. 使用使用optionalhook标签,并导入time类库,追加命令如下:
  3. import time
    import pytest
    
    
    # 在html测试报告中添加测试执行时间
    @pytest.mark.optionalhook
    def pytest_html_results_table_row(report, cells):
        cells.insert(1, html.td(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), class_='col-time'))
        cells.pop()
  4. 添加好之后还是回到之前运行命令的地方,命令不变:pytest --html=XXX.html

报告3.0版本如下,多了测试时间:

四、添加错误截屏

  1. 同样进入conftest.py文件进行配置
  2. 因为要用到selenium的截屏方法,所以要导入selenium的类库,同时这边的标签也变成了hookwrapper了,具体命令如下:
  3. import pytest
    from selenium import webdriver
    
    # 定义全局的driver变量
    driver = None
    
    
    # 设置一个browser固件
    @pytest.fixture(scope='session', autouse=True)
    def browser():
        global driver
        if driver is None:
            driver = webdriver.Chrome()
        return driver
    
    
    # 定义截屏方法
    def _capture_screenshot():
        return driver.get_screenshot_as_base64()
    
    
    # 定义添加错误图片的钩子函数
    @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="width:600px;height:300px;" ' \
                           'onclick="window.open(this.src)" align="right"/></div>' % screen_img
                    extra.append(pytest_html.extras.html(html))
            report.extra = extra
  4. 但美中不足的是,如果要使用添加错误截屏方法,就会导致pytest不支持初始化方法和回收方法,一些代码重用的问题就没法避免了。同时我们之前定义的driver也不能使用了,一定要使用它提供的browser方法。所以测试方法修改如下:
  5. # Django自动化测试平台selenium自动化测试脚本--pytest封装
    # 功能名称:登录
    import pytest
    # from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    
    # 1、创建测试类
    class Test_Django_Login():
        # 2、创建测试方法
        # 登录初始化
        # def setup_method(self):
        #     self.url = "http://xxxxxxxxxxxxxxxxxxxxxxxx"
        #     self.driver = webdriver.Chrome()
        #     self.driver.get(self.url)
    
        def test_login_01(self, browser):
            self.url = "http://xxxxxxxxxxxxxxxxxxxxxxxxxx"
            browser.get(self.url)
            browser.find_element(By.NAME, "username").send_keys('atstudy1')
            browser.find_element(By.NAME, "password").send_keys('51testing')
            browser.find_element(By.XPATH, '//*[@id="login-form"]/div[3]/input').click()
            # # 统一检查点
            result = browser.find_element(By.XPATH, '//*[@id="content"]/p').text
            # 3、通过断言进行判断
            assert "请输入11" in result
    
    if __name__ == '__main__':
        pytest.main(['test_login.py', '--html=loginReport.html'])
  6.  还是进入命令台运行之前的命令。main方法我运行之后不知道怎么就是没法生成测试报告,就不纠结了。

报告3.0版本如下,多了报错截图,包括代码截图以及网页截图:

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BetterFate!

爱你哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值