定制unittest測試報告


基於HTMLTestRunner的定制版本非常多,我這幾天手動定制了一款,除了有不錯的顏值,還提供了一些非常實用的功能。

安裝

github:
https://github.com/SeldomQA/HTMLTestRunner

> git clone https://github.com/SeldomQA/HTMLTestRunner
> cd HTMLTestRunner/
> python setup.py install

基本使用

基本用法與大多數定制版的報告一樣。

import unittest
from TestRunner import HTMLTestRunner


class TestDemo(unittest.TestCase):
    """測試用例說明"""

    def test_success(self):
        """執行成功"""
        self.assertEqual(2 + 3, 5)

if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(TestDemo("test_success"))

    report = "./result.html"
    with(open(report, 'wb')) as fp:
        runner = HTMLTestRunner(
            stream=fp,
            title='<project name>test report',
            description='describe: ... ')
        runner.run(suit)

HTMLTestRunner類說明:

  • stream : 指定報告的路徑
  • title : 報告的標題
  • description : 報告的描述

run()方法說明:

  • suit : 運行的測試套件

用例失敗重跑

報告提供了用例錯誤/失敗重跑功能。

import unittest
from TestRunner import HTMLTestRunner


class TestDemo(unittest.TestCase):
    """測試用例說明"""

    def test_success(self):
        """執行成功"""
        self.assertEqual(2 + 3, 5)

    def test_fail(self):
        self.assertEqual(5, 6)

    def test_error(self):
        self.assertEqual(a, 6)


if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(TestDemo("test_success"))
    suit.addTest(TestDemo("test_fail"))
    suit.addTest(TestDemo("test_error"))

    report = "./result.html"
    with(open(report, 'wb')) as fp:
        runner = HTMLTestRunner(stream=fp)
        runner.run(suit, rerun=2, save_last_run=False)

run()方法說明:

  • suit : 運行的測試套件
  • rerun :重跑次數,設置為2,會在用例失敗/錯誤后進行兩次重試。
  • save_last_run :是否保存最后一個結果

集成發郵件功能

如果你想用例運行完成之后發郵件,只需要填寫郵箱信息即可。

import unittest
from TestRunner import HTMLTestRunner
from TestRunner import SMTP

# ...

if __name__ == '__main__':
    suit = unittest.TestSuite()
    # ...

    report = "./result.html"
    with(open(report, 'wb')) as fp:
        runner = HTMLTestRunner(stream=fp)
        runner.run(suit)
    # 發郵件功能
    smtp = SMTP(user="user@126.com", password="123", host="smtp.126.com")
    smtp.sender(to="user@126.com", attachments=report)

SMTP類說明:

  • user 發送者郵箱帳號
  • password 發送者郵箱密碼
  • host 郵箱服務器地址

sender()方法說明:

  • to 接收者郵箱
  • attachments 附件

用例運行失敗自動截圖

如果你運行的是selenium/appium,那么當用例運行失敗將會自動截圖。

import unittest
from time import sleep
from TestRunner import HTMLTestRunner
from selenium import webdriver


class YouTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        cls.driver = webdriver.Chrome()
        cls.base_url = "https://www.baidu.com"

    @classmethod
    def tearDownClass(cls) -> None:
        cls.driver.quit()

    def test_success(self):
        """測試百度搜索:HTMLTestRunner """
        self.driver.get(self.base_url)
        self.driver.find_element_by_id("kw").send_keys("HTMLTestRunner")
        self.driver.find_element_by_id("su").click()
        sleep(2)

    def test_error(self):
        """測試百度搜索,定位失敗 """
        self.driver.get(self.base_url)
        self.driver.find_element_by_id("kw").send_keys("python")
        self.driver.find_element_by_id("su22").click()
        sleep(2)

    def test_fail(self):
        """測試百度搜索,斷言失敗 """
        self.driver.get(self.base_url)
        self.driver.find_element_by_id("kw").send_keys("unittest")
        self.driver.find_element_by_id("su").click()
        sleep(2)
        self.assertEqual(self.driver.title, "unittest")


if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(YouTest("test_success"))
    suit.addTest(YouTest("test_error"))
    suit.addTest(YouTest("test_fail"))

    report = "./selenium_result.html"
    with(open(report, 'wb')) as fp:
        runner = HTMLTestRunner(
            stream=fp,
            title='Seldom自動化測試報告',
            description='瀏覽器chrome,平台windows'
        )
        runner.run(suit)

報告中不需要實現任何截圖的操作,會自動幫你生成截圖並嵌入到HTML報告中。

其他

  1. 基於jinja2開發,將要HTML代碼與python代碼分離。
  2. 引用了bootstrap4的模板樣式庫。
  3. 只支持python3.x,沒有在python2下面做過測試。
  4. 其他細節優化:
    4.1. 增加了Chart環狀圖展示。
    4.2. 增加跳過用例統計
    4.3. 增加單個用例的運行時間統計。


免責聲明!

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



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