2016-07-15 4 views
2

Im с помощью Visual Studio для создания автоматизированного теста, который создает два листа excel. В качестве окончательной проверки мне нужно сравнить содержимое этих двух листов Excel и убедиться, что они равны. Есть ли способ сделать это с помощью утверждений?Использование утверждений для сравнения двух файлов excel

Нечто вроде Assert.AreEqual(file1, file2);?

Любая помощь или руководство будут оценены!

+3

Вы должны будете использовать Office, Interop, чтобы открыть обе таблицы, и сделать петлю через строк и столбцов, сравнивающих значение каждой ячейки. Вы можете больше узнать о Office Interop здесь http://stackoverflow.com/questions/16213255/how-to-read-cell-values-from-existing-excel-file – Mangist

ответ

0

Mangist руководство по этому вопросу. Ive написал следующее для сравнения двух файлов 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. Это позволяет вам иметь текстовый файл в качестве ожидаемого результата теста. Когда тесты терпят неудачу, он может показать вам фактический результат теста, отличающийся от ожидаемого результата.

Diff view

Скриншот взят из this review сдаточных испытаний.

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, тот же процесс может быть принят, и это даст вам желаемых результатов.