提交 93803d12 authored 作者: 陈泽健's avatar 陈泽健

优化write_xlsx_data函数实现表格自动填充测试结果和日志截图功能。

上级 b7bcebb6
......@@ -1721,16 +1721,18 @@ def approval_status_control(message_name, approval_type, wd):
import os
import openpyxl
import logging
def write_xlsx_data(xlsx_file_path, sheet_name, function_number, column_name, data):
from openpyxl.drawing.image import Image
from openpyxl.utils import get_column_letter
def write_xlsx_data(xlsx_file_path, sheet_name, function_number, test_result, log_screenshot):
"""
在XLSX文件的指定列的指定功能编号的行开始填充测试数据
在XLSX文件的指定行中填充测试结果和日志截图
参数:
xlsx_file_path (str): XLSX文件的路径。
sheet_name (str): 工作表的名称。
function_number (str): 功能编号,用于匹配行。
column_name (str): 要写入数据的列名
data (list): 要写入的数据列表
test_result (str): 测试结果
log_screenshot (str): 日志截图路径
"""
try:
# 打开XLSX文件
......@@ -1755,24 +1757,44 @@ def write_xlsx_data(xlsx_file_path, sheet_name, function_number, column_name, da
# 打印表头列名
logging.info(f"表头列名: {headers}")
# 找到表头中名为 'function_number' 和 'column_name' 的列索引
# 找到表头中名为 '功能编号'、'测试结果' 和 '日志截图' 的列索引
try:
function_number_index = headers.index("功能编号")
except ValueError as e:
raise ValueError(f"表头中没有找到 '功能编号' 列: {e}")
try:
column_index = headers.index(column_name)
test_result_index = headers.index("测试结果")
except ValueError as e:
raise ValueError(f"表头中没有找到所需的列: {column_name}")
raise ValueError(f"表头中没有找到 '测试结果' 列: {e}")
try:
log_screenshot_index = headers.index("日志截图")
except ValueError as e:
raise ValueError(f"表头中没有找到 '日志截图' 列: {e}")
# 遍历数据行,找到与给定功能编号匹配的行
for row in sheet.iter_rows(min_row=4, values_only=True):
if row[function_number_index] == function_number:
row_num = row[0].row
for data_index, value in enumerate(data, start=0):
cell = sheet.cell(row=row_num + data_index, column=column_index + 1) # 列索引从1开始
cell.value = value
for row in sheet.iter_rows(min_row=4, values_only=False):
if row[function_number_index].value == function_number:
# 填充测试结果
row[test_result_index].value = test_result
# 插入日志截图
if log_screenshot:
img = Image(log_screenshot)
# 获取单元格的宽度和高度
cell = row[log_screenshot_index]
cell_width = sheet.column_dimensions[get_column_letter(cell.column)].width
cell_height = sheet.row_dimensions[cell.row].height
# 调整图片大小以适应单元格
img.width = cell_width * 7 # 7 是一个经验值,根据需要调整
img.height = cell_height * 1.5 # 1.5 是一个经验值,根据需要调整
# 设置图片位置
sheet.add_image(img, cell.coordinate)
break
else:
raise ValueError(f"未找到功能编号为 {function_number} 的行")
......@@ -1780,6 +1802,6 @@ def write_xlsx_data(xlsx_file_path, sheet_name, function_number, column_name, da
# 保存修改后的文件
try:
workbook.save(xlsx_file_path)
logging.info(f"文件 {xlsx_file_path} 已保存,数据已写入功能编号为 {function_number} 的行,列 {column_name}。")
logging.info(f"文件 {xlsx_file_path} 已保存,数据已写入功能编号为 {function_number} 的行。")
except Exception as e:
logging.error(f"保存文件时出错: {e}")
\ No newline at end of file
......@@ -266,4 +266,6 @@
- 补充clear_columns_in_xlsx函数实现在读取测试用例前,先将测试结果和日志截图清空。
71. 2025-03-21
- 实现通过JSON数据中对应的name值来区分测试用例数量。
- 补充write_xlsx_data函数用以将测试结果与日志截图写入到xlsx测试用例文件中。调试write_xlsx_data函数与统一平台的窗口切换关闭。
\ No newline at end of file
- 补充write_xlsx_data函数用以将测试结果与日志截图写入到xlsx测试用例文件中。调试write_xlsx_data函数与统一平台的窗口切换关闭。
72. 2025-03-24
- 优化write_xlsx_data函数实现表格自动填充测试结果和日志截图功能。
\ No newline at end of file
......@@ -23,7 +23,7 @@ class ChangAnMessageApproval:
ddt_cases = read_xlsx_data(xlsx_file_path, sheet_name='会议审批')
# 测试开始前调用clear_columns_in_xlsx函数,将测试用例中的测试结果和日志截图置空
clear_columns_in_xlsx(xlsx_file_path, sheet_name='会议审批')
clear_columns_in_xlsx(xlsx_file_path, sheet_name='会议审批',columns_to_clear=['测试结果', '测试频次', '日志截图'])
def teststeps(self):
"""
......@@ -63,9 +63,9 @@ class ChangAnMessageApproval:
"Template_Edit", "长安审批测试")
INFO(f"提示信息为:{notify_text}")
if CHECK_POINT("编辑测试判断是否正确", expented_result in notify_text):
write_xlsx_data(xlsx_file_path, "会议审批", name,"测试结果", "通过")
write_xlsx_data(xlsx_file_path, "会议审批", name,"失败", r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Android\门口屏截屏.png")
else:
write_xlsx_data(xlsx_file_path, "会议审批", name,"测试结果", "失败")
write_xlsx_data(xlsx_file_path, "会议审批", name,"通过", r"D:\GithubData\自动化\ubains-module-test\预定系统\reports\imgs\Exhibit_Inspect\Android\门口屏截屏.png")
SELENIUM_LOG_SCREEN(wd, "50")
elif element_type == "function":
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论