Skip to content

一、自动化测试中的数据处理痛点 ​

在自动化测试工程、测试数据准备以及跨系统数据核对(对账)场景中,测试人员经常需要处理包含数十列、上万行测试用例或结果报表的 Excel / CSV 文件。

如果单纯使用原生的 csv 模块或底层的 openpyxl / xlwt / xlrd:

  1. 代码冗长繁琐:遍历单元格、获取行数、格式转换需要写大量循环;
  2. 性能低下:处理上万行表格时耗时极长;
  3. 数据清洗复杂:难以高效完成空值填充、字段过滤与两表批量对账。

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 数据的繁重体力劳动。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win