【selenium】Unittest+HTMLTestRunner生成测试报告

本文介绍如何使用Unittest结合HTMLTestRunner生成自动化测试报告。通过修改配置参数,可以调整报告的详细程度、标题等内容。提供了两种测试用例加载方式:通过testSuit.addTest()方式加载特定测试用例,或使用discover方法加载指定目录下的所有测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()
    使用:实例化runner runner = 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() # 关闭文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值