一、自动化测试中的数据处理痛点
在自动化测试工程、测试数据准备以及跨系统数据核对(对账)场景中,测试人员经常需要处理包含数十列、上万行测试用例或结果报表的 Excel / CSV 文件。
如果单纯使用原生的 csv 模块或底层的 openpyxl / xlwt / xlrd:
- 代码冗长繁琐:遍历单元格、获取行数、格式转换需要写大量循环;
- 性能低下:处理上万行表格时耗时极长;
- 数据清洗复杂:难以高效完成空值填充、字段过滤与两表批量对账。
Pandas 作为 Python 数据处理领域的标准工具,以 DataFrame(二维数据结构)为核心,能在几行代码内完成极为复杂的表格批量处理。
二、多 Sheet 表格灵活读取
使用 pd.read_excel 支持针对多工作表(Sheet)的灵活提取:
python
import pandas as pd
def inspect_excel_structure(file_path: str):
# 1. 传入 sheet_name=None 可一次性读取所有工作表,返回字典: {sheet_name: df}
all_sheets = pd.read_excel(file_path, sheet_name=None)
print("发现的工作表清单:", list(all_sheets.keys()))
# 2. 读取特定工作表并指定第 1 行为表头(header=0)
df_users = pd.read_excel(file_path, sheet_name="测试用户数据", header=0)
print(f"行数: {df_users.shape[0]}, 列数: {df_users.shape[1]}")
return df_users三、DataFrame 行级遍历与数据清洗
在将测试数据灌入自动化用例或数据库前,通常需要清洗特殊字符、中文标点或去除头尾空白:
python
def clean_test_dataset(df: pd.DataFrame) -> pd.DataFrame:
"""清洗表格中的测试脏数据"""
# 1. 批量去除字符串列的首尾多余空格
df = df.applymap(lambda s: s.strip() if isinstance(s, str) else s)
# 2. 遍历每一行执行业务级字段清洗
for index, row in df.iterrows():
# 获取当前行原始列表
row_values = list(row)
cleaned_row = []
for val in row_values:
if isinstance(val, str):
# 剔除常见的非法截断符号或测试残留标记
val = val.replace(",。", "").replace("\n", "")
cleaned_row.append(val)
# 使用 .loc 按行索引写回 DataFrame
df.loc[index, :] = cleaned_row
# 3. 填充缺失值(NaN)为预设缺省值
df.fillna({"备注": "无说明", "并发权重": 1}, inplace=True)
return df四、多 Sheet 批量导出:ExcelWriter
默认的 df.to_excel() 每次调用都会覆盖文件。若需要将“成功用例结果”与“失败用例明细”同时写入同一个 Excel 文件的不同 Sheet,必须借助 pd.ExcelWriter 上下文管理器:
python
def export_multi_sheet_report(df_passed: pd.DataFrame, df_failed: pd.DataFrame, output_path: str):
"""将多个测试结果集输出到同一个 Excel 文件的不同工作表中"""
with pd.ExcelWriter(output_path, engine="openpyxl") as writer:
# index=False 表示不写入 DataFrame 默认的行索引号 (0, 1, 2...)
df_passed.to_excel(writer, sheet_name="成功用例明细", index=False)
df_failed.to_excel(writer, sheet_name="失败缺陷用例", index=False)
print(f"✓ 自动化测试汇总报告成功输出至: {output_path}")五、两表数据自动对账比对(Diff)
在验证数据迁移或数据库 ETL 处理是否正确时,使用 Pandas 可以秒级找出源表与目标表的差异:
python
def verify_dataset_consistency(source_file: str, target_file: str):
df_src = pd.read_excel(source_file)
df_tgt = pd.read_excel(target_file)
# 1. 全局严格一致性断言
if df_src.equals(df_tgt):
print("✓ 两份数据集内容完全一致")
return True
# 2. 精准定位差异行(取两表的非交集部分)
comparison = pd.concat([df_src, df_tgt]).drop_duplicates(keep=False)
print("发现不一致的脏数据行:")
print(comparison)
return False借助 Pandas,自动化测试工程师可以彻底告别手动比对几万条 Excel 数据的繁重体力劳动。