You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中使用Selenium和LiveServerTestCase生成测试报告?

关于Django LiveServerTestCase + Selenium 测试报告生成的解答

首先明确两个核心问题的答案:

  • Selenium本身没有内置的测试报告生成功能,它的核心定位是浏览器自动化操作工具,只负责模拟用户操作浏览器的行为,测试结果的收集、汇总、导出不属于它的功能范围
  • 不需要从零编写完整的文件生成代码,Python生态有成熟的测试报告工具,可以直接和Django测试框架、LiveServerTestCase适配,只需要做少量配置即可

常用实现方案

方案1:用HtmlTestRunner生成可视化HTML报告

这是目前最常用的方案,完全兼容Python unittest体系,而Django测试框架、LiveServerTestCase本质都是基于unittest开发的,不需要改动现有测试用例代码就能对接。

  • 第一步安装依赖:pip install html-testRunner
  • 第二步在项目根目录新建测试启动文件run_selenium_tests.py,示例代码如下:
import os
import sys
import django
from django.conf import settings
from django.test.utils import get_runner
import HtmlTestRunner

if __name__ == "__main__":
    os.environ['DJANGO_SETTINGS_MODULE'] = '你的项目名.settings'
    django.setup()
    test_runner = get_runner(settings)(
        verbosity=2,
        output='./selenium_test_report', # 报告生成的存储目录
        report_name='业务流程自动化测试报告',
        add_timestamp=True, # 报告文件名自动加时间戳,避免历史报告被覆盖
        combine_reports=True # 所有测试用例结果合并到同一个报告文件
    )
    # 括号内填你存放Selenium测试用例的App名称,也可以写具体测试文件路径
    failures = test_runner.run_tests(["你的测试App名"])
    sys.exit(bool(failures))
  • 运行测试时直接执行python run_selenium_tests.py即可,生成的报告会自动包含每个用例的运行状态、耗时、报错堆栈信息。如果需要加Selenium失败用例截图,可以在测试基类的tearDown方法里加对应逻辑。

方案2:轻量文本/JSON报告实现

如果不需要可视化的HTML报告,直接用Django自带能力就能实现,不需要额外安装依赖:

  • 要导出文本格式报告,运行测试时添加日志重定向即可:python manage.py test 测试App名 -v 3 > ./test_report.txt,参数-v 3会输出最详细的测试运行信息
  • 要导出结构化的JSON格式报告,可以用适配Django的测试结果导出工具,直接输出结构化测试数据供后续处理。

复用性优化建议

可以把Selenium驱动初始化、失败截图、资源释放的逻辑统一封装到测试基类,所有业务测试用例直接继承基类即可,不用每个用例重复写相同逻辑:

from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver
import os

class SeleniumTestBase(StaticLiveServerTestCase):
    @classmethod
    def setUpClass(cls):
        super().setUpClass()
        # 这里可替换为你使用的浏览器驱动
        cls.driver = webdriver.Chrome()
        cls.driver.implicitly_wait(10)
    
    def tearDown(self):
        # 用例运行失败自动保存截图
        if self._outcome.errors:
            screenshot_path = "./selenium_test_report/screenshots"
            os.makedirs(screenshot_path, exist_ok=True)
            self.driver.save_screenshot(f"{screenshot_path}/{self._testMethodName}_失败截图.png")
        super().tearDown()
    
    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
        super().tearDownClass()

内容的提问来源于stack exchange,提问作者Alex Mak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:36:07