Python單元測試報告框架

  • 2019 年 10 月 4 日
  • 筆記

如果你是Java棧的同學,那麼你可能知道extent report測試報告框架。而Python你可能知道HTMLTestRunner測試報告框架。今天要介紹的則是基於HTMLTestRunner的新測試報告框架PyTestReport。

如果Python語言界已經有了HTMLTestRunner,那麼為什麼還要一個PyTestReport測試框架呢?

原因很簡單,因為與Extent Report框架相比,HTMLTestRunner在界面的優越性上面還是有不少的差距,而PyTestReport則意在成為Python語言中的Extent Report

開局一張圖

這個就是PyTestReport的默認主題模板,雖然看上去跟Extent Report的眾多模塊相比,還是稍有遜色顯得不是很專業。

但是這並不影響我們介紹這款框架,因為它在基於HTMLTestRunner進行改良之後開始支持模板擴展了,也就是說將來它可以擁有和Extent Report同步樣式的報告模板。

所以如果你對此框架還有興趣,就一起來看下如果快速的使用和擴展該框架的主題模板。

如果你具有較好的CSS功底,那麼歡迎來為我們的主題模板舔磚加瓦^_^!開源合作相關請點擊PyTestReport的github地址[1]查看詳情。

安裝

通過pip安裝

pip install PyTestReport 

通過安裝包

可通過發佈的安裝包進行安裝,具體安裝包可在dist目錄查找。

pip install PyTestReport-0.1.X-py3-none-any.whl

通過源碼(最新版本)

pip install git+https://github.com/five3/PyTestReport.git

或者

git clone https://github.com/five3/PyTestReport.git  cd PyTestReport  python setup.py build  python setup.py install

使用

PyTestReport可用通過多種方式運行,分別如下:

•單元測試•lib庫引入(後續支持)•命令行(後續支持)•REST API(後續支持)

單元測試使用樣例

import unittest  import pytestreport    class MyTest(unittest.TestCase):      def testTrue(self):          self.assertTrue(True)    if __name__ == '__main__':      pytestreport.main(verbosity=2)

以這種方式執行之後,默認會在當前文件夾下生成一個PyTestReport.html日誌文件,且這個文件名和樣式模板都不可以重新指定的。

注意:這種方式執行時,如果使用Pycharm等IDE,確保不是以IDE的內建單元測試框架來執行的;或者直接通過命令行來執行。

import unittest  from pytestreport import TestRunner    class MyTest(unittest.TestCase):      def testTrue(self):          self.assertTrue(True)    if __name__ == '__main__':      suite = unittest.TestSuite()      suite.addTests(unittest.TestLoader().loadTestsFromTestCase(MyTest))        with open(r'/path/to/report.html', 'wb') as fp:          runner = TestRunner(fp, title='測試標題', description='測試描述', verbosity=2)          runner.run(suite)

這種方式適合批量加載和執行測試用例,從測試文件的外部來導入測試用例並執行。這裡可以指定具體的結果文件路徑和測試標識等信息。

這裡使用的是默認模板主題,如果想要使用其它模板主題,可以通過制定模板的主題文件來實現。比如:使用遺留模板的方式如下所示。

from pytestreport import TestRunner  ...  runner = TestRunner(fp, title='測試標題', description='測試描述', verbosity=2,                      htmltemplate='legency.html', stylesheet='legency.css', javascript='legency.js')