python-docx插入图片生成Word报告

目录

前言

1.报告数据准备

1.1读取Word表格内容

1.2获取图片相对路径+图片名

1.3插入图片

2.生成Word报告

2.1read_table()函数读取Word表格

2.2get_picture()函数获取图片相对路径+图片名

2.3生成报告代码

总结


前言

获取Word文件中的关键信息、文件夹的图片,用于生成新的Word报告

1.报告数据准备

1.1读取Word表格内容

from docx import Document
doc = Document("测试规范.docx")  # 打开测试规范
# 遍历word中的所有表格
for tb in doc.tables:
    print(tb.cell(0, 1).text)  # 获取第1行第2列的内容

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

1.3插入图片

# 获取表格对象第4行第2列中的段落
cell = table.cell(3, 1)
p = cell.paragraphs[0]
# 表格中添加图片
run.add_picture("yun_zhi.png", width=Cm(5))  # 图片大小会影响表格宽度

效果如图

python-docx插入图片生成Word报告_第1张图片

2.生成Word报告

2.1read_table()函数读取Word表格

内容如图:

python-docx插入图片生成Word报告_第2张图片

实现代码:

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

2.2get_picture()函数获取图片相对路径+图片名

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

2.3生成报告代码

# 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()  # 测试报告

效果如图:

python-docx插入图片生成Word报告_第3张图片

总结

  1. 对Word文档表格的读写操作,通过styles属性设置表格式、表格宽度、字体样式。
  2. 可自动添加目标文件夹内的图片、调节图片大小
  3. 能够根据给定的Word报告模板,将生成的内容添加到后面。

你可能感兴趣的:(python,自动化,功能测试)