2016-07-15 65 views
2

使用Visual Studio创建一个自动化测试,创建两个Excel表。作为最终检查,我需要比较这两个Excel表格的内容并确保它们是平等的。有没有办法用断言来做到这一点?使用断言来比较两个Excel文件

类似Assert.AreEqual(file1, file2);

任何帮助或指导,将不胜感激!

+3

你需要通过使用Office互操作打开两个电子表格,以及做一个循环行和列比较每个单元格的值。你可以在这里阅读更多关于Office Interop http://stackoverflow.com/questions/16213255/how-to-read-cell-values-from-existing-excel-file – Mangist

回答

0

感谢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."); 
2

您可以将预期/实际Excel工作表转换为文本格式,例如CSV吗?

如果是这样,您可以使用Approval Tests来代替。这使您可以将文本文件作为“预期”测试结果。当测试失败时,它可以显示测试的实际结果,并与预期结果进行比较。从认证试验的this review采取

Diff view

截图。

0

一个选项将使用称为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文件,相同的过程可以采用,它会给你想要的结果。