这两天在赶自动化测试项目进度,使用的工具就是QTP9.0。这个自动化测试项目面对的是一个b/s结构的系统,在IE页面有大量需要录入的表格。起初进度还算是顺利,脚本录制完以后,一开始能顺利回放,并且检查点能100%能正常工作,认为没有问题就check in了。但是当第二天回放的时候发现出了问题,而且是很麻烦的问题,后来的两天简直是可以用梦魇来形容。
我所录制的脚本中,包含这样的操作:1、在IE页面的表格中点击一个静态的带有文字的单元格;2、从EXCEL数据文件中复制数字区域(自己编写的方法);3、使用sendkeys方法将该复制的内容粘贴到IE的表格中。在做脚本录制的时候是非常顺利的,但是当第二天再打开脚本的时候,却发现脚本回放不了。在使用sendkeys方法的时候脚本无法将数据粘贴到IE界面,而且最令人蹊跷的是,每次失败的表现还不一样,有时会提示“页面录入值非法”,判断这是由于复制区域与粘贴区域单元格错误导致的;有时会提示“剪切板无数据”,但是如果此时停止脚本,手工按下“CTRL + V”却能粘贴,说明复制是有效的,只是粘贴的时候出错了。
单凭以上现象我们不能指责QTP的不好,毕竟如果测试环境有变化的,会影响到QTP脚本的回放。但是这才是让我郁闷的:脚本是一模一样的脚本;环境是一模一样的环境,只是隔了12个小时(晚八点关机到早八点开机),结果脚本就出现了这样的问题。
既然出现了问题了那就解决吧,又不能告诉老板说是QTP不好,毕竟QTP只是一个工具,如果工作完不成的话还是要找素质方面的原因。呵呵。首先根据问题的表现,判断是粘贴步骤出错了,于是打开lib库,逐行审查代码,在原来的代码中读取EXCEL使用的方法是
set sheet = exce.........
想一想这样写虽然最初脚本是能运行通过的,但是毕竟跟文档上的写法不一样,于是换成了createobject方法
set workbook = excel.workbook.open(filename)'filename是文件的目录
set sheet = workbook.worksheets(sheetname)'sheetname是EXCEL工作表名
sheet.activate‘激活当前工作表
写完以后,保存,然后重新打开脚本、打开软件、运行脚本,OK,通过了,脚本能顺利的回放,于是在LIB函数上写上自己的大名、时间和修改原因及修改方法并将更新后的文件发送给项目组里的其他人。
不过这个时候心里还是有点疑问,因为从代码的执行上来看,getobject和createobject并没有本质的区别,即使有,也不应该会影响到数据的粘贴操作。因为使用sendkeys方法时,其实访问excel的脚本已经执行完毕了。为了稳妥起见,这个问题还是要确认一下的。于是重新打开昨天的脚本,将代码恢复到修改前的状态,然后打开被测系统,点击run运行脚本,发现这次脚本运行竟然pass了。
这个时候我彻底疯了!老天啊,你为什么要如此对我!为什么同样的脚本,同样的机器、很短的时间间隔,两次运行脚本的结果竟然会完全不一样。而且脚本的执行人都是我,总不能说是人品问题了吧。现在估计项目组里的其他人正在那里纳闷呢:脚本运行的好好的,干嘛要改啊。但是这不是我的错啊,我的确就是碰到了脚本运行失败的情况,而且修改后确实是能运行了。鬼知道那段脚本是怎么回事。我实在心里有点不甘,于是把那段脚本再次运行一遍,OK,完全PASS。
现在我确实是无奈了。为了确认对脚本的修改无误,我又把修改后的脚本运行了三遍,确认脚本是没有问题并且能PASS的,这下算是放心了。本以为事情到这里就结束了,但是其实更乐的还在后面。
第三天是个周六,考虑到脚本录制的比较顺利,我就没去加班,反正录制脚本时我一直用的是自己的笔记本,在宿舍或是在公司都是一样滴干活。早上懒懒得伸了个腰,习惯性的打开QTP,打开被测系统,打开脚本,点击了一下RUN,然后漫不经心的看着脚本运行,本来都准备好去刷牙了,结果突然发现屏幕上弹出了一个信息提示框,上面赫然显示着:剪切板无数据!
我崩溃了。差点没把手里的牙缸扔出去,不过考虑到那是自己的笔记本,最后还是压抑住自己愤怒的心情,真TM见鬼了!看来今天又有事情干了。
洗完脸刷完牙,回到了电脑旁,看到这种情况,首先考虑的是sendkeys的问题,作为一个模拟键盘输入的函数,sendkeys具有天生的不稳定性。因为这个函数被调用的时候,如果焦点发生了变化它也会很白痴的把预先准备好的内容发送过去。但是这个情况跟sendkeys方法是没什么关系的,既然提示剪切板无数据,那应该是EXCEL没有进行复制吧。于是尝试性的按下了“CTRL+V”,发现复制已经完成了,剪切板里是有数据的。我靠!
后面发生的事情就很简单了,修改代码、运行、失败;修改代码、调试、成功、运行、失败;再修改代码、调试、成功、运行、成功、再运行、成功、再运行、失败……。整整一天就在不断的修改代码和运行代码中渡过。从早上7点半一直改到晚上六点,把所有可疑的地方都过了一遍,无数次访问msdn,无数次的运行代码。但是运行的成功率总达不到100%。而且最后一次改的脚本还是无法运行,当运行时会提示“剪切板无数据”。于是我开始尝试最后一种情况,将笔记本作为服务器,将脚本的运行环境移到我的台式机上。在台式机上打开QTP、打开刚才运行出错的脚本、打开被测系统,点击run,OK,运行完全PASS。为了稳妥起见,我将这段脚本循环了100次,就在电脑旁守着,一直等到脚本运行到22次的时候,还是一点问题没有,完全PASS!
这个时候地球上任何一种语言都无法描述我此时的心情。当年红军过完草地后,那是一种生存下来的胜利的心情;赖昌星逃到加拿大后,那是一种逃脱后的侥幸性情;王浩打败柳承敏以后,那是一种拼搏、付出,享受收获的喜悦心情。我呢,我象一个傻瓜似被QTP耍得团团转,一会儿告诉我脚本运行失败,一会儿告诉我脚本运行顺利,眼看着循环次数已经达到35次还正常运行,我心里却一点没有兴奋的心情,我现在最想得到的就是QTP这个项目组的MSN或者是邮件,如果他们有中国人的话我会恨不得打电话过去,我要向他们倾诉我这两天的酸甜苦辣,我要问问他们,这种情况是属于我自己脚本的问题还是QTP本身设计上的缺陷;我要跟他们聊聊以后QTP改进的方向,想着想着,不知道为什么我突然笑出来了,而且笑的很开心,但是笑的却很缓,如果旁边有人的话,他肯定说我是神经病,是疯子。
文章来源于领测软件测试网 https://www.ltesting.net/