项目上有个UAT的case的checkpoint 需要比较系统里webtable 里跟exported 到excle 文件的数据是否一致。
想想了,传统的方法是将webtable的数据取出来存在另一个excle文件里,然后在异步比较2个excle 文件数据是否相同。
但是这个方法效率太低,想到之前项目上用到利用excel 的内置公式比较数据,并将差异的数据标上不同的颜色。
不多说,上代码:
Sub CompareExcel(strPath,dicData) Dim oExcel,oWorkbook,oSheet,i,key Set oExcel=CreateObject("Excel.Application") On error resume next :err.clear Set oWorkbook=oExcel.workbooks.open(strPath) Set oSheet=oWorkbook.sheets(1) If err.number<>0 Then err.clear Exit sub End If On error goto 0 oExcel.DisplayAlerts=False Dim colums:colums=oSheet.usedRange.Columns.Count Dim rows:rows=oSheet.usedRange.rows.Count ' Dim end_pos:end_pos=start_pos+dicData.count Dim countRow:countRow=dicData.count Dim countCloumn:countCloumn=ubound(dicData(1))+1 ' Dim new_start_pos:new_start_pos=US1567_To_letter(colums+1) Dim new_start_pos:new_start_pos=rows+2 ' Dim new_end_pos:new_end_pos=US1567_To_letter(colums+countCloumn) Dim new_end_pos:new_end_pos=US1567_To_letter(countCloumn) Dim index:index=new_start_pos for each key in dicData.keys oSheet.range("A"&index&":"&new_end_pos&index).value=dicData(key) index=index+1 Next Dim range1:range1="A2"&":"&US1567_To_letter(colums)&rows ' Dim range2:range2=new_start_pos&"2"&":"&new_end_pos&(countRow+1) Dim range2:range2="A"&new_start_pos&":"&new_end_pos&(countRow+new_start_pos-1) oSheet.range("A"&(new_start_pos-1)).value="From RM WebTable Data:" ' oSheet.range("A"&(new_start_pos-1)&":"&new_end_pos&(new_start_pos-1)).value="From RM WebTable Data:" ' oSheet.range("A"&(new_start_pos-1)&":"&new_end_pos&(new_start_pos-1)).mergecells=true ' oSheet.listobjects.add(1, oSheet.range(range2), false, 1).name = "table1" ' oSheet.listobjects("table1").tablestyle = "TableStyleMedium16" oSheet.range(range1).select oSheet.range(range1).FormatConditions.add 2,,"=A2 <>"&"A"&new_start_pos oSheet.range(range1).FormatConditions(1).setfirstpriority oSheet.range(range1).FormatConditions(1).interior.color = 65535 oSheet.range(range1).FormatConditions(1).stopiftrue = false oSheet.range(range2).select oSheet.range(range2).FormatConditions.add 2,,"=A2 <> "&"A"&new_start_pos oSheet.range(range2).FormatConditions(1).setfirstpriority oSheet.range(range2).FormatConditions(1).interior.color = 65535 oSheet.range(range2).FormatConditions(1).stopiftrue = false oSheet.range("A1").select oSheet.cells.entirecolumn.autofit oWorkbook.save oWorkbook.Close Set oSheet=Nothing Set oWorkbook=Nothing Set oExcel=nothing End Sub
将页面的webtable的每一行数据作为一位数组放在dic 对象里,利用QTP EOM 操作excle文件,将数据一行一行写到 exported 的excle 文件里,动态的插入 FormatConditions。比较数据的过程丢给Excle。
最后将比较之后的文件以超链接的方式插到QTP的report里。
tips:
很奇怪的是网上关于qtp 对excle 读写数据都是cells(1,1).value 这个方法,一个单元格一个单元格的读写数据,这样效率实在太低。
其实有更好的方法:
1.可以一行一行的读写数据 eg. worksheet.range("A1":"F1").value
2.甚至可以一次性操作所有数据 eg.worksheet.usedrange.value
这2个方式读的时候是返回2维数组。写的时候可以1维数组写入。
相关推荐
用QTP实现EXCEL数据比对
QTP实现两个Excel表格数据对比代码,Function导入,直接调用该Function就可实现数据对比
用QTP实现EXCEL数据比对 了解QTP调用excel的方式和对比
QTP脚本数据分离管理,一个脚本与数据分离插件
本章介绍如何在自动化测试过程中使用数据驱动的测试脚本开发方式,对测试脚本进行参数化,包括如何使用QTP的Data Table参数化、Action参数化、环境变量参数化等脚本参数化的方法。 数据驱动的测试方法要解决的核心...
第25篇-QTP数据表Global与Local 第25篇-QTP数据表Global与Local
用QTP实现自动对比网页上两表的数据,本程序要实现的功能是,用QTP检查网页上表1和表2之间数据是否正确,并给出错误报告。
用QTP计算出表2中相关的数据,并与表1中的数据作比较。通过QTP脚本中的函数读取表1中的数据到Run-Time Table的Global sheet中,读取表2中的数据到Run-Time Table的Action1 sheet中。通过程序控制对Global sheet 和...
QTP使用的对数据进行管理的插件,安装完成以后可以使用一些操作数据的接口
QTP中Excel比较,代码详情,可以实现数据对比和显示对比结果
用来将../Test6/test.xls中的数据整理成../result.xls中的数据样式。 代码中有详细的QTP与Excel之间的交互使用方法以及VBscript的常用方法等。 是参考和学习的最佳实例文件。 将代码解压,用QTP打开即可使用。另也...
给想做QTP的人提供一个更好的选择的众多理由!
QTP QTP
qtp资料qtp资料
7. QTP将数据库中的数据导入到excel 29 8. 在QTP中将数据库的数据导入到EXCEL 29 9. QTP将数据测试驱动 31 10. QTP中设置共享对象库 32 11. QTP ActiveX 报错; 35 12. 数据驱动在测试中的应用 35 13. 在Excel中增加...
QTP对象库简介
提出采用面向自动化测试的测试用例设计格式,通过QTP的编程功能,使用外部数据源来实现较复杂的数据驱动测试。具体方法是采用Excel作为测试数据源,制定Excel中测试数据的设计格式,建立专用的函数库来操作Excel数据...
最近这几天一直在研究QTP自动化测试的知识,为了给新人提供方便,特地写了一篇QTP11中文版的下载地址及安装教程,初学者...不过QTP11的脚本回放速度比QTP10大大提高了,比如对输入框的数据录入速度等都有提高,值得一试。
QTP的XML结果文件中读取数据,汇总写入EXCEL中
提供QTP下载地址