用 pytest 結合 Allure2 產生精美的測試報表

Posted on  Oct 13, 2019  in  Python 模組/套件推薦  by  Amo Chen  ‐ 3 min read

隨著專案的規模越來越大,測試的效率及測試工具的有效運用也會成為開發團隊很重要的需求之一。

剛好有人介紹一款不錯的測試報表產生工具 Allure ,除了支援支援 Java, Javascript, Ruby, PHP, .Net, Scala, Python 等多種程式語言之外,連 pytest , behave 等 Python 常見的測試套件也都有整合,故以此文記錄一下這款不錯的報表產生工具。

本文環境

$ pip install pytest allure-pytest
$ brew install allure

更多關於安裝 Allure2 的可參閱 文件 ,安裝完成之後系統內會多一個 allure 的指令可供使用,該指令將用來顯示 allure 所產生的測試報表。

Allure2

Allure 是一套用 Java 開發的測試報表產生工具,支援 Linux, macOS, Windows 等平台,更支援 Java, Javascript, Ruby, PHP, .Net, Scala, Python 等多種程式語言,並且增加測試報表的易讀性與有用性,讓每個開發者都能夠輕鬆閱讀測試後的結果,並且得到更多關於測試案例的相關資訊。

pyest + Allure2

本文以 pytest 作為範例,若不熟悉 pytest 可以參閱 pytest 教學

Allure2 提供一套件 allure-pytest 讓 pytest 能夠使用 Allure2 提供的外掛(plugin)產生測試報表,也因此需要特別安裝 allure-pytest ,否則 pytest 將無法產生測試報表。

套件可以透過 pip 進行安裝:

$ pip install allure-pytest

安裝完之後,執行 pytest 時只要多加 1 個參數 --alluredir 指明測試報表要輸出的路徑即可,例如

$ py.test --alluredir=./test_report ./tests

如此就整合完成!就是這麼輕鬆!

顯示 Allure2 測試報表

上一步驟所產生的測試報表要怎麼顯示呢?同樣只需要 1 個指令即可(請記得將 ./test_report 換成你的測試報表產生路徑):

$ allure serve ./test_report

接著 allure 就會呼叫瀏覽器開啟測試報表:

大家可以把玩一下。

Allure2 提供的方便功能們

docstring

Allure2 預設會將 test case 中的 docstring 會被放到測試報表中的 description 欄位,所以可以在 docstring 中註明測試的用途或其他說明等等,例如以下測試範例:

def test_hello_world():
    """ 我只會成功 """
    assert True

會顯示:

此外, Allure 也支援用 HTML 格式顯示 description ,讓報表更簡明些,例如:

import allure

@allure.description_html("""
<h1>Test with some complicated html description</h1>
<table style="width:100%">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
    <th>Age</th>
  </tr>
  <tr align="center">
    <td>William</td>
    <td>Smith</td>
    <td>50</td>
  </tr>
  <tr align="center">
    <td>Vasya</td>
    <td>Jackson</td>
    <td>94</td>
  </tr>
</table>
""")
def test_html_description():
    assert True

上述範例會顯示:

沒必要的話,建議少用 HTML 格式作為 description ,畢竟程式碼的易讀性會下降。

Steps

再來是個人覺得很有用的 steps 功能,如果測試的流程相當多步驟,那麼可以選擇利用 @allure.step("說明") 裝飾子(decorator)將流程細分為多個步驟,例如:

import allure


@allure.step("註冊")
def signup():
    key_in_account_and_password("a", "passwda")


@allure.step("登入")
def login():
    key_in_account_and_password("b", "passwdb")


@allure.step("輸入帳號密碼")
def key_in_account_and_password(account, password):
    pass


def test_signup_and_login():
    signup()
    login()

上述範例的測試報告如下:

加上 steps 後測試報告看起來清楚許多,對於開發人員了解哪個步驟出現問題相當有幫助。

總結

以上為 Allure 測試報表產生工具的簡單介紹,其實 Allure 不僅僅提供本文所介紹的幾項功能而已,還有相當多的功能在 官方文件 之中都有詳細說明,十分建議各位可以花些時間閱讀一遍,將有助於產生更棒的測試報表。

Happy Coding!

References

https://github.com/allure-framework/allure2

https://docs.qameta.io/allure/

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!