pytest進階之html測試報告


前言

  Pytest系列已經寫了幾篇文章了,也不知道對多少人有幫助,總之對於我自己來說該掌握的都已經掌握了,那么今天我們再來說說pytest如何生成一個完整的html測試報告,讓你在吹牛逼的路上再多一份資本!廢話不多說,進入正題!(咋就莫名其妙想起這句話了呢, 估計看文章看多了,貌似挺多人用這句話過度……)

使用pytest-html插件生成測試報告

pytest-html生成報告

pytest是借助pytest-html插件生成測試測試報告, 不用自己編寫生成報告代碼。github源碼地址 https://github.com/pytest-dev/pytest-html

安裝

與安裝python第三方庫一樣使用pip命令->pip install pytest-html,我這邊是已經安裝好了的,所以你看到的輸出信息可能和我的不太一樣

驗證安裝

使用pip list 可以查看是否有pytest-html,如果有表示已經安裝成功

生成報告

使用命令 pytest --html=reportname.html (這里的參數是測試報告的名稱,注意前面是兩個橫杠)我們嘗試一下 !

效果

可以看到這個報告還是挺不錯的,比unittest那個報告炫了很多!每一個case都可點開查看具體的運行信息! 好了,大家可能發現你生成的測試報告和我這個貌似有哪里不一樣?是的,沒錯,我這里多了描述信息你那里好像不存在,先不急。

錯誤用例截圖

通常,我們希望測試用例失敗的時候能夠截取一張圖片,這樣我們可以知道哪里出了問題或者出現問題的大概位置,方便我們調試代碼或者分析軟件的bug,那么又該如何在這一份報告里面插入截圖呢?

上篇文章我們提到了conftest.py文件,那么我們現在就可以把失敗截圖的代碼放到這個文件里面了(為什么放在這里,我想學會的同學應該知道,不知道的看前面文章吧),看具體代碼!

import pytest
from selenium import webdriver
from py._xmlgen import html

_driver = None
# 測試失敗時添加截圖和測試用例描述(用例的注釋信息)

@pytest.mark.hookwrapper
def pytest_runtest_makereport(item):
    """當測試失敗的時候,自動截圖,展示到html報告中"""
    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

def _capture_screenshot():
    '''截圖保存為base64'''
    return _driver.get_screenshot_as_base64()

@pytest.fixture(scope='module')
def driver():
    global _driver
    print('------------open browser------------')
    _driver = webdriver.Firefox()

    yield _driver
    print('------------close browser------------')
    _driver.quit()

 注意這個模塊from py._xmlgen import html,我們網上看到大多數是使用 from py.xml import html,我使用這個模塊時會報錯,所以換成現在這個模塊了(估計和python版本有關系,我用的3,3估計沒有這個模塊了)。

好了, 現在我們在來執行一下我們的測試用例

沒錯,失敗用例有了圖片了,而且很清晰。我用例斷言的是登錄失敗時的錯誤提示信息是否正確(為了演示,我把用例里面期望值改了),實際提示信息是‘賬號和密碼錯誤’和‘請輸入賬號’,但是我們期望的是‘賬號和密碼錯’和‘請輸入賬’,很明顯我們的軟件是存在bug的,一目了然!是不是很實用……接下來我們再來看看如何添加描述信息的。

添加描述

正常情況下,我們的報告是沒有描述信息這一項的,所以我們只能通過添加代碼來實現了(描述信息就是我們用例函數上方的注釋信息)。通過官方的文檔說明,我們知道是可以添加和刪除報告的table表的

我們在上面的代碼 report.extra = extra 后面添加這樣一行代碼

report.description = str(item.function.__doc__)

並在文件中添加這兩個方法

@pytest.mark.optionalhook
def pytest_html_results_table_header(cells):
    cells.insert(1, html.th('Description'))

@pytest.mark.optionalhook
def pytest_html_results_table_row(report, cells):
    cells.insert(1, html.td(report.description))

 我們可以試着再次運行我們的測試用例,看看報告效果應該就和我的一樣了。

小結

大家可以把代碼寫一遍然后自己試試,是否會得到我們想要的報告,其實這篇文章並沒有詳細講解代碼編寫過程,也沒有詳細說明哪段代碼是用來干什么的,因為這些代碼就是個模板,也是通用的,所以大家保存下來即可,以后編寫項目的時候直接哪里用就可以了(作為一個python程序員,終極思想就是能簡化就簡化,能簡單寫代碼就簡單寫代碼,能copy就copy,嗯,就是這樣!)

allure2生成報告

這個就厲害了,我本人覺得這個工具真的是超級牛逼,生成的報告也超級炫酷。實際上它是一個report框架,支持各種語言的各種測試框架,而且可以集成到jenkins上使用

安裝allure

github上下載最新版本https://github.com/allure-framework/allure2/releases

解壓

下載完后解壓到我們項目根目錄下,也就是需要運行pytest代碼的目錄下。下面是我的項目根目錄

modify by linux超 at 2019.08.30

可以解壓到任意目錄

安裝pytest-allure-adaptor插件

pip install allure-pytest

生成xml格式報告

在我們需要運行用例的目錄下執行 pytest -s -q --alluredir ./report(當前目錄下的report文件夾,這個文件夾名字,可以自己指定位置,不指定默認生成在當前目錄下)

添加環境變量

把allure-2.10.0\bin目錄添加到環境變量,當然你也可以不添加,我們添加環境變量的目的是可以在任意位置執行bin目錄下allure.bat腳本

運行allure生成報告

前面我們已經通過這個命令pytest -s -q --alluredir report 生成了xml格式的報告,保存在了report下,接着我們執行命令allure generate report/ -o report/html,第一個report就是指定之前xml報告的目錄,后面的report也可以自己指定在哪個目錄生成最終的html報告,我們按下面的路徑找到我們的報告,看下生成的報告效果

modify by linux超 at 2019.08.30

注意:report目錄不能相同,必須指定一個空的目錄生成最后的html報告

效果

這個報告看起來真的很炫酷,而且左邊的菜單都可以點開,里面記錄了們的用例執行的情況,好了大家試試吧!

總結

主要內容

1.pytest-html插件生成測試報告,及用例失敗時如何截取圖片添加到報告里,如何添加用例描述到報告里

2.如何使用allure生成測試報告

以上兩種生成測試報告的方式,希望可以幫到大家,並把這些技能運用到我們實際的工作當中!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM