Unittest擴展-自動生成HTML測試報告

Unittest擴展-自動生成HTML測試報告

在腳本運行完成之後,除了在log.txt文件查看到運行日誌外,還可以使用HTMLTestRunner生成測試報告。HTMLTestRunner是在Python標準庫的unittest單元測試框架下的一個擴展。

1 下載HTMLTestRunner.py

首先要下載HTMLTestRunner.py文件,下載地址如下:
http://tungwaiyip.info/software/HTMLTestRunner.html

HTMLTestRunner.py放置在Python的安裝目錄Lib路徑下。

2 修改HTMLTestRunner.py

HTMLTestRunner.py是基於Python2來寫的,若解釋器爲Python2,則不需要修改;
若解釋器爲Python3,爲了使其支持Python3的環境,則需要針對HTMLTestRunner.py做一些修改。
python3中運行以上腳本報ImportError: No module named ‘StringIO’,因爲HTMLTestRunner.py是基於python2開發的,在解決完問題1後,需要通過編輯器修改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

  • 第775行,將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))

3 生成HTML測試報告案例

簡單的以百度搜索功能測試爲例:
在這裏插入圖片描述

生成HTML測試報告案例
簡單的以百度搜索功能測試爲例:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""=================================================
@Project -> File   :Auto_Test_First -> testBaidu.py
@IDE    :PyCharm
@Author :Mr.
@Date   :2019/11/26 19:36
@Desc   :百度搜索功能測試,生成測試報告
=================================================="""

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
from HTMLTestRunner import HTMLTestRunner

class BaiduIde(unittest.TestCase):
    """百度測試類"""

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(20)
        self.base_url = "https://www.baidu.com/"
        self.verificationErrors = []
        self.accept_next_alert = True

    def test_baidu(self):
        """搜索關鍵詞"""
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys("HTMLTestRunner")
        driver.find_element_by_id("su").click()
        try:
            self.assertEqual("HTMLTestRunner_百度搜索", driver.title)
        except AssertionError as e:
            self.verificationErrors.append(str(e))
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys("Python+selenium")
        driver.find_element_by_id("su").click()

    def is_element_present(self, how, what):
        try:
            self.driver.find_element(by = how, value = what)
        except NoSuchElementException as msg:
            return False
        return True

    def is_alert_present(self):
        try:
            self.driver.switch_to_alert()
        except NoAlertPresentException as msg:
            return False
        return True

    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally:
            self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)


if __name__ == "__main__":
    # unittest.main()
    # 構造測試集
    suite = unittest.TestSuite()
    suite.addTest(BaiduIde("test_baidu"))

    # # 方法一:原生的執行測試方法,生成測試日誌log.txt
    # runner = unittest.TextTestRunner()
    # runner.run(suite)

    # 方法二:
    # 獲取當前時間,目的是爲了生成及時報告
    now_time = time.strftime("%Y_%m_%d_%H_%M_%S")
    # 定義報告存放路徑
    fp = open("./Report/testReport"+now_time+".html", "wb")
    # 定義測試報告
    runner = HTMLTestRunner(stream=fp,
                            title="百度網搜索功能的測試報告",
                            description="測試用例執行情況:")
    # 運行測試用例
    runner.run(suite)
    # 關閉報告文件
    fp.close()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章