远瞻:
Web项目经常会要求下载一些文件,然后对下载文件进行一些数据检查,而Excel数据下载是比较常见的一种,今天我要给大家分享的是下载一个Excel,并检查里面的数据是否跟Web page里WebTable显示数据一致。如果数据量较大,人工肉眼对比难免出错,而且效率也是极低,更不方便反复的进行regression测试。
案情:
下载Excel内容是根据后台配置的template。比如:
| UserName | Password | UserID | Nickname |
| zhang3 | 123 | 896 | 张3 |
| li4 | 456 | 763 | 李4 |
萃取Web page的WebTable数据。比如:
| UserName | Password | UserID |
| li4 | 456 | 763 |
| zhang3 | 123 | 896 |
实现思路:
step 1 通过页面提供的下载功能直接下载Excel(Export.xls)
step 2 通过页面萃取需要检查的列(这些列必须是是Export.xls必须存在的),生产萃取页面数据的Excel(Extract.xls)
step 3 分别对两个Excel Sheet某指定列排序使导出数据每一行都对应起来。
step 4 然后一行一行的对比。
数据表对比部分代码:
1 \'################################################################################################# 2 \'################################################################################################# 3 \'Function Name: Func_Excel_Compare2Excel 4 \'Description: Use this function to compare 2 excel data row by row, 2 excel use the same template. 5 \'Parameters: strExportExcelPath: excel full path which you export by export feature on website 6 \' strExtractExcelPath: excel full path which you extract from webtable on website 7 \' strSortColumnName: the specified column to sort, default the first row as column name 8 \'Assumptions: N/A 9 \'Return: N/A 10 \'Example: Func_Excel_Compare2Excel "C:\Users\Export.xls", "C:\Users\Extract.xls", "UserID" 11 \'################################################################################################# 12 \'Modified History: Initial release 07/01/2015 Calvin 13 \'################################################################################################# 14 Function Func_Excel_Compare2Excel(strExportExcelPath, strExtractExcelPath, strSortColumnName) 15 Set objExcelApp = CreateObject("Excel.Application") 16 Set objWorkBook_Export = objExcelApp.Workbooks.Open(strExportExcelPath) 17 \'objWorkBook_Export.Application.Visible = True \'Debug 18 Set objSheet_Export = objWorkBook_Export.Worksheets(1) 19 Set objWorkBook_ExtractPage = objExcelApp.Workbooks.Open(strExtractExcelPath) 20 \'objWorkBook_ExtractPage.Application.Visible = True \'Debug 21 Set objSheet_ExtractPage = objWorkBook_ExtractPage.Worksheets(1) 22 \'Sort the specified column by ascending 23 Func_Excel_SortOneColumnByAscending objSheet_Export, strSortColumnName 24 Func_Excel_SortOneColumnByAscending objSheet_ExtractPage, strSortColumnName 25 \'Get the used rows and columns number 26 Dim intUsedRows_Export: intUsedRows_Export = objSheet_Export.UsedRange.Rows.Count 27 Dim intUsedColumns_Export: intUsedColumns_Export = objSheet_Export.UsedRange.Columns.Count 28 Dim intUsedRows_ExtractPage: intUsedRows_ExtractPage = objSheet_ExtractPage.UsedRange.Rows.Count 29 Dim intUsedColumns_ExtractPage: intUsedColumns_ExtractPage = objSheet_ExtractPage.UsedRange.Columns.Count 30 \'Check total records 31 If intUsedRows_Export = intUsedRows_ExtractPage And intUsedColumns_Export >= intUsedColumns_ExtractPage Then 32 Reporter.ReportEvent micPass, "Total Row Count", "Total row count is correct!!!" 33 If intUsedRows_ExtractPage = 1 Then 34 Reporter.ReportEvent micWarning, "No Records in Result", "No records in result." 35 End If 36 Else 37 Reporter.ReportEvent micFail, "Total Row Count", "Total row count is not correct!!!" 38 Exit Function 39 End If 40 \'Check cell data 41 For intIndexRow = 2 To intUsedRows_ExtractPage Step 1 42 Dim blnRowDataCompare: blnRowDataCompare = True 43 For intIndexColumn = 1 To intUsedColumns_ExtractPage Step 1 44 blnRowDataCompare = (blnRowDataCompare And (Lcase(Trim(objSheet_ExtractPage.Cells(intIndexRow, intIndexColumn).Value)) = _ 45 Lcase(Trim(Func_Excel_GetCellDataByColumnName(objSheet_Export, intIndexRow, objSheet_ExtractPage.Cells(1, intIndexColumn).Value))))) 46 Next 47 If blnRowDataCompare Then 48 Reporter.ReportEvent micPass, "Check Row Data", "Row data correct, Column ["&strSortColumnName&"] value is " & Func_Excel_GetCellDataByColumnName(objSheet_Export, intIndexRow, strSortColumnName) 49 Else 50 Reporter.ReportEvent micFail, "Check Row Data", "Row data incorrect, Column ["&strSortColumnName&"] value is " & Func_Excel_GetCellDataByColumnName(objSheet_Export, intIndexRow, strSortColumnName) 51 Exit For 52 End If 53 Next 54 \'Release objects 55 Set objSheet_Export = Nothing 56 Set objSheet_ExtractPage = Nothing 57 objWorkBook_Export.Close False 58 objWorkBook_ExtractPage.Close False 59 Set objWorkBook_Export = Nothing 60 Set objWorkBook_ExtractPage = Nothing 61 objExcelApp.Quit 62 Set objExcelApp = Nothing 63 End Function 64 65 \'################################################################################################# 66 \'################################################################################################# 67 \'Function Name: Func_Excel_GetCellDataByColumnName 68 \'Description: Use this function to get cell data by column name 69 \'Parameters: objSheet: excel sheet object which you want to sort 70 \' intRow: data row, starts as 2. 71 \' strColumnName: default the first row as column name, the value is column name 72 \'Assumptions: N/A 73 \'Return: cell data 74 \'Example: strData = Func_Excel_GetCellDataByColumnName(objSheet, 2, "UserID") 75 \'################################################################################################# 76 \'Modified History: Initial release 07/01/2015 Calvin 77 \'################################################################################################# 78 Function Func_Excel_GetCellDataByColumnName(objSheet, intRow, strColumnName) 79 \'Define column number 80 Dim intColumnNo 81 \'Get the used columns number 82 Dim intUsedColumns: intUsedColumns = objSheet.UsedRange.Columns.Count 83 \'Get sort column number 84 For intIndex = 1 To intUsedColumns Step 1 85 If objSheet.Cells(1,intIndex).Value = strColumnName Then 86 intColumnNo = intIndex 87 Exit For 88 End If 89 If intIndex = intUsedColumns Then 90 Reporter.ReportEvent micFail, "Exception Handling", "The specified column does not exist." 91 End If 92 Next 93 \'Return cell data 94 Func_Excel_GetCellDataByColumnName = objSheet.Cells(intRow, intColumnNo).Value 95 End Function 96 97 \'################################################################################################# 98 \'################################################################################################# 99 \'Function Name: Func_Excel_SortOneColumnByAscending 100 \'Description: Use this function to sort table data by ascending via the specified column 101 \'Parameters: objSheet: excel sheet object which you want to sort 102 \' strSortColumnName: the specified column to sort 103 \'Assumptions: N/A 104 \'Return: N/A 105 \'Example: Func_Excel_SortOneColumnByAscending objSheet_Export, "UserID" 106 \'################################################################################################# 107 \'Modified History: Initial release 07/01/2015 Calvin 108 \'################################################################################################# 109 Function Func_Excel_SortOneColumnByAscending(objSheet, strSortColumnName) 110 \'Define sort column number 111 Dim intSortColumnNo 112 \'Get the used rows and columns number 113 Dim intUsedRows: intUsedRows = objSheet.UsedRange.Rows.Count 114 Dim intUsedColumns: intUsedColumns = objSheet.UsedRange.Columns.Count 115 \'Get sort column number 116 For intIndex = 1 To intUsedColumns Step 1 117 If objSheet.Cells(1,intIndex).Value = strSortColumnName Then 118 intSortColumnNo = intIndex 119 Exit For 120 End If 121 If intIndex = intUsedColumns Then 122 Reporter.ReportEvent micFail, "Exception Handling", "The specified column does not exist." 123 End If 124 Next 125 \'Sort the specified column by ascending 126 Set objSortRange = objSheet.Range(objSheet.Cells(2,1), objSheet.Cells(intUsedRows,intUsedColumns)) 127 objSortRange.Sort objSheet.Range(objSheet.Cells(2,intSortColumnNo), objSheet.Cells(intUsedRows,intSortColumnNo)) 128 Set objSortRange = Nothing 129 End Function