天天看點

pytest進階之html測試報告pytest進階之html測試報告  

pytest進階之html測試報告  

目錄:導讀

前言

pytest-html生成報告

安裝

生成報告

效果

錯誤用例截圖

添加描述

小結

allure2生成報告

安裝allure

安裝pytest-allure-adaptor插件

生成xml格式報告

添加環境變量

運作allure生成報告

效果

總結

前言

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

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

pytest-html生成報告

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

安裝

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

pytest進階之html測試報告pytest進階之html測試報告  

驗證安裝

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

生成報告

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

效果

pytest進階之html測試報告pytest進階之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估計沒有這個子產品了)。

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

pytest進階之html測試報告pytest進階之html測試報告  

沒錯,失敗用例有了圖檔了,而且很清晰。我用例斷言的是登入失敗時的錯誤提示資訊是否正确(為了示範,我把用例裡面期望值改了),實際提示資訊是‘賬号和密碼錯誤’和‘請輸入賬号’,但是我們期望的是‘賬号和密碼錯’和‘請輸入賬’,很明顯我們的軟體是存在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進階之html測試報告pytest進階之html測試報告  

解壓

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

modify by linux超 at 2019.08.30

可以解壓到任意目錄

pytest進階之html測試報告pytest進階之html測試報告  

安裝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報告

pytest進階之html測試報告pytest進階之html測試報告  

效果

pytest進階之html測試報告pytest進階之html測試報告  

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

總結

主要内容

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

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

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

寫在最後

如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因為這将是我持續輸出更多優質文章的最強動力!

看到這篇文章的人有覺得我的了解有誤的地方,也歡迎評論和探讨~

你也可以加入下方的的群聊去和同行大神交流切磋

pytest進階之html測試報告pytest進階之html測試報告  
pytest進階之html測試報告pytest進階之html測試報告  
pytest進階之html測試報告pytest進階之html測試報告  
pytest進階之html測試報告pytest進階之html測試報告  
pytest進階之html測試報告pytest進階之html測試報告  
pytest進階之html測試報告pytest進階之html測試報告  
pytest進階之html測試報告pytest進階之html測試報告  
pytest進階之html測試報告pytest進階之html測試報告  
pytest進階之html測試報告pytest進階之html測試報告