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()