目录
前言
1.报告数据准备
1.1读取Word表格内容
1.2获取图片相对路径+图片名
1.3插入图片
2.生成Word报告
2.1read_table()函数读取Word表格
2.2get_picture()函数获取图片相对路径+图片名
2.3生成报告代码
总结
获取Word文件中的关键信息、文件夹的图片,用于生成新的Word报告
from docx import Document
doc = Document("测试规范.docx") # 打开测试规范
# 遍历word中的所有表格
for tb in doc.tables:
print(tb.cell(0, 1).text) # 获取第1行第2列的内容
import os
dir_path = r"测试图片/" # 目标文件夹
for file in os.listdir(dir_path):
dir_path = "测试图片/" + file # 图片路径+图片名
print(dir_path) # 测试图片/TC_IL_001.png、测试图片/TC_IL_002.png
# 获取表格对象第4行第2列中的段落
cell = table.cell(3, 1)
p = cell.paragraphs[0]
# 表格中添加图片
run.add_picture("yun_zhi.png", width=Cm(5)) # 图片大小会影响表格宽度
效果如图
内容如图:
实现代码:
def read_table():
"""
读取Word文档中表格的[用例ID],[测试项],[期望值],存放到列表中
:return:
"""
doc = Document("测试规范.docx") # 打开测试规范
id_item_expect = [[], [], []] # 二维列表:[[用例ID],[测试项],[期望值]]
# 遍历word中的所有表格
for tb in doc.tables:
if "用例ID" in tb.cell(0, 0).text:
id_item_expect[0].append(tb.cell(0, 1).text) # 将测试规范的用例ID添加到列表中
id_item_expect[1].append(tb.cell(1, 1).text) # 将测试规范的测试项添加到列表中
id_item_expect[2].append(tb.cell(3, 1).text) # 将测试规范的期望值添加到列表中
return id_item_expect
def get_picture():
"""
获取目标文件夹图片的相对路径+文件名,存放在列表中
:return:存放图片信息的列表
"""
dir_path = r"测试图片/" # 目标文件夹
pic_list = [] # 存放图片信息的列表
# 遍历文件夹内的文件
for file in os.listdir(dir_path):
dir_path = "测试图片/" + file # 相对路径+文件名
new_path = dir_path.replace("-", "_") # 将图片名中“-”替换为“_”,与用例名保持一致
pic_list.append(new_path) # 记录新文件路径+文件名
# 错误预处理
try:
os.renames(dir_path, new_path) # 重命名
except Exception as e:
print(e) # 当文件已存在时,无法创建该文件。: '测试图片/TC_IL-001.png' -> '测试图片/TC_IL_001.png'
return 0 # 重命名失败直接返回0
print(f"共找到:{len(pic_list)}张图片。")
return pic_list
# coding=gbk 声明编码
from docx import Document
from docx.shared import Inches, Cm, Pt, RGBColor
import os
def read_table():
"""
读取Word文档中表格的[用例ID],[测试项],[期望值],存放到列表中
:return:
"""
doc = Document("测试规范.docx") # 打开测试规范
id_item_expect = [[], [], []] # 二维列表:[[用例ID],[测试项],[期望值]]
# 遍历word中的所有表格
for tb in doc.tables:
if "用例ID" in tb.cell(0, 0).text:
id_item_expect[0].append(tb.cell(0, 1).text) # 将测试规范的用例ID添加到列表中
id_item_expect[1].append(tb.cell(1, 1).text) # 将测试规范的测试项添加到列表中
id_item_expect[2].append(tb.cell(3, 1).text) # 将测试规范的期望值添加到列表中
return id_item_expect
def get_picture():
"""
获取目标文件夹图片的相对路径+文件名,存放在列表中
:return:存放图片信息的列表
"""
dir_path = r"测试图片/" # 目标文件夹
pic_list = [] # 存放图片信息的列表
# 遍历文件夹内的文件
for file in os.listdir(dir_path):
dir_path = "测试图片/" + file # 相对路径+文件名
new_path = dir_path.replace("-", "_") # 将图片名中“-”替换为“_”,与用例名保持一致
pic_list.append(new_path) # 记录新文件路径+文件名
# 错误预处理
try:
os.renames(dir_path, new_path) # 重命名
except Exception as e:
print(e) # 当文件已存在时,无法创建该文件。: '测试图片/TC_IL-001.png' -> '测试图片/TC_IL_001.png'
return 0 # 重命名失败直接返回0
print(f"共找到:{len(pic_list)}张图片。")
return pic_list
def generate_report():
doc = Document()
i = 0
rep_name = "测试报告.docx" # 报告名称
doc.add_heading("测试记录", level=2) # 添加测试记录2级标题
id_item_expect = read_table() # 从测试规范中获取用例ID、测试项、期望结果
pic_list = get_picture() # 获取图片名
# 图片数量为0时
if pic_list == 0:
return
# i小于总表格个数
while i < len(id_item_expect[0]):
doc.add_heading("测试项" + str(i + 1), level=3) # 添加标题3,i从1递增
# 添加4行2列的表格,Table Grid表格样式为标准线框
table = doc.add_table(rows=4, cols=2, style="Table Grid")
table.cell(0, 0).text = "用例ID"
table.cell(1, 0).text = "测试项"
table.cell(2, 0).text = "期望结果"
table.cell(3, 0).text = "测试结果"
table.cell(0, 1).text = id_item_expect[0][i] # 填充"用例ID"
table.cell(1, 1).text = id_item_expect[1][i] # 填充"测试项"
table.cell(2, 1).text = id_item_expect[2][i] # 填充"期望结果"
# 设置表格宽度,图片大小会影响效果
table.cell(0, 1).width = Cm(18)
# 获取表格对象第4行第2列中的段落
cell = table.cell(3, 1)
p = cell.paragraphs[0]
# 添加测试结果,可根据具体情况修改条件
if i % 2 == 0:
run = p.add_run("Pass\n")
run.font.color.rgb = RGBColor(0, 255, 0) # 设置字体颜色RGB
else:
run = p.add_run("Fail\n")
run.font.color.rgb = RGBColor(255, 0, 0) # 设置字体颜色RGB
# 表格中添加图片
run.add_picture(pic_list[i], width=Cm(5)) # 图片大小会影响表格宽度
doc.add_paragraph() # 换行
i += 1
# 保存文件
doc.save(rep_name)
print(f"文件名:{rep_name}")
if __name__ == "__main__":
generate_report() # 测试报告
效果如图: