如何为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
相关产品推荐
相关产品推荐

