Calvin-Xiong

远瞻:

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 
View Code


 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-07-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-06
  • 2021-11-29
猜你喜欢
  • 2022-12-23
  • 2021-04-27
  • 2022-01-25
  • 2021-09-21
  • 2022-12-23
  • 2022-12-23
  • 2021-08-06
相关资源
相似解决方案