pytest高階之html測試報告

2022-02-26 14:22:30 字數 4544 閱讀 8450

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

使用pytest-html外掛程式生成測試報告

pytest是借助pytest-html外掛程式生成測試測試報告, 不用自己編寫生成報告**。github原始碼位址

與安裝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

#測試失敗時新增截圖和測試用例描述(用例的注釋資訊)

defpytest_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

notxfail):

file_name = report.nodeid.replace("

::", "

_")+"

.png

"screen_img =_capture_screenshot()

iffile_name:

html = '

\

'onclick="window.open(this.src)" align="right"/>

' %screen_img

report.extra =extra

def_capture_screenshot():

'''截圖儲存為base64

'''return

_driver.get_screenshot_as_base64()

@pytest.fixture(scope='

module')

defdriver():

global

_driver

print('

------------open browser------------')

_driver =webdriver.firefox()

yield

_driver

print('

------------close browser------------')

_driver.quit()

注意這個模組from py._xmlgen importhtml

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

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

沒錯,失敗用例有了了,而且很清晰。我用例斷言的是登入失敗時的錯誤提示資訊是否正確(為了演示,我把用例裡面期望值改了),實際提示資訊是『賬號和密碼錯誤』和『請輸入賬號』,但是我們期望的是『賬號和密碼錯』和『請輸入賬』,很明顯我們的軟體是存在bug的,一目了然!是不是很實用……接下來我們再來看看如何新增描述資訊的。

正常情況下,我們的報告是沒有描述資訊這一項的,所以我們只能通過新增**來實現了(描述資訊就是我們用例函式上方的注釋資訊)。通過官方的文件說明,我們知道是可以新增和刪除報告的table表的

我們在上面的** report.extra =extra

後面新增這樣一行**

report.description = str(item.function.__doc__)
並在檔案中新增這兩個方法

@pytest.mark.optionalhook

defpytest_html_results_table_header(cells):

cells.insert(1, html.th('

description'))

@pytest.mark.optionalhook

defpytest_html_results_table_row(report, cells):

cells.insert(1, html.td(report.description))

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

大家可以把**寫一遍然後自己試試,是否會得到我們想要的報告,其實這篇文章並沒有詳細講解**編寫過程,也沒有詳細說明哪段**是用來幹什麼的,因為這些**就是個模板,也是通用的,所以大家儲存下來即可,以後編寫專案的時候直接**用就可以了(作為乙個python程式設計師,終極思想就是能簡化就簡化,能簡單寫**就簡單寫**,能copy就copy,嗯,就是這樣!)

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

解壓modify by linux超 at 2019.08.30

可以解壓到任意目錄

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

把allure-2.10.0\bin目錄新增到環境變數,當然你也可以不新增,我們新增環境變數的目的是可以在任意位置執行bin目錄下allure.bat指令碼

前面我們已經通過這個命令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生成測試報告

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

Python測試框架之pytest高階用法(六)

pytest showlocals show local variables in tracebacks pytest l show local variables shortcut pytest tb auto default long tracebacks for the first and l...

pytest 生成測試報告 HTML

每個自動化測試結果都要有乙份詳細的測試報告來呈現,今天測試報告來了,pytest常用的測試報告有幾種,比如在pycharm中直接生成報告,通過html外掛程式生成,或者還有最常用的allure。今天安靜主要介紹通過pytest的外掛程式pytest html來生成測試報告 pytest html屬於...

pytest之指定測試範圍

本文總結如何指定pytest當次執行的覆蓋範圍。總體來說,可以指定執行單個測試目錄,單個檔案,單個測試類,單個測試類中的方法,單個函式。而這些指定僅和乙個引數有關。首先看示例程式的目錄結構 以示例說明 指定執行單個測試目錄 pytest.main test case 指定執行單個測試檔案 pytes...