Unittest+HTMLTestRunner生成测试报告
1、 准备工作
本文使用的并非python官网提供的HTMLTestRunner.py源码,而是经过广大网友改良后的HTMLTestRunner.py,生成样式如下,文件可以在资源中自行下载,大家可以根据习惯选择官网源码或经改良后的代码
改良后的HTMLTestRunner.py
网络上直接下载HTMLTestRunner.py 文件存放在 Python\Python39\Lib
目录下
2、接口自动化测试(不含浏览器截图)
test_case_a.py
import unittest
class testCaseA(unittest.TestCase):
def test_sence_A(self):
print("test_sence_A")
def test_sence_B(self):
print("test_sence_B")
if __name__ == "__main__":
unittest.main()
运行生成测试报告:
run1.py 测试用例是通过testSuit.addTest()
方式加载
import unittest
import time
from utils.HTMLTestRunner import HTMLTestRunner
# 通过discover 执行测试用例
test_dir = "./testcases/" # 测试用例所在目录
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test_case_a.py')
if __name__ == "__main__":
now = time.strftime("%Y%m%d_%H%M%S", time.localtime()) # 获取当前时间
now = "测试报告2"
HtmlFile = "reports/" + now + "_Report.html" # 测试报告路径
fp = open(HtmlFile, "wb") # 以只读方式打开测试报告
runner = HTMLTestRunner(title="web自动化测试", description="测试a", stream=open(HtmlFile, "wb"), verbosity=1, retry=0, save_last_try=True)
runner.run(discover)
fp.close() # 关闭文件
3、web自动化包含截图
test_baidu1.py
!!! 注意:
webdriver务必在此类中实例化,否则用例失败、错误的时候不会触发HTMLTestRunner.py的自动截图
setUp(self): 方法中需要初始化截图列表。用来存放截图的所有图片
截图图片会以base64 形式直接写入到html中
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import unittest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class TestBaiduPage(unittest.TestCase):
"""测试百度页面访问"""
@classmethod
def setUpClass(cls):
"""初始化测试环境"""
cls.driver = webdriver.Chrome()
# 设置隐式等待时间
cls.driver.implicitly_wait(10)
# 最大化窗口
cls.driver.maximize_window()
cls.driver.get("https://www.baidu.com")
@classmethod
def tearDownClass(cls):
# 关闭浏览器
cls.driver.quit()
@classmethod
def setUp(self):
self.imgs = [] # 初始化截图列表
def test_01_baidu_title(self):
"""测试百度页面标题"""
self.imgs.append(self.driver.get_screenshot_as_base64()) # 截图
# 验证页面标题是否正确
self.assertEqual(self.driver.title, "百度一下,你就知道")
# 打印成功信息
print("百度页面标题验证通过")
def test_02_baidu_search(self):
"""测试百度搜索功能"""
# 定位搜索框并输入关键词
search_box = self.driver.find_element(By.ID, "kw")
search_box.send_keys("Python")
# 定位搜索按钮并点击
search_button = self.driver.find_element(By.ID, "su")
search_button.click()
# 等待搜索结果页面加载完成
WebDriverWait(self.driver, 10).until(
EC.title_contains("Python")
)
# 验证搜索结果页面标题
self.assertIn("Python", self.driver.title)
self.imgs.append(self.driver.get_screenshot_as_base64()) # 截图
# 打印成功信息
print("百度搜索功能验证通过")
if __name__ == "__main__":
unittest.main()
运行run.py
import unittest
import time
from utils.HTMLTestRunner import HTMLTestRunner
# 通过discover 执行测试用例
test_dir = "./testcases/" # 测试用例所在目录
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test_baidu1.py')
if __name__ == "__main__":
now = time.strftime("%Y%m%d_%H%M%S", time.localtime()) # 获取当前时间
now = "测试报告2"
HtmlFile = "reports/" + now + "_Report.html" # 测试报告路径
fp = open(HtmlFile, "wb") # 以只读方式打开测试报告
runner = HTMLTestRunner(title="web自动化测试", description="测试a", stream=open(HtmlFile, "wb"), verbosity=1, retry=0, save_last_try=True)
runner.run(discover)
fp.close() # 关闭文件
4、测试报告生成时参数调整
HTMLTestRunner.HTMLTestRunner(stream=sys.stdout, verbosity=2, title=None, description=None, tester=None)
方法生成测试报告
- stream :指定测试报告文件
- verbosity:设置报告的详细程度,0、1、2 详细程度逐步增加
- title :测试报告标题
- description : 测试报告的描述
- tester :测试人员姓名
verbosity = 1 报告中测试用例显示为: test_01
verbosity = 2 报告中测试用例显示为: test_01:测试用例doc注释
5、拓展TestSuite 的两种加载方式
- 使用HTMLTestRunner生成报告和不使用的区别在于:
- 不使用:实例化runner
runner = unittest.TextTestRunner()
使用:实例化runnerrunner = HTMLTestRunner.HTMLTestRunner(stream=fp, verbosity=2, title="xx系统自动化测试报告", description="v1.0.0", tester="测试甲")
方式1
测试用例是通过testSuit.addTest()
方式加载
import unittest
import time
import HTMLTestRunner
from testcase import test_case_a,test_case_b
# 构造测试集
testSuit = unittest.TestSuite()
# 将测试用例加入测试集
testSuit.addTest(test_case_a.TestCaseA("test_a1"))
testSuit.addTest(test_case_a.TestCaseA("test_a2"))
testSuit.addTest(test_case_b.TestCaseB("test_b1"))
testSuit.addTest(test_case_b.TestCaseB("test_b2"))
if __name__ == '__main__':
# 调用TextTestRunner 执行测试用例集
# runner = unittest.TextTestRunner();
HtmlFile = "report.html" # 测试报告路径
fp = open(HtmlFile, "wb") # 以只读方式打开测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, verbosity=0, title="xx系统自动化测试报告", description="v1.0.0",
tester="测试甲")
runner.run(testSuit)
fp.close() # 关闭文件
方式二 、run2.py 测试用例通过目录形式加载
import unittest
import HTMLTestRunner
import time
# 通过discover 执行测试用例
test_dir = "./testcase/" # 测试用例所在目录
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test_*.py')
if __name__ == "__main__":
now = time.strftime("%Y%m%d_%H%M%S", time.localtime()) # 获取当前时间
HtmlFile = "report/" + now + "_Report.html" # 测试报告路径
fp = open(HtmlFile, "wb") # 以只读方式打开测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, verbosity=2, title="xx系统自动化测试报告", description="v1.0.0", tester="测试甲")
# runner = unittest.TextTestRunner()
runner.run(discover)
fp.close() # 关闭文件