Python自定義HtmlTestRunner測試報告

2021-01-10 開源優測

簡述

使用selenium webdriver + Python做自動化測試,執行完成後要生成測試報告,Python我們使用的HTMLtestrunner 進行生成,但是默認提供的生成報告內容,並不能滿足我們的需求,怎麼才能讓測試報告數據更清晰,內容更豐富呢。對於一些人來說,可能已經重寫了報告生成方式,放棄使用HTMLtestrunner。但是對於python小白可能還做不到,只能用現有東西進行展示,那麼下面簡單介紹通過修改HTMLtestrunner去實現想要的內容。

先通過兩張圖片對比一下我們將要實現的功能:

圖表 1

圖表 2

如圖所示,圖表1是原始樣式輸出,圖表2是修改後樣式輸出。通過對比我們可以看到,圖表2比圖表1多了首位部的兩列。我在第一行加caseid,用來記錄用例的編號,最後一列,添加了每一個用例執行過程中關鍵步驟的截圖快照。

這樣做的好處:

有了用例編號我們可以通過用例ID進行對用例的定位,尤其是對失敗用例的定位。有了用例執行過程中關鍵位置截圖快照,對於失敗或者出錯異常的用例,在無人值守情況下進行執行用例時,可以進行界面追蹤。實現

下面來介紹怎麼實現的,首先先說一下我實現的思路。對於這個我們的測試報告而言,我只想調整一下他的展示樣式,豐富兩列內容。所以先去想怎麼去把他的樣式給修改了。然後再往修改後的樣式表格裡面添加數據。

也就是分兩步做:

1改樣式

2加數據

改樣式

改樣式,這裡只需要會基礎的HTML <table>中行、列標識就可以了。

我們要在界面中加兩列,那麼很簡單,就是加兩個<td></td>就可以了。

看源碼部分:

從395行左右開始就是存儲HTML代碼展示的部分,找到table標籤和第一行列頭展示內容。

腳本片段1:

REPORT_TMPL = 「」」 …… 「」」 代碼段裡面包含了<table>的結構內容

如:

<tableid="result_table"><colgroup><colalign="left"/><colalign="right"/><colalign="right"/><colalign="right"/><colalign="right"/><colalign="right"/></colgroup><trid="header_row"><tdcolspan="2">Test Group/Test case</td><td>Count</td><td>Pass</td><td>Fail</td><td>Error</td><td>View</td><td>Screenshot</td></tr>%(test_list)s <trid="total_row"><tdcolspan="2">Total</td><td>%(count)s</td><td>%(Pass)s</td><td>%(fail)s</td><td>%(error)s</td><td>&nbsp;</td><td>&nbsp;</td></tr></table>

table標籤中的第一個<tr>就是第一行,<tr>中的每一個<td></td>代表一列。標籤中間的文本是直接顯示在界面的。

<trid='header_row'> //這裡添加colspan='2' 是合併2個列。 //因為下面的行中的caseid需要佔一列, //但是標題列頭部分顯示是一個整體,所以做了合併 <tdcolspan='2'>Test Group/Test case</td><td>Count</td><td>Pass</td><td>Fail</td><td>Error</td><td>View</td><td>Screenshot</td> //圖片快照的列頭標題</tr>腳本片段2:

REPORT_CLASS_TMPL = 「」」 … 「」」代碼段 是 展示calss的行,可以叫做測試模塊的類,它是單獨放在一行中的,每個模塊一行。因為要跟上面的第一行標題中的列數對應,所以修改如下:

<trclass='%(style)s'> //添加的caseid 的標題,這一行不在主列頭, //而是放在測試模塊用例統計所在的行裡面。 <td>case_id</td><td>%(desc)s</td><td>%(count)s</td><td>%(Pass)s</td><td>%(fail)s</td><td>%(error)s</td><td><ahref="javascript:showClassDetail('%(cid)s',%(count)s)">Detail</a></td><td>&nbsp;</td> //保持列數統一,加入空白列</tr>腳本片段3:

