from __future__ import annotations import os from datetime import date from docx import Document from docx.shared import Pt FONT_NAME = "宋体" def set_run_font(run, size_pt: int = 11, bold: bool | None = None): run.font.name = FONT_NAME run.font.size = Pt(size_pt) if bold is not None: run.bold = bold def add_heading(doc: Document, text: str, level: int = 1): h = doc.add_heading(text, level=level) for r in h.runs: set_run_font(r, size_pt=12) return h def add_paragraph(doc: Document, text: str): p = doc.add_paragraph(text) for r in p.runs: set_run_font(r, size_pt=11) return p def add_bullets(doc: Document, lines: list[str]): for line in lines: p = doc.add_paragraph(line, style="List Bullet") for r in p.runs: set_run_font(r, size_pt=11) def add_table(doc: Document, headers: list[str], rows: list[list[str]]): table = doc.add_table(rows=1, cols=len(headers)) table.style = "Table Grid" hdr_cells = table.rows[0].cells for i, h in enumerate(headers): hdr_cells[i].text = h for p in hdr_cells[i].paragraphs: for r in p.runs: set_run_font(r, size_pt=11, bold=True) for row in rows: cells = table.add_row().cells for i, v in enumerate(row): cells[i].text = v for p in cells[i].paragraphs: for r in p.runs: set_run_font(r, size_pt=11) return table def main(): doc = Document() # 封面 doc.add_heading("钻井液品牌网站\n测试报告", level=0) add_paragraph(doc, "版本:V1.0") add_paragraph(doc, f"日期:{date.today().isoformat()}") add_paragraph(doc, "编写:测试与质量保障小组") add_paragraph(doc, "项目单位:川庆钻探工程公司(示例)") doc.add_page_break() # 目录提示(Word 可自动生成) add_heading(doc, "文档说明", level=1) add_paragraph( doc, "本测试报告用于记录“钻井液品牌网站”项目在测试阶段的测试范围、测试方法、测试环境、测试过程与结果," "并对缺陷情况进行汇总分析,形成项目上线与验收的质量依据。" "本文档为验收资料的一部分,建议在 Word 中通过“引用-目录”自动生成目录。", ) # 1 概述 add_heading(doc, "1 概述", level=1) add_heading(doc, "1.1 测试目的", level=2) add_paragraph( doc, "通过系统化测试验证钻井液品牌网站在功能、兼容性、易用性、性能与基础安全等方面满足软件需求说明书和验收标准的要求," "为上线提供客观、可追溯的质量结论。", ) add_heading(doc, "1.2 测试范围", level=2) add_paragraph( doc, "本次测试覆盖网站前台主要模块及其关键业务链路,包含多语言(中文/英文/俄文/西班牙文)页面、" "导航与页脚跳转、产品/体系/技术/实验室团队/生产制造/联系我们等页面的展示与交互逻辑。" "本次测试不包含后台 CMS(本期未建设)及与第三方系统的深度接口联调(如后续建设将另行开展)。", ) add_heading(doc, "1.3 参考文档", level=2) add_bullets( doc, [ "《钻井液品牌网站-软件需求说明书》", "《钻井液品牌网站-系统概要设计说明书》", "《钻井液品牌网站-详细设计说明书》", "《钻井液品牌网站-测试大纲》", "公司信息化相关制度与网站发布规范(如有)", ], ) add_heading(doc, "1.4 术语与缩写", level=2) add_bullets( doc, [ "SRS:Software Requirements Specification,软件需求说明书", "UAT:User Acceptance Test,用户验收测试(此处用于描述验收视角的测试)", "URL:统一资源定位符", "Nginx:常用反向代理与 Web 服务器软件(示例)", ], ) # 2 测试组织与资源 add_heading(doc, "2 测试组织与资源", level=1) add_heading(doc, "2.1 测试组织与职责", level=2) add_paragraph( doc, "测试工作由测试与质量保障小组牵头,开发团队配合问题定位与修复,业务代表参与关键页面文案与展示效果确认。" "测试职责包括:制定测试计划、编写并评审测试用例、执行测试、记录缺陷、组织回归、输出测试报告与质量结论。", ) add_heading(doc, "2.2 测试资源与工具", level=2) add_bullets( doc, [ "浏览器:Chrome、Edge、Firefox、Safari(版本以测试机实际安装为准)", "辅助工具:浏览器开发者工具(Network/Console/Performance)、截图工具", "缺陷记录:缺陷跟踪表(Excel)或缺陷管理系统(如公司统一平台)", "性能抽测:浏览器网络面板、简单并发压测工具(如 JMeter/ab,视条件而定)", ], ) # 3 测试环境 add_heading(doc, "3 测试环境", level=1) add_heading(doc, "3.1 环境说明", level=2) add_paragraph( doc, "本次测试环境原则上与生产环境保持一致或高度相似,使用同一套静态资源目录结构与访问方式。" "如存在测试环境与生产环境差异(网络带宽、证书、域名等),需在上线前进行必要的复核验证。", ) add_heading(doc, "3.2 环境信息(示例)", level=2) add_table( doc, headers=["类别", "内容"], rows=[ ["部署方式", "静态资源部署 + Web/反向代理(如 Nginx)对外提供访问"], ["访问协议", "HTTP/HTTPS(建议正式环境启用 HTTPS)"], ["语言版本", "Chinese / English / Russian / Spain"], ["终端类型", "PC 浏览器 / 移动端浏览器(抽测)"], ["静态资源目录", "/static/css、/static/js、/static/imgs 等"], ], ) # 4 测试策略与方法 add_heading(doc, "4 测试策略与方法", level=1) add_heading(doc, "4.1 测试类型", level=2) add_bullets( doc, [ "功能测试:按模块与关键流程验证页面展示、跳转、参数逻辑是否正确", "链接与死链检查:重点检查顶部导航、页脚链接、列表到详情的跳转", "兼容性测试:不同浏览器/分辨率下页面布局与交互一致性", "易用性检查:文案可读性、交互引导、页面一致性", "性能抽测:首屏加载时间、静态资源缓存策略效果(抽样)", "基础安全检查:HTTPS、目录访问限制、异常参数容错(抽样)", ], ) add_heading(doc, "4.2 测试覆盖原则", level=2) add_paragraph( doc, "测试覆盖遵循“核心流程优先、关键页面全覆盖、跨语言一致性验证、缺陷闭环回归”的原则。" "对领导验收关注点(多语言一致性、页面美观、链接准确、可用性稳定)进行重点加测。", ) # 5 测试内容与结果汇总 add_heading(doc, "5 测试内容与结果汇总", level=1) add_heading(doc, "5.1 需求覆盖与功能点检查", level=2) add_table( doc, headers=["模块", "关键检查点", "结果", "备注"], rows=[ ["多语言与导航", "四语入口、语言切换、导航高亮", "通过", "抽测关键页,未见异常"], ["页脚链接", "产品/体系/技术/团队/制造链接可跳转", "通过", "需持续防止漏改页面"], ["产品模块", "列表->类型页->详情/参数展示", "通过", "以抽样数据验证"], ["体系模块", "体系详情页 data 参数可用", "通过", "system_detail.html?data=xx"], ["技术模块", "技术详情页 data 参数可用", "通过", "technology_detail.html?data=xx"], ["团队/实验室", "中心/实验室/团队/泥浆厂页面跳转", "通过", "抽测多语言一致性"], ["生产制造", "manu.html Tab 切换 + URL tab 参数定位", "通过", "tab=1/2/3/4"], ["联系我们", "联系方式展示完整、文案正确", "通过", "抽测多语言页面"], ], ) add_heading(doc, "5.2 兼容性测试结果(示例)", level=2) add_table( doc, headers=["浏览器", "版本", "分辨率", "主要页面展示", "结论"], rows=[ ["Chrome", "(按测试机实际)", "1920x1080", "正常", "通过"], ["Edge", "(按测试机实际)", "1920x1080", "正常", "通过"], ["Firefox", "(按测试机实际)", "1920x1080", "基本正常", "通过(个别样式需复核)"], ["Safari", "(按测试机实际)", "1440x900", "基本正常", "通过(个别字体渲染差异)"], ], ) add_heading(doc, "5.3 性能抽测结论(示例)", level=2) add_paragraph( doc, "在典型网络环境下对首页与主要模块页面进行抽样测试,首屏加载时间满足“3 秒内完成基础可用”的目标(以抽测结果为准)。" "建议在正式环境启用静态资源缓存、Gzip/Brotli 压缩与图片尺寸控制,并结合监控平台持续观察上线后的访问性能。", ) # 6 缺陷统计与分析 add_heading(doc, "6 缺陷统计与分析", level=1) add_heading(doc, "6.1 缺陷分级标准(建议)", level=2) add_bullets( doc, [ "致命(S1):导致网站不可用、核心链路完全不可用(首页无法打开、主要模块无法访问)", "严重(S2):影响核心功能或大量用户体验(大面积错链、关键页面布局崩坏)", "一般(S3):影响非核心功能或局部体验(个别文案错误、个别样式问题)", "建议(S4):优化建议(交互优化、展示优化、文案润色建议)", ], ) add_heading(doc, "6.2 缺陷汇总(示例模板)", level=2) add_paragraph( doc, "本节用于填写本项目实际缺陷情况。若采用缺陷管理系统,可将缺陷列表导出并作为附录;" "若采用 Excel,可将关键字段汇总如下表。以下为模板示例(请结合实际测试记录补充)。", ) add_table( doc, headers=["编号", "标题", "严重级别", "状态", "发现版本", "修复版本", "备注"], rows=[ ["BUG-001", "(示例)某页脚链接跳转错误", "S2", "已关闭", "V1.0", "V1.0", "已修复并回归通过"], ["BUG-002", "(示例)Safari 下图片布局偏移", "S3", "已关闭", "V1.0", "V1.0", "样式兼容修复"], ["BUG-003", "(示例)多语言文案错别字", "S3", "已关闭", "V1.0", "V1.0", "已更正"], ], ) add_heading(doc, "6.3 缺陷原因分析与改进建议", level=2) add_paragraph( doc, "结合官网项目特点,常见缺陷原因包括:多语言页面数量多导致漏改、复制粘贴造成链接不一致、" "浏览器差异引发的样式兼容问题等。建议通过以下措施改进:\n" "(1)建立统一的页脚与公共组件管理方式,减少手工重复修改;\n" "(2)引入链接清单与自动化检查脚本,定期扫描死链/错链;\n" "(3)在发布前执行跨浏览器抽测,并建立固定测试用例集用于回归;\n" "(4)对关键页面建立检查表,确保上线前逐项核对。", ) # 7 风险与遗留问题 add_heading(doc, "7 风险与遗留问题", level=1) add_paragraph( doc, "本节用于记录上线前仍需关注的风险点与遗留事项(如有)。" "例如:正式域名 HTTPS 证书上线切换、外网访问带宽波动、搜索引擎收录策略、" "多语言内容持续更新机制等。建议形成遗留事项清单并指定责任人跟踪闭环。", ) # 8 测试结论与上线建议 add_heading(doc, "8 测试结论与上线建议", level=1) add_heading(doc, "8.1 测试结论", level=2) add_paragraph( doc, "综合功能测试、链接检查、兼容性测试与性能抽测结果,钻井液品牌网站整体满足需求说明书对主要功能与展示效果的要求," "未发现阻断上线的致命缺陷(以实际缺陷统计为准)。建议在完成必要的上线前复核(域名、证书、缓存策略、监控告警)后进入上线流程。", ) add_heading(doc, "8.2 上线建议与检查清单(建议)", level=2) add_bullets( doc, [ "上线前进行一次全站链接抽查(重点:页脚与导航、产品/体系/技术详情跳转)", "确认正式环境的 HTTPS 证书、域名解析、80/443 端口策略与重定向规则", "确认静态资源缓存策略与压缩策略生效(gzip/brotli、cache-control)", "接入公司统一监控与告警平台,配置关键 URL 健康检查", "归档交付物:需求、设计、测试大纲、测试报告、源代码与部署说明等", ], ) # 9 附录 add_heading(doc, "9 附录", level=1) add_heading(doc, "9.1 测试用例执行记录(建议附表)", level=2) add_paragraph( doc, "建议将详细测试用例执行记录(用例编号、步骤、预期、实际、结果、截图)以附件形式保存," "并在验收归档时随测试报告一并存档。", ) add_heading(doc, "9.2 截图与关键页面证据(建议)", level=2) add_paragraph( doc, "建议对首页、产品/体系/技术/生产制造等关键页面在四种语言版本下截取关键截图," "作为展示效果与多语言一致性的证据材料,便于验收会现场展示和后续追溯。", ) os.makedirs("docs", exist_ok=True) output_path = os.path.join("docs", "钻井液品牌网站-测试报告.docx") doc.save(output_path) print(f"Test report generated at: {output_path}") if __name__ == "__main__": main()