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

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

上级 b7bcebb6
...@@ -1721,16 +1721,18 @@ def approval_status_control(message_name, approval_type, wd): ...@@ -1721,16 +1721,18 @@ def approval_status_control(message_name, approval_type, wd):
import os import os
import openpyxl import openpyxl
import logging 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文件的路径。 xlsx_file_path (str): XLSX文件的路径。
sheet_name (str): 工作表的名称。 sheet_name (str): 工作表的名称。
function_number (str): 功能编号,用于匹配行。 function_number (str): 功能编号,用于匹配行。
column_name (str): 要写入数据的列名 test_result (str): 测试结果
data (list): 要写入的数据列表 log_screenshot (str): 日志截图路径
""" """
try: try:
# 打开XLSX文件 # 打开XLSX文件
...@@ -1755,24 +1757,44 @@ def write_xlsx_data(xlsx_file_path, sheet_name, function_number, column_name, da ...@@ -1755,24 +1757,44 @@ def write_xlsx_data(xlsx_file_path, sheet_name, function_number, column_name, da
# 打印表头列名 # 打印表头列名
logging.info(f"表头列名: {headers}") logging.info(f"表头列名: {headers}")
# 找到表头中名为 'function_number' 和 'column_name' 的列索引 # 找到表头中名为 '功能编号'、'测试结果' 和 '日志截图' 的列索引
try: try:
function_number_index = headers.index("功能编号") function_number_index = headers.index("功能编号")
except ValueError as e: except ValueError as e:
raise ValueError(f"表头中没有找到 '功能编号' 列: {e}") raise ValueError(f"表头中没有找到 '功能编号' 列: {e}")
try: try:
column_index = headers.index(column_name) test_result_index = headers.index("测试结果")
except ValueError as e: 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): for row in sheet.iter_rows(min_row=4, values_only=False):
if row[function_number_index] == function_number: if row[function_number_index].value == function_number:
row_num = row[0].row # 填充测试结果
for data_index, value in enumerate(data, start=0): row[test_result_index].value = test_result
cell = sheet.cell(row=row_num + data_index, column=column_index + 1) # 列索引从1开始
cell.value = value # 插入日志截图
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 break
else: else:
raise ValueError(f"未找到功能编号为 {function_number} 的行") raise ValueError(f"未找到功能编号为 {function_number} 的行")
...@@ -1780,6 +1802,6 @@ def write_xlsx_data(xlsx_file_path, sheet_name, function_number, column_name, da ...@@ -1780,6 +1802,6 @@ def write_xlsx_data(xlsx_file_path, sheet_name, function_number, column_name, da
# 保存修改后的文件 # 保存修改后的文件
try: try:
workbook.save(xlsx_file_path) 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: except Exception as e:
logging.error(f"保存文件时出错: {e}") logging.error(f"保存文件时出错: {e}")
\ No newline at end of file
...@@ -267,3 +267,5 @@ ...@@ -267,3 +267,5 @@
71. 2025-03-21 71. 2025-03-21
- 实现通过JSON数据中对应的name值来区分测试用例数量。 - 实现通过JSON数据中对应的name值来区分测试用例数量。
- 补充write_xlsx_data函数用以将测试结果与日志截图写入到xlsx测试用例文件中。调试write_xlsx_data函数与统一平台的窗口切换关闭。 - 补充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: ...@@ -23,7 +23,7 @@ class ChangAnMessageApproval:
ddt_cases = read_xlsx_data(xlsx_file_path, sheet_name='会议审批') ddt_cases = read_xlsx_data(xlsx_file_path, sheet_name='会议审批')
# 测试开始前调用clear_columns_in_xlsx函数,将测试用例中的测试结果和日志截图置空 # 测试开始前调用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): def teststeps(self):
""" """
...@@ -63,9 +63,9 @@ class ChangAnMessageApproval: ...@@ -63,9 +63,9 @@ class ChangAnMessageApproval:
"Template_Edit", "长安审批测试") "Template_Edit", "长安审批测试")
INFO(f"提示信息为:{notify_text}") INFO(f"提示信息为:{notify_text}")
if CHECK_POINT("编辑测试判断是否正确", expented_result in 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: 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") SELENIUM_LOG_SCREEN(wd, "50")
elif element_type == "function": elif element_type == "function":
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论