REPORT_TEST_WITH_OUTPUT_TMPL = 「」」 … 「」」 是測試用例展示部分代碼,這段內容是展開測試模塊後進行顯示的

REPORT_TEST_WITH_OUTPUT_TMPL = r"""<trid='%(tid)s'class='%(Class)s'> // %(caseid)s 是python轉譯html代碼中變量替換方式。// caseid 會在python腳本中定義。 <tdalign='center'>%(caseid)s</td><tdclass='%(style)s'><divclass='testcase'>%(desc)s</div></td><tdcolspan='5'align='center'><!--css div popup start--><aclass="popup_link"onfocus='this.blur();'href="javascript:showTestDetail('div_%(tid)s')"> %(status)s </a><divid='div_%(tid)s'class="popup_window"><divstyle='text-align: right;color:red;cursor:pointer'><aonfocus='this.blur();'onclick="document.getElementById('div_%(tid)s').style.display ='none'"> [x]</a></div><pre>%(script)s</pre></div><!--css div popup end--></td><tdalign='center'><ahref="%(image)s"title="%(image)s"> //這一列內容加入圖片快照的連結訪問路徑 %(image)s 中替換連結地址 <imgsrc="..\data\img.png"height=20width=20border=0/></a> //連結圖標 </td></tr>

單從HTML界面樣式展示來看,上面所有代碼段中修改都是在每個<tr>加入兩個<td></td>。

這樣我們的樣式就改完了。然後開始加入數據。

加數據

先想一下我們要加什麼數據.從樣式中看我們增加了兩個列,那麼有兩列的數據是需要增加的,具體加什麼呢?想一下?我們在改樣式的時候加的兩個列中使用到了變量,那麼變量取值是需要實現的。那麼首先定義變量。

定義報告輸出兩個變量的取值,放在 REPORT_TEST_OUTPUT_TMPL定義的下面:

腳本片段4:

REPORT_TEST_OUTPUT_TMPL = r"""%(id)s: %(output)s"""<!--添加內容-->REPORT_TEST_OUTPUT_IMAGE = r"""%(screenshot)s"""REPORT_TEST_OUTPUT_CASEID = r"""%(case_id)s"""

然後找到 _generate_report_test 函數,在這個函數中定義我們要替換html變量,並實現變量的取值。

腳本片段5:

<!—在原有的script下面分別添加caseid和image變量並賦值,此處不用在意為什麼怎麼實現的,這麼用就對了,script內容展示的其實就是我們case執行時 控制臺輸出的內容 所以如果你想獲取自己在case中print出來的數據就這麼做-->

script = self.REPORT_TEST_OUTPUT_TMPL % dict( id = tid, output = saxutils.escape(uo+ue), ) image = self.REPORT_TEST_OUTPUT_IMAGE % dict( screenshot = saxutils.escape(uo+ue)) caseid = self.REPORT_TEST_OUTPUT_CASEID % dict( case_id = saxutils.escape(uo+ue) ) <!—html中替換的字符串變量進行詳細取值--> row = tmpl % dict( tid = tid, Class = (n == 0 and'hiddenRow'or'none'), style = n == 2 and'errorCase'or (n == 1 and'failCase'or'none'), desc = desc, script = script, <!—因為獲取內容都是字符串,所以只需要進行字符串截取就可以了--> image = image[image.find("image"):(int(image.find("png"))+3)], caseid = caseid[caseid.find("case"):(int(caseid.find("case"))+9)], status = self.STATUS[n],)

上面 image 、caseid 字符串截取位置跟我在控制臺輸出的內容有關係,所以不是通用的,需要自行修改。字符串截取的方式就不講了,方式很多種找自己合適的熟悉的就行。

至此修改HTMLtestrunner生成報告模板就修改結束,我的這個方式或許不是你想要的,不是你想展示的,希望能在思路上幫你去解決你的問題。

另:有朋友問能不能內容顯示成中文的,看明白了上面內容我想中文的顯示就不是什麼問題了。直接改HTML標籤中顯示的英文內容翻譯為中文就可以了。

作者: Ray博客地址:聲明:本文已獲作者授權轉載,著作權歸作者所有。

相關焦點

  • 乾貨丨Python接口測試自動化實戰及代碼示例:含get、post等方法
    /test_results'if not os.path.exists(path):os.makedirs(path)report_path = result_path + '/' + currentTime + "_report.html"reportTitle = '測試報告'desc = u'測試報告詳情'with
  • Python接口測試自動化實戰及代碼示例:含Get、Post等方法
    最終選定 python 作為腳本開發語言,使用其自帶的 requests 和 urllib 模塊進行接口請求,使用優化後的 unittest 測試框架編寫測試接口函數,測試結果選用 HTMLTestRunner 框架予以展示,並使用 python 的 ssl 模塊支持 https 協議的驗證。接下來,我詳細地介紹這些模塊,並給出各個模塊完整的測試代碼。
  • Unittest——Python必會的單元測試框架
    >UnittestTextReport.txt,所有的執行報告均輸出到了此文件中,這下我們便有了txt格式的測試報告了。)Time Elapsed: 0:00:00.001000並且輸出了HTML測試報告,HTMLReport.html,如圖:
  • Python Selenium設計模式-POM
    前言本文就python selenium自動化測試實踐中所需要的POM設計模式進行分享,以便大家在實踐中對POM的特點、應用場景和核心思想有一定的理解和掌握。為什麼要用POM基於python selenium2開始UI級自動化測試並不是多麼艱巨的任務。**只需要定位到元素,執行對應的操作即可。
  • Python接口自動化測試的實現
    在我們項目的初期,我們採用的是jmeter進行接口測試,當時覺得這個工具上手簡單,團隊成員學習成本低,並且接口測試的腳本稍微調整一下還可以用來做性能測試。  本文主要採用python語言,python中http協議接口相關的庫有urllib,urllib2以及reqeusts庫,這其中reqeusts庫用來起來最方便,因此我也主要採用requests庫來做http協議的接口測試。
  • 軟體測試學習教程:單元測試之UnitTest測試框架
    能夠生成HTML格式的測試報告4.測試腳本執行完後,可以生成以 HTML( 網頁 ) 格式的測試報告為什麼要生成測試報告: 測試報告是本次測試結果的體現形態測試報告內包含了有關本次測試用例的詳情生成測試套件suite = unittest.TestSuite() suite.addTest(TestAdd("test_01"))4. 設置報告生成路徑和文件名 file_name = "./report/report.html"5.
  • 簡單易懂:Python unitTest 框架基礎應用
    的標準的單元測試框架,能夠很好的和自動化測試相結合,並有獨立的測試報告框架。test suite測試套件,一系列測試用例或測試套件的集合。在 unittest 中由 TestSuite 類實現。test runner測試執行器,負責用例執行並生成測試報告,在 unittest 中提供了命令行模式和 GUI 模式來執行。
  • python 如何使用HttpRunner做接口自動化測試
    接口自動化主流方案包含:python + Pytest/Unittest、Java + TestNG、Postman、HttpRunner、Postman、Jmeter、RobotFramework 等本篇文章將和大家一起聊聊 HttpRunner 做接口自動化的流程2.介紹及安裝HttpRunner 是一款完全由 Python 語言編寫的測試框架
  • Airtest使用詳解
    Airtest是網易開源的一個跨平臺的UI自動化測試框架。 該項目分為AirtestIDE、Airtest、Poco、Testlab四個部分,基於python腳本的方式,用於web、windows程序、app自動化測試。
  • python項目實踐分享,代碼bug的剋星,單元測試必不可少
    幸好後來Python社區出現了一些測試套件,提供約定和通用標準,後面逐漸演變為流行的測試框架。在單元測試方面常 見的測試框架有PyUnit等,它是Kent Beck和Erich Gamma所設計的JUnit的Python版本, 在Python名為imittesL它支持單元測試自動化,可以共享地進行測試環境的設置和清理,支持測試用例的聚集以及獨立的 測試報告框架。
  • 基於 Python 項目的 GitLab-CI 演示
    ;description for this runner:[Double-dong.local]: gitlab-ciPlease enter the gitlab-ci tags for this runner (comma separated):python3.4Registering
  • 如何修改pytest-html源碼來優化接口自動化測試報告
    如何修改pytest-html源碼來優化接口自動化測試報告以前常用unittest做接口自動化測試,後來想獲取單個接口的響應時間,便採用pytest單元測試框架。雖然獲得的時間不太準確。因為pytest測試報告的時間是從一個用例開始到結束,其中包括了斷言,所以實際時間比響應時間略長。
  • 全功能Python測試框架:pytest
    python通用測試框架大多數人用的是unittest+HTMLTestRunner,這段時間看到了pytest文檔,發現這個框架和豐富的plugins很好用,所以來學習下pytest.,容易上手支持參數化能夠支持簡單的單元測試和複雜的功能測試,還可以用來做selenium/appnium等自動化測試、接口自動化測試(pytest+requests)pytest具有很多第三方插件,並且可以自定義擴展,比較好用的如pytest-selenium(集成selenium)、pytest-html(完美html測試報告生成)、pytest-rerunfailures
  • 使用Pytest創建一個Python測試自動化項目
    自然地,Python還是測試自動化的最好的語言。它的簡潔性使測試人員可以將更多的精力放在測試上,而不必在代碼上。未完成大量編程工作的測試人員往往比其他語言(如Java或C#)學習Python的速度更快。Python非常適合啟動測試!什麼是pytest?任何功能測試自動化項目的核心都是「核心」測試框架。該框架處理測試用例結構,測試執行以及通過/失敗結果報告。
  • 360瀏覽器HTML5Test測試成績國內第一
    業界公認的HTML5支持度權威測試平臺,本月15日更新測試規則後,對瀏覽器要求更加嚴格。從結果來看,360安全瀏覽器6.0超速版和360極速瀏覽器,均以465分的最高分懸念的位居首位,高於國內其他瀏覽器產品(所有均為主站下載最新版)。
  • Pytest環境準備與入門「樂搏TestPRO」
    pytest 簡介pytest是python的一種單元測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,效率更高。▶支持運行由nose, unittest編寫的測試case▶可生成html報告▶方便的和持續集成工具jenkins集成▶可支持執行部分用例
  • python 如何使用HttpRunner做接口自動化測試
    前言原始測試金子塔包含 3 層,分別是:UI 自動化測試、接口服務測試、單元測試其中,單元測試是對軟體的最小可測試單元進行檢查和驗證,也是產生效率最大的一項測試接口服務測試分為模塊接口測試和協議接口測試UI 測試主要是為了取代人力操作,通過 UI 自動化去模擬操作,降低回歸測試的成本考慮到投入產出率,大部分企業都會將測試重點放在接口自動化測試這一項上接口自動化主流方案包含:python +
  • Android自動化測試之Monkeyrunner從零開始
    由於之前我學過一點點關於android的東西,並且目前android開發方興未艾如火如荼,但自動化測試還基本上屬於新興領域,接觸的人並不多,所以我給我們團隊提出研究android自動化測試方面的項目,果然得到大家一致的贊同,大家的興致都很高,呵呵。於是二話不說,我們開始看看現在android平臺上現有的一些自動化測試工具。
  • Python基礎語法(Python自動化測試入門1)
    install pillow2.卸載包:pip uninstall 庫名比如我要卸載pillow這個包pip uninstall pillow3.升級包:pip install -u 庫名4.查看當前版本:pip --versionpip 20.2.3 from c:\users\administrator\appdata\local\programs\python
  • 自動化測試工具Selenium+Python的簡單介紹
    Selenium是一個用於Web應用程式測試的工具,Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。Python則是強大的腳本語言,已廣泛地應用於自動化測試中。本文簡單介紹一下Selenium和Python的使用。