使用断言比较两个 excel 文件
Using assertions to compare two excel files
我正在使用 Visual Studio 创建一个创建两个 excel 工作表的自动化测试。作为最后的检查,我需要比较这两个 excel 表的内容并确保它们相等。有什么方法可以用断言来做到这一点吗?
类似于 Assert.AreEqual(file1, file2);
?
如有任何帮助或指导,我们将不胜感激!
能否将 expected/actual Excel 工作表转换为文本格式,例如 CSV?
如果是这样,您可以改用 Approval Tests。这允许您将文本文件作为 "expected" 测试结果。当测试失败时,它可以向您显示测试的实际结果,与预期结果不同。
从 this review 批准测试中截取的屏幕截图。
一个选项将使用名为 EPPlus
的开源库。您可以下载并在您的自动化测试应用程序中引用它。 EPPlus 为您提供了多种读取 excel 文件并进行比较的方法。一种这样的选择是 C# Datatable。这是一个示例代码..
public static DataTable GetDataTableFromExcel(string path, bool hasHeader = true)
{
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (var stream = File.OpenRead(path))
{
pck.Load(stream);
}
var ws = pck.Workbook.Worksheets.First();
DataTable tbl = new DataTable();
foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
{
tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
}
var startRow = hasHeader ? 2 : 1;
for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
DataRow row = tbl.Rows.Add();
foreach (var cell in wsRow)
{
row[cell.Start.Column - 1] = cell.Text;
}
}
return tbl;
}
}
对于Excel两个文件,可以采用相同的过程,它会给你想要的结果。
感谢 Mangist 对此的指导。我写了以下内容来比较两个 excel 文件:
public bool compareFiles(string filePath1, string filePath2)
{
bool result = false;
Excel.Application excel = new Excel.Application();
//Open files to compare
Excel.Workbook workbook1 = excel.Workbooks.Open(filePath1);
Excel.Workbook workbook2 = excel.Workbooks.Open(filePath2);
//Open sheets to grab values from
Excel.Worksheet worksheet1 = (Excel.Worksheet)workbook1.Sheets[1];
Excel.Worksheet worksheet2 = (Excel.Worksheet)workbook2.Sheets[1];
//Get the used range of cells
Excel.Range range = worksheet2.UsedRange;
int maxColumns = range.Columns.Count;
int maxRows = range.Rows.Count;
//Check that each cell matches
for (int i = 1; i <= maxColumns; i++)
{
for (int j = 1; j <= maxRows; j++)
{
if (worksheet1.Cells[j, i].Value == worksheet2.Cells[j, i].Value)
{
result = true;
}
else
result = false;
}
}
//Close the workbooks
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.ReleaseComObject(range);
Marshal.ReleaseComObject(worksheet1);
Marshal.ReleaseComObject(worksheet2);
workbook1.Close();
workbook2.Close();
excel.Quit();
Marshal.ReleaseComObject(excel);
//Tell us if it is true or false
return result;
}
并使用断言检查结果:
Assert.IsTrue(compareFiles(testFile, compareFile), "Output files do not match.");
我正在使用 Visual Studio 创建一个创建两个 excel 工作表的自动化测试。作为最后的检查,我需要比较这两个 excel 表的内容并确保它们相等。有什么方法可以用断言来做到这一点吗?
类似于 Assert.AreEqual(file1, file2);
?
如有任何帮助或指导,我们将不胜感激!
能否将 expected/actual Excel 工作表转换为文本格式,例如 CSV?
如果是这样,您可以改用 Approval Tests。这允许您将文本文件作为 "expected" 测试结果。当测试失败时,它可以向您显示测试的实际结果,与预期结果不同。
从 this review 批准测试中截取的屏幕截图。
一个选项将使用名为 EPPlus
的开源库。您可以下载并在您的自动化测试应用程序中引用它。 EPPlus 为您提供了多种读取 excel 文件并进行比较的方法。一种这样的选择是 C# Datatable。这是一个示例代码..
public static DataTable GetDataTableFromExcel(string path, bool hasHeader = true)
{
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (var stream = File.OpenRead(path))
{
pck.Load(stream);
}
var ws = pck.Workbook.Worksheets.First();
DataTable tbl = new DataTable();
foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
{
tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
}
var startRow = hasHeader ? 2 : 1;
for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
DataRow row = tbl.Rows.Add();
foreach (var cell in wsRow)
{
row[cell.Start.Column - 1] = cell.Text;
}
}
return tbl;
}
}
对于Excel两个文件,可以采用相同的过程,它会给你想要的结果。
感谢 Mangist 对此的指导。我写了以下内容来比较两个 excel 文件:
public bool compareFiles(string filePath1, string filePath2)
{
bool result = false;
Excel.Application excel = new Excel.Application();
//Open files to compare
Excel.Workbook workbook1 = excel.Workbooks.Open(filePath1);
Excel.Workbook workbook2 = excel.Workbooks.Open(filePath2);
//Open sheets to grab values from
Excel.Worksheet worksheet1 = (Excel.Worksheet)workbook1.Sheets[1];
Excel.Worksheet worksheet2 = (Excel.Worksheet)workbook2.Sheets[1];
//Get the used range of cells
Excel.Range range = worksheet2.UsedRange;
int maxColumns = range.Columns.Count;
int maxRows = range.Rows.Count;
//Check that each cell matches
for (int i = 1; i <= maxColumns; i++)
{
for (int j = 1; j <= maxRows; j++)
{
if (worksheet1.Cells[j, i].Value == worksheet2.Cells[j, i].Value)
{
result = true;
}
else
result = false;
}
}
//Close the workbooks
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.ReleaseComObject(range);
Marshal.ReleaseComObject(worksheet1);
Marshal.ReleaseComObject(worksheet2);
workbook1.Close();
workbook2.Close();
excel.Quit();
Marshal.ReleaseComObject(excel);
//Tell us if it is true or false
return result;
}
并使用断言检查结果:
Assert.IsTrue(compareFiles(testFile, compareFile), "Output files do not match.");