如何使用HtmlTestRunner讓自動化測試報告內容更豐富


原文出自:http://www.cnblogs.com/tsbc/p/4128150.html

簡述

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

 

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

 

圖表 1

 

圖表 2

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

這樣做的好處:

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

實現

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

也就是分兩步做:

         1改樣式

         2加數據

改樣式

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

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

看源碼部分:

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

腳本片段1:

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>&nbsp;</td>

    <td>&nbsp;</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>
復制代碼

 

腳本片段2:

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>&nbsp;</td>  //保持列數統一,加入空白列

</tr>
復制代碼

 

 

腳本片段3:

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定義的下面:

腳本片段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生成報告模板就修改結束,我的這個方式或許不是你想要的,不是你想展示的,希望能在思路上幫你去解決你的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM