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

如何为Selenium+Python自动化测试生成带全步骤日志的HTML报告

解决方案:把详细步骤日志整合到Pytest HTML报告

以下是一步步实现的具体操作,帮你把每个测试的全步骤日志清晰展示在HTML报告里,非技术人员也能看懂:

1. 配置Python logging模块,输出友好的步骤日志

先创建一个日志配置文件(比如logger_config.py),统一管理日志格式和输出渠道:

import logging
import sys

def setup_logger():
    logger = logging.getLogger("automation_test")
    logger.setLevel(logging.INFO)
    
    # 避免重复添加日志处理器
    if logger.handlers:
        return logger
    
    # 自定义日志格式,突出业务步骤,适合非技术人员阅读
    formatter = logging.Formatter(
        "%(asctime)s - %(levelname)s - %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S"
    )
    
    # 控制台输出(本地调试用)
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setFormatter(formatter)
    
    # 文件日志(留底归档用)
    file_handler = logging.FileHandler("automation_logs.log", encoding="utf-8")
    file_handler.setFormatter(formatter)
    
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    return logger

然后在测试用例中调用这个logger,把每个操作都写成易懂的步骤日志:

from selenium import webdriver
from logger_config import setup_logger

logger = setup_logger()

def test_user_login():
    logger.info("开始执行【用户登录】测试用例")
    driver = webdriver.Chrome()
    logger.info("启动Chrome浏览器")
    
    driver.get("https://你的测试域名/login")
    logger.info("打开登录页面")
    
    username_input = driver.find_element("id", "username")
    username_input.send_keys("test_account")
    logger.info("输入用户名:test_account")
    
    password_input = driver.find_element("id", "password")
    password_input.send_keys("******")  # 敏感信息隐藏,不用显示明文
    logger.info("输入登录密码")
    
    driver.find_element("id", "login-btn").click()
    logger.info("点击【登录】按钮")
    
    # 断言登录结果,失败时日志会自动记录错误信息
    assert driver.title == "系统首页", "登录后未跳转到首页"
    logger.info("登录成功,验证页面为系统首页")
    
    driver.quit()
    logger.info("关闭浏览器,【用户登录】测试用例执行完成")

2. 配置Pytest,让所有日志显示在HTML报告里

默认pytest-html只展示失败用例的日志,要让全部日志都出现在报告中,需要做两个配置:

第一步:创建pytest.ini配置文件

放在项目根目录,添加以下内容:

[pytest]
# 开启控制台日志输出
log_cli = true
log_cli_level = INFO
log_cli_format = %(asctime)s - %(levelname)s - %(message)s
log_cli_date_format = %Y-%m-%d %H:%M:%S

# 开启文件日志
log_file = automation_logs.log
log_file_level = INFO
log_file_format = %(asctime)s - %(levelname)s - %(message)s
log_file_date_format = %Y-%m-%d %H:%M:%S

# 让HTML报告显示所有日志
html_report_title = 自动化测试报告
html_show_logs = true

第二步:(可选)添加失败自动截图(增强报告可读性)

在conftest.py中添加钩子函数,测试失败时自动截图并附加到报告:

import pytest

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    report = outcome.get_result()
    
    # 测试失败时截图并附加到HTML报告
    if report.when == "call" and report.failed:
        driver = item.funcargs.get("driver")
        if driver:
            screenshot_base64 = driver.get_screenshot_as_base64()
            extra = getattr(report, "extra", [])
            extra.append(pytest_html.extras.image(screenshot_base64, "失败页面截图"))
            report.extra = extra

3. 执行测试生成报告

还是用你原来的命令执行:

pytest --html=report.html

打开生成的report.html,就能看到每个测试用例的完整步骤日志,失败用例还会附带截图和详细错误信息,非技术人员也能快速看懂执行流程和失败原因。

常见问题排查

  • 日志没出现在报告:检查pytest.ini里的html_show_logs = true是否配置正确,同时确保日志级别是INFO及以上
  • 日志重复输出:检查setup_logger函数里的if logger.handlers:判断,避免重复添加日志处理器
  • 日志太技术化:把测试用例里的日志描述换成业务语言,比如不说“定位元素id为username”,而是说“找到用户名输入框”

内容的提问来源于stack exchange,提问作者Martin M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:25:29