使用selenium webdriver + Python作自動化測試,執行完成後要生成測試報告,Python咱們使用的HTMLtestrunner 進行生成,可是默認提供的生成報告內容,並不能知足咱們的需求,怎麼才能讓測試報告數據更清晰,內容更豐富呢。對於一些人來講,可能已經重寫了報告生成方式,放棄使用HTMLtestrunner。可是對於python小白可能還作不到,只能用現有東西進行展現,那麼下面簡單介紹經過修改HTMLtestrunner去實現想要的內容。javascript
先經過兩張圖片對比一下咱們將要實現的功能:css
圖表 1html
圖表 2java
如圖所示,圖表1是原始樣式輸出,圖表2是修改後樣式輸出。經過對比咱們能夠看到,圖表2比圖表1多了首位部的兩列。我在第一行加caseid,用來記錄用例的編號,最後一列,添加了每個用例執行過程當中關鍵步驟的截圖快照。python
這樣作的好處:web
下面來介紹怎麼實現的,首先先說一下我實現的思路。對於這個咱們的測試報告而言,我只想調整一下他的展現樣式,豐富兩列內容。因此先去想怎麼去把他的樣式給修改了。而後再往修改後的樣式表格裏面添加數據。函數
也就是分兩步作:測試
1改樣式this
2加數據spa
改樣式,這裏只須要會基礎的HTML <table>中行、列標識就能夠了。
咱們要在界面中加兩列,那麼很簡單,就是加兩個<td></td>就能夠了。
看源碼部分:
從395行左右開始就是存儲HTML代碼展現的部分,找到table標籤和第一行列頭展現內容。
REPORT_TMPL = 「」」 …… 「」」 代碼段裏面包含了<table>的結構內容
如:
<table id='result_table'> <colgroup> <col align='left' /> <col align='right' /> <col align='right' /> <col align='right' /> <col align='right' /> <col align='right' /> </colgroup> <tr id='header_row'> <td colspan='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 <tr id='total_row'> <td colspan='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>表明一列。標籤中間的文本是直接顯示在界面的。
<tr id='header_row'> <td colspan='2'>Test Group/Test case</td> //這裏添加colspan='2' 是合併2個列。由於下面的行中的caseid須要佔一列,可是標題列頭部分顯示是一個總體,因此作了合併 <td>Count</td> <td>Pass</td> <td>Fail</td> <td>Error</td> <td>View</td> <td>Screenshot</td> //圖片快照的列頭標題 </tr>
REPORT_CLASS_TMPL = 「」」 … 「」」代碼段 是 展現calss的行,能夠叫作測試模塊的類,它是單獨放在一行中的,每一個模塊一行。由於要跟上面的第一行標題中的列數對應,因此修改以下:
<tr class='%(style)s'> <td>case_id</td> //添加的caseid 的標題,這一行不在主列頭,而是放在測試模塊用例統計所在的行裏面。 <td>%(desc)s</td> <td>%(count)s</td> <td>%(Pass)s</td> <td>%(fail)s</td> <td>%(error)s</td> <td><a href="javascript:showClassDetail('%(cid)s',%(count)s)">Detail</a></td> <td> </td> //保持列數統一,加入空白列 </tr>
REPORT_TEST_WITH_OUTPUT_TMPL = 「」」 … 「」」 是測試用例展現部分代碼,這段內容是展開測試模塊後進行顯示的
REPORT_TEST_WITH_OUTPUT_TMPL = r""" <tr id='%(tid)s' class='%(Class)s'> <td align='center'>%(caseid)s</td> //%(caseid)s 是python轉譯html代碼中變量替換方式。caseid 會在python腳本中定義。 <td class='%(style)s'><div class='testcase'>%(desc)s</div></td> <td colspan='5' align='center'> <!--css div popup start--> <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_%(tid)s')" > %(status)s</a> <div id='div_%(tid)s' class="popup_window"> <div style='text-align: right; color:red;cursor:pointer'> <a onfocus='this.blur();' onclick="document.getElementById('div_%(tid)s').style.display = 'none' " > [x]</a> </div> <pre> %(script)s </pre> </div> <!--css div popup end--> </td> <td align='center'> <a href="%(image)s" title="%(image)s"> //這一列內容加入圖片快照的連接訪問路徑 %(image)s 中替換連接地址 <img src="..\data\img.png" height=20 width=20 border=0 /></a> //連接圖標 </td> </tr>
單從HTML界面樣式展現來看,上面全部代碼段中修改都是在每一個<tr>加入兩個<td></td>。
這樣咱們的樣式就改完了。而後開始加入數據。
先想一下咱們要加什麼數據.從樣式中看咱們增長了兩個列,那麼有兩列的數據是須要增長的,具體加什麼呢?想一下?咱們在改樣式的時候加的兩個列中使用到了變量,那麼變量取值是須要實現的。那麼首先定義變量。
定義報告輸出兩個變量的取值,放在 REPORT_TEST_OUTPUT_TMPL定義的下面:
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變量,並實現變量的取值。
<!—在原有的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標籤中顯示的英文內容翻譯爲中文就能夠了。