You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TestCafe对比两个Excel工作表的数据?求实现方案

使用TestCafe对比两个Excel工作表数据的实现方案

TestCafe本身不提供直接操作Excel的API,我们需要结合Node.js的第三方库(如xlsx)来读取Excel数据,再编写对比逻辑实现工作表数据的异同验证。以下是具体实施步骤:

1. 安装依赖包

首先安装处理Excel的xlsx库,以及简化数据对比的lodash库:

npm install xlsx lodash --save-dev

2. 编写Excel数据读取工具

创建一个工具文件(比如excelUtils.js),封装读取指定工作表数据的函数,将Excel表格转换为结构化的JSON数组:

const XLSX = require('xlsx');

// 读取Excel指定工作表并转为JSON数组
function readExcelSheet(filePath, sheetName) {
  const workbook = XLSX.readFile(filePath);
  const worksheet = workbook.Sheets[sheetName];
  // 将工作表转为JSON,header:1表示用第一行作为键名
  return XLSX.utils.sheet_to_json(worksheet, { header: 1 });
}

module.exports = { readExcelSheet };

3. 编写数据对比逻辑

在工具文件中添加对比函数,基于唯一标识列(比如ID)找出两个数据集的差异:

const _ = require('lodash');

// 对比两个工作表数据,返回差异结果
function compareSheets(data1, data2, keyIndex = 0) {
  // 转换为以主键为键的对象,方便快速查找
  const data1Map = _.keyBy(data1, item => item[keyIndex]);
  const data2Map = _.keyBy(data2, item => item[keyIndex]);

  const added = [];    // data2有但data1没有的条目
  const removed = [];  // data1有但data2没有的条目
  const modified = []; // 主键存在但内容不同的条目

  // 查找新增和修改的条目
  _.forEach(data2Map, (item, key) => {
    if (!data1Map[key]) {
      added.push(item);
    } else if (!_.isEqual(item, data1Map[key])) {
      modified.push({
        old: data1Map[key],
        new: item
      });
    }
  });

  // 查找删除的条目
  _.forEach(data1Map, (item, key) => {
    if (!data2Map[key]) {
      removed.push(item);
    }
  });

  return { added, removed, modified };
}

module.exports = { readExcelSheet, compareSheets };

4. 集成到TestCafe测试脚本

创建TestCafe测试文件(比如excelComparison.test.js),调用工具函数完成数据对比,并输出或断言差异:

const { readExcelSheet, compareSheets } = require('./excelUtils');
const { t } = require('testcafe');

fixture('Excel工作表数据对比')
  .page('about:blank'); // TestCafe需要指定页面,用空白页即可

test('对比两个Excel工作表的异同', async () => {
  // 读取两个Excel文件的指定工作表
  const sheet1Data = readExcelSheet('./file1.xlsx', 'Sheet1');
  const sheet2Data = readExcelSheet('./file2.xlsx', 'Sheet2');

  // 对比数据(假设第0列是唯一标识ID)
  const diffResult = compareSheets(sheet1Data, sheet2Data, 0);

  // 输出差异结果到控制台
  console.log('=== 新增条目 ===');
  console.log(diffResult.added);
  console.log('=== 删除条目 ===');
  console.log(diffResult.removed);
  console.log('=== 修改条目 ===');
  console.log(diffResult.modified);

  // 可选:如果需要验证数据完全一致,添加断言
  await t.expect(diffResult.added.length).eql(0, '存在新增条目');
  await t.expect(diffResult.removed.length).eql(0, '存在删除条目');
  await t.expect(diffResult.modified.length).eql(0, '存在修改条目');
});

5. 运行测试

执行TestCafe命令运行测试:

testcafe chrome excelComparison.test.js

注意事项

  • 确保Excel文件路径正确,建议使用相对路径或绝对路径
  • 唯一标识列的索引可以根据实际表格调整(比如如果ID在第2列,就传2)
  • 如果表格有合并单元格或特殊格式,需要在sheet_to_json中调整配置(参考xlsx官方文档)

内容的提问来源于stack exchange,提问作者Gayani Madhushika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:32:01