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注意這個模組from py._xmlgen importhtmlpytest
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.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...