簡述
使用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> </td><td> </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> </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博客地址:聲明:本文已獲作者授權轉載,著作權歸作者所有。