自動化測試運行完了需要直觀的了解測試結果,需要用到第三方的模塊HTMLTestRunner。
一:下載 HTMLTestRunner
下載路徑:https://pypi.python.org/pypi/HTMLTestRunner ,下載后放到 Python的安裝目錄\Lib 該目錄下。
右鍵點擊 HTMLTestRunner.py 目標另存為python的Lib的路徑下。
二、修改HTMLTestRunner.py文件
如果你安裝的是python2版本,那么不需要做這一步。因為HTMLTestRunner.py 原本就是python2版本,目前還沒找到python3版本,所以需要我們自己修改 HTMLTestRunner.py 文件
修改內容如下:
第94行,將import StringIO修改成import io
第539行,將self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()
第642行,將if not rmap.has_key(cls):修改成if not cls in rmap:
第766行,將uo = o.decode('latin-1')修改成uo = e
第772行,將ue = e.decode('latin-1')修改成ue = e
第631行,將print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
其中,Python3中,已經沒有StringIO了。取而代之的是io.StringIO。
三、實例代碼
測試用例存放路徑如下
runtest.py代碼如下
1 import unittest 2 from HTMLTestRunner import HTMLTestRunner 3
4 test_dir = './'#當前路徑
5 discover = unittest.defaultTestLoader.discover(test_dir, pattern='iot_*.py')#iot_*.py表示iot_開頭的所有測試用例
6 fp = open("./iot.html","wb")#報告存放的路徑
7 runner = HTMLTestRunner(stream=fp, title='科信雲測試報告',description='測試用例情況:') 8 runner.run(discover) 9 fp.close
四、測試報告生成
運行runtest.py,然后跑完所有的測試用例會自動生成.html的測試報告。
報告如下圖:
運行期間遇到的問題:博主使用VScode點擊運行,一直報下圖的時間提示,然后什么也沒有發生。后面想起蟲師說過的一句話,運行python程序有問題可能是編輯器的問題,最可信的辦法是使用CMD終端
運行python文件,於是問題終於解決了。在這里感謝一下蟲師的指導。
如果報告生成太多都是同一個名字就會進行覆蓋掉,現在我們需要用時間來命名,又能方便看到最新的報告生成時間。
import unittest import time from HTMLTestRunner import HTMLTestRunner now = time.strftime("%Y-%m-%d %H_%M_%S") test_dir = './'#當前路徑
discover = unittest.defaultTestLoader.discover(test_dir, pattern='iot_*.py')#iot_*.py包含測試用例的名稱
filename = test_dir + now + 'iot.html' fp = open(filename,"wb")#報告存放的路徑
runner = HTMLTestRunner(stream=fp, title='科信雲測試報告',description='測試用例情況:') runner.run(discover) fp.close()
報告生成如下:
五、測試報告優化
經過上面已經能生成完整的測試報告了,從無到有,后面需要從有到優。下面我需要制作一份漂亮的測試報告。
我們已經不是第一個吃螃蟹的人了,已經有人幫我們優化了官方的HTMLTestRunner的測試報告模板並且直接兼容python3了,不需要重復造輪子了,感謝前輩無私奉獻。
下面直接借用大佬的demo教程,演示一下。
下載地址:https://github.com/SeldomQA/HTMLTestRunner
HTMLTestRunner for Python3
HTMLTestRunner:http://tungwaiyip.info/software/HTMLTestRunner.html
介紹: HTMLTestRunner是針對Python2.x的unittest單元測試框架用於生成HTML測試報告的擴展。但是,它並不支持Python3.x,所以,我做了一點小小的修改,使其可以在Python3下使用。
install
git clone https://github.com/SeldomQA/HTMLTestRunner #或者去github下載項目包 cd HTMLTestRunner/ python setup.py install
demo
import unittest from TestRunner import HTMLTestRunner class TestDemo(unittest.TestCase): """測試用例說明"""
def test_success(self): """執行成功""" self.assertEqual(2 + 3, 5) @unittest.skip("skip case") def test_skip(self): pass
def test_fail(self): self.assertEqual(5, 6) def test_error(self): self.assertEqual(a, 6) class TestDemo2(unittest.TestCase): def test_success(self): self.assertEqual(2 + 2, 4) class TestDemo3(unittest.TestCase): def test_fail(self): self.assertEqual(3, 4) if __name__ == '__main__': suit = unittest.TestSuite() suit.addTest(TestDemo("test_success")) suit.addTest(TestDemo("test_skip")) suit.addTest(TestDemo("test_fail")) suit.addTest(TestDemo("test_error")) suit.addTest(TestDemo2("test_success")) suit.addTest(TestDemo3("test_fail")) with(open('result.html', 'wb')) as fp: runner = HTMLTestRunner( stream=fp, title='測試報告, description='測試用例' ) runner.run(suit)
查看測試報告,比原生的漂亮了不少,作者還集成了發郵件功能。
報告生成完了,全英文版對於英語差的朋友閱讀不是非常直觀,於是我又修改了源碼的顯示部分。
漢化版的源碼包下載地址:https://github.com/hy546880109/HTMLTestRunner
郵件發送:
首先需要獲取到郵箱的授權碼,這里以QQ郵箱為例。
發送測試報告到郵箱code:
import unittest from TestRunner import HTMLTestRunner from TestRunner import SMTP class TestDemo(unittest.TestCase): """測試用例說明"""
def test_success(self): """執行成功""" self.assertEqual(2 + 3, 5) @unittest.skip("skip case") def test_skip(self): pass
def test_fail(self): self.assertEqual(5, 6) def test_error(self): self.assertEqual(a, 6) class TestDemo2(unittest.TestCase): def test_success(self): self.assertEqual(2 + 2, 4) class TestDemo3(unittest.TestCase): def test_fail(self): self.assertEqual(3, 4) if __name__ == '__main__': suit = unittest.TestSuite() suit.addTest(TestDemo("test_success")) suit.addTest(TestDemo("test_skip")) suit.addTest(TestDemo("test_fail")) suit.addTest(TestDemo("test_error")) suit.addTest(TestDemo2("test_success")) suit.addTest(TestDemo3("test_fail")) if __name__ == '__main__': suit = unittest.TestSuite() suit.addTest(TestDemo("test_success")) suit.addTest(TestDemo("test_skip")) suit.addTest(TestDemo("test_fail")) suit.addTest(TestDemo("test_error")) suit.addTest(TestDemo2("test_success")) suit.addTest(TestDemo3("test_fail")) report = "./result.html" with(open(report, 'wb')) as fp: runner = HTMLTestRunner( stream=fp, title='Seldom自動化測試報告', description='瀏覽器chrome,平台windows' ) runner.run(suit) # 發郵件功能
smtp = SMTP(user="user@qq.com", password="授權碼", host="smtp.qq.com") #注意這里不是填郵箱密碼而是授權碼,授權碼需要去郵箱設置里獲取 smtp.sender(to="user@qq.com", attachments=report)
運行后查看結果: