测鬼记(中)之奋斗——圈子

来源:互联网 发布:淘宝代销怎么终止合同 编辑:程序博客网 时间:2024/05/16 13:59

返回深圳又过了几个月,文字完成了几个项目的自动化测试程序的开发工作,整个研发项目的节奏又慢了下来,寥寥无事,日子便就被慢慢消磨了,强烈学习和研究的意志力也下降了很多,心里也就看轻了这份技术许多。

 

“好像没啥可学习的”,一天文字向包子抱怨到。

 

“彻,都搞懂了,都深入了”,包子怀疑的问道。

 

“不晓得搞得真的怎样,这不是都熟练运用这个项目了嘛”,文字也比较苦恼这个问题,“也不清楚,应该怎样深入了”。

 

“看书呗,看人家是怎样做的”,包子建议到。

 

“没啥用,搜了一下,基本上所有的书都差不多,没什么新意呢”,文字暗谈到。

 

“那就带人,教人呗!或者写博客,深入研究,写点心得,也许就看见不一样的东西了”,包子再提议到。

 

“嗯,有点道理。以教为学,看上去也不错,边教边总结,巩固一下也好”,文字细思怎样开始,接着说到,“就教你好了”。

 

“不学、不学。我不喜欢你教我,接受不了”,包子讲到。

 

“好、好,我想想写点啥,最好搞个博客系列,弄点有意思的”,文字像是自言自语,又像是对包子讲到。

 

怎么带个人呢,包子又不学,干脆点在论坛上打个广告,免费带一个想学的人算了,回答他的问题,总会增进自己的功力的。文字想到这儿,便在51论坛上把自己的签名,改成了‘以教带学,免费教自动化测试技术罗,本人有3年自动化测试经验,欲学QTP和开源WatiN都可以,有兴趣的请联系QQ:XXXXX’。不晓得有人会联系自己不,说不定大家看到这个会想,这人闲得疼,真的假的,确实工作之后还免费教学,看上去确实有点不可思议。不管他,姜太公钓鱼嘛,愿者自己会想办法的。

 

今晚就开始行动吧,写点什么东西呢,嗯,还是从应用最广泛的QTP开始吧,干脆点,弄个入门教程,不过语言方面要考虑、考虑,不能再像书本上那个样子,枯燥死了,于学于生活,乐趣才是重点。不过风格应该是什么样子,现在也不太好讲,得看下笔的时候的感觉了,感觉这东西有时是很奇妙的。

 

是夜,文字坐在电脑面向,打开了QTP,光标定位在Word文档里面不断的思索,脑海里浮现了很多线索,敲了十几个字,便觉得甚没意思,就又删除了,反反复复1个多小时过去了,文档还是空白的。

 

包子洗完衣服出来,问道:“怎么还是空的”

 

“没感觉,不晓得从那里开始”,文字解释到。

 

“得,你继续。我不管你了,我看电视了,不打扰你嘛”,包子问到。

 

“嗯,声音不要太大就行了”,文字说这话的时候,包子已经打开了电视,刚好电视里面播放着《Mondo Bongo》,节奏感十足。文字似乎一上就有了灵感一样,心想何必那么在乎文字内容呢,为什么技术文章就不能够融入生活的点点滴滴,风趣一点,文字赶紧下载了这站曲子,戴上耳机写到:

摘录一:

好吧,就让我们开始吧。

首先打开你的QTP,开始我们的QTP旅程吧。在等待QTP打开的这段时间,来点废话吧。老婆在旁边用她的笔记本,嚣张地放着《史密斯夫妇》里面的《Mondo Bongo》,我却用5年前的破台式机敲着这些也许在许多人看来的破字。呵呵,本来不知该如何入手的,就让我们伴随这段音乐开始吧,另外,这部电影确实不错。

打开你的QTP了吗?瞧,它就是这个嘿样子,这个东西会在将来的一段时间里,都将伴随着你,其中有不少的日子,其中大部分日子会让你觉得这个世界上每个人都有暴力倾向的,不过我相信最终你还是会爱上它的,就像史密斯夫妇那段婚姻一样。

 

如果你在之前没有碰过她,也许你应该先了解了解她那并不漂亮的外表,也就是她的菜单,这就像你追MM一样,先要收集她身上的一点点信息,然后一层一层地深入她,熟悉她的味道,熟悉她的一切,最后她就是你的了。她的的帮助字典里已经有了,你需要的就是点击Help-》QuickTest Professional Help,然后找到HP QuickTest Professional User Guide 把它看完,并且同时一个一个地去点击,看看剥掉她那并不漂亮的外衣下面到底藏着什么。如果你非要认为这嘿么没有必要,那么我还是赞同你的。不过,要知道做为过来人,我要告诉你的是,学这玩艺时因为开始没有好好研究她的穿着,我可是走过好多路,千真万确我确实走过很多路,每天都从我的电脑走到公用上网机几十次,干什么——百度。嘿嘿。。后来,终于下定决心开始剥她的外衣,直到后来烂熟于套路。

如果你因为担心你的英文不好,也没关系,网络上有中文档的帮助文档,你拿来对照就行了。用久了,你也就不会再把她当鸟文了,因为她最终成为了你心目中的神——符号。这也是真实感言,要知道我一个小专英文级都不级的人,现在竞也能熟练用她了。哈哈。。嚣张一下(生活太平淡,需要点刺激,不是么史密斯?)

好像废话有点多,让我们开始New吧!512M的内存拿来玩QTP,确实太慢了点。看到New后的样子了吗?一个空白区域,下面一个看上去像数据库的表。老子说,无乃万物之母,有乃万物之始。我说,你永远都是这么苍白,我永远不知道那身白晰的皮肤下藏着什么。可你又那么令人着迷,我以莫大的诚意爱上你,然后用生活的诗意描绘你时,你又丰富得令人着迷。

好吧,让我们从万恶的HelloWord开始吧!

在QTP里面,你只需要写入msgbox “helloWord”,然后按永远的快捷键F5,该死的QTP这时却弹出了一个框,非常不符合旧有习惯,回车该死的helloWord就出来了。

请注意,你输入Msgbox “helloWord“也行。她可不像C#.Net那么娇气,非要分出个大小写。她是随便的,正因为她是随便的,所以如果你封装过程、定义变量或导入多个vbs文件时,请注意你需要给它分配一个永不重复的芳名,并记住她,不然她的脾气发作,直接的后果就是你的QTP运行玩完。

另外,输入Call msgbox(“helloWord”)也是可以的。加Call和不加Call的区别是什么呢?其实很简单,区别就是()号,呵呵。加括号其实是调用一个函数,可以有返回值。不加括号是一个过程,没有任何返回值,我更建议用后面这种方式,这更符合我记忆中C的习惯。

另外,在QTP里面,注释的语句是rem,如rem妹子。当然,如果你想快点,那么就用单引号吧,如’妹子。如果想多行注释怎么办呢?曾经有人回答这个问题的答案是,没有。其实不然,QTP提供了一个注释多行的办法。选中要注释的内容,点击鼠标右键,选择CommnetBlock,就成了多行注释,取消多行注释,选UnComment Block。不过这里似乎有一个概率性的缺陷,即如果你多次运行或调试了脚本之后,选中多行,点击右键后,右键菜单总是一闪而过,而不能保持。当然即使有缺陷,我们一样可以使用,选中按ctrl+M(多行注释)或ctrl+shift+M(取消多行注释)。

不知你注意没有?每次你F5后,就会弹出这么个东东!

 

New run results folder的意思是:新的运行记录保存在这个文件的地址。

Temporaryrun results folder的意思是:运行的记录会覆盖上次运行的结果。

前者的讨厌程度是非常让人恶心的,如果你的脚本调试N次,那么你的文件里面就有N个res*的文件。后者令人遗憾的是,她的结果每次都保存在临时文件夹中。我是一个比较懒的人,我一直懒得去点后者的单选按钮,更懒得去删除这些测试结果。那么有没有办法,综合前者和后者呢,答案当然是可以的,只要你有idea。其实我们只需要调用删除文件夹的方法:DeleteFolder()就行。

'删除Res

Function delRes()

         Setfs = CreateObject(“Scripting.FileSystemObject“)

         fs.DeleteFolderenvironment(“TestDir“)&“\Res*”,True

         setfs=nothing

End Function

不知你发现没有,我们这个函数是运行不了的,当你运行时会提示:

 

这是因为你运行程序时,让程序去删除自己产生的文件是一件很不靠谱的事情。所以,如果要实现运行,你还得加一些语句,比如on error resume next。所以更改你的函数吧!

'删除Res

Function delRes()

         Onerror resume next

         Setfs = CreateObject(“Scripting.FileSystemObject“)

         fs.DeleteFolderenvironment(“TestDir“)&“\Res*”,True

         wait(1)

         setfs=nothing

End Function

Call delRes(),这样程序在运行时每次都会删除掉除当前保存结果的这个文件了。另外,这里有一个非常有趣的现象,上面的代码有不少部分是Vbscript的,但environment(“TestDir“)却是QTP自己的函数,把它组合在一起,就成了我称之的QTP风格。所以,你就不用担心自己不会Vbscript,而放弃玩她的想法了。因为,她对于你来说是最新的,你就忘掉Vbscript吧(其实我用这个之前也一点不会Vbscript)。

 

摘录二:

我好佩服老婆打电话时与长辈天南海北的神侃,我更惊奇的是从20:00到现在21:20他们还越聊越兴奋,现在看来还得继续一阵子,我甚至开始有些嫉妒她了,因为我和长辈们的电话通常不会超个10分钟。

我更惊奇的是,我今晚还打算写一篇关于QTP检查点的文章,而这篇文章的内容也许是无数本书籍中反复提到的内容,也就是我在图书馆找到一些QTP的书看过之后说“可以下定论了,该书使用了大量类似于插入检查点步骤的截图,以补充书的厚度进而骗取书费”的内容。也许你已经猜到了,我将说说的就是我以前认为是“骗子”的东西,大家现在可以尽情扔香蕉、扔鸡蛋或者砖头。

闲撤似乎太远了,我们还是看看QTP的几种检查类型吧。

第一位:降龙十八掌

做为一个江湖骗子来说,如果没有超一流的武功,在战斗的时候是很容易牺牲的,如果你拥有一个必杀技,则可以像乔峰一样,无所不能。做为QTP必杀技能来说,Text CheckPoint似乎就就有如此神功。它扮演的角色有时就跟乔峰一样,在关键时刻拉了大宋一把。Text CheckPoint的扮演的角色,常常在判断测试步骤是否成功时拉了QTP一把。可能你不明白,举个简单例子吧!

大辽要打宋朝            Browser().Page().WebEdit().set “内容”

乔锋使出降龙十八掌挟持辽皇  Browser().Page().WebButton().Click

乔锋成功拉了大宋一把        Browser().Page().Check CheckPoint(检查提交成功的信息)

乔锋失败大宋被打            Browser().Page().Check CheckPoint(检查失败提示信息)

 

至于它们修练成神功的过程,也就不相同了,金庸也没有提到乔峰练此神功的过程,那么我也就不详细说Text CheckPoint的配置方法了,花点时间看看帮助文档,别偷懒哦,偷懒是练不成武功的,当然除了练葵花定典以外。至于Text Area CheckPoint于Text CheckPoint有何不同呢,很简单,他们练成神功的套路不同而已,一个是继承前辈内力(Windows API识别文本),一个是借助秘籍修练而成(OCR识别方式识别),而看秘籍当然是看漫画了(图片中的文字,要知道学武之人都认不了几个字,看漫画易懂,不过也有走火入魔的,所以要小心使用(OCR的稳定性要大大折扣,并且它不能应于Web对象)。

第二位:凌波微步
没有好武功也行,但一定要有好的逃跑方法,无一依外,几乎所有的武林高手打不赢的时候都逃跑了,跑的方法当然很多,当然最有效的就是凌波微步了,该武功使用之广泛,实奈武林史上无法跨越的神奇。QTP中也有这么一着,那就是Standard Checkpoint检查点了。我们常常拿它来判断某个Web对象的某些属性是否存在来判断上一个操作的结果是否正确,比如Page对象检查点、WebTable对象检查点等,该检查点可适用于所有Web对象,而且每个对象所拥有的属性是不同的。如我们把它当做文本检查点来使用,此时它检查的是WebElement对象的某个属性值是否与你所选的文字一致,即object.WebElement().Check CheckPoint(选的文字),再举一个简单的例子:

大辽要打宋朝            Browser().Page().WebEdit().set “内容”

乔锋使出降龙十八掌      Browser().Page().WebButton().Click

乔锋有些打不赢士兵      Browser().Page().Check CheckPoint(打不赢)
段玉凌波微步是否救出乔锋 Browser().Page().WebElement().Check CheckPoint(救出)


如果你没有段玉那么花心,还是去看看F1中它的配置讲解,并且将每个对象都插入Standard Checkpoint试试效果,要知道这种功夫,不是人人看看神仙姐姐就可以修练出段玉的福气来的。

第三位:天罡北斗阵
天罡北斗阵在武林中名声震震,一群道士又飞又舞又跳又打的,煞是好看地把西毒欧阳锋给打败了。不过当7个人筹不齐,或者某位功力不及时,便会被三流高手打得落花有义,而流水无情。我在8.2学习时就觉得Bitmap Checkpoint跟它颇似,从而导致10.0中也没有广泛地去使用和感受它,10.0似乎改进了不少,可以设置检查图像是基于RGB还是Pixl的方式,并且允许它们的值在一个波动的范围,所以对它的评论就到此吧。
至于它的实用性,在进行Web测试时我也老在考虑,如何将这个检查点拿来应用,想了很久也没有发现在我们的项目中是否有必要使用它,因为做为我们的Web项目使用的一些图片来说,被换掉的可能性比较低,即时被换掉也是需要经过一个流程来控制的,除非某个提示信息什么的是在图片上,但这样的我遇到的却实没有。
另外一个,关于图像检查的大规模应用在我们项目测试中是这样运用的,改变分辨率后截取每个页面或层的截图,然后保存到一个文件夹,人工去看一下是否OK。以后运行时,也生成这些图像,并保存到另外一个文件夹,然后用二进制比较的方法遍历比较两个文件夹中图像(这两个图像的名称分布是有规律的)的差异,有差异的记录日志,然后人工去看一下他们的区别。

第四位:悦来客栈
武林人士,来来往往多少好汉,谁没有到过悦来客栈小息片刻,可惜的是DataBase CheckPoint和Xml CheckPoint我却从没有使用过,原因很简单,QTP测试是基于GUI的,如果基于GUI我们又为何要到数据库或者XML中去检查数据呢?要知道,Web页面中提交的数据存储在数据库或Xml中是要经过转义的,比如字符&会被转义成&,而更现实的是数据库更多的时候是不对测试开放的。

检查数据,我更倾向于在系统读取后的页面中的检查。即使某些条件下的Web GUI测试需要用到它们,而从访问方式的可维护性等出发,我更建议你使用自定义的方式,即产生一些数据库访问的Dll或者读取xml Dll来进行使用,这样的话可复用性大大加强。至于这些方法,Google一下你就会发现,丰富得十分利害,把它们组合一下就成了你的了。由于我没有用过这两种检查点,在此也就不评论了。

第五位:红叶书生
红叶书生的利害之处在于他毫无武功,用一支笔却能让你有生有死,他用他的江湖规矩或者标准来判定你在江湖中的地位和名誉。QTP的Accessibility Checkpoint(可访问性检查点)就起到了这个作用,他通过你对网站的要求默认认定了几条可访问性的要求,当你启用这个检查点时,它将会对网站区域属性进行识别,以检查是否符合可访问性规则的要求。它默认启用的可访问些属性只有Alt Property Check,配置其它更多的可访问性属性请参见Tool-Options-Advanced中的Accessibility checkpoint中的各项内容。
好像磕睡来了,眼晴有些在打架,本文中的内容空泛地确是也有些让人想睡觉,说这么多的检查类型,其实也只有一个目的,就是想让你知道什么时候判定用什么样的检查类型来检查自己的步骤能够进行判断,有个初体的印象。并且我还十分鼓励你去看看QTP关于检查点的帮助文档,原因很简单,如果你没有主动收集资料学习的动力,那以上又有何意义呢?想睡觉了,不写了,似乎眼睛都有些睁不开了。

 

十几天的时间里,文字照这个风格便写好了几篇文章,心想再凑几篇便发表出去,保持每周更新一个小节,这样自己的时间就好控制。

 

某天晚上,文字正在构思当天文章的内容,看见QQ在闪似乎有人加了我,查看备注信息,写着陈老师的名字,心想难道是我们这个行业的CSDN博客专家的那位,赶紧通过了认证,然后就看到QQ消息中说到:“我看到你在51测试论坛上面说要免费教自动化,是真的么”

 

“嗯,是真的”,文字赶紧回复到。

 

“那你是怎么想的呢”,对方问到。

 

“以教为学嘛,自己不晓得水平怎样,教人家的过程,会学习到新的东西的”,文字解释以。

 

“好,很好。我最近创办了一个自动化工作室,你有兴趣加入不。 工作室的目的,主要就是教一下想学的人,另外发表一些文章,圈子里面的人互动交流一些心得,期望推动这个技术行业的发展等等”

 

“好啊,真是太好了。这下找到组织了”,文字心里有些高兴的讲道。

 

“我想冒昧的问一下,您就是CSDN的那位陈老师吗?”

 

“嗯,是的”,见对方肯定的回答到,文字突然兴趣的对包子讲到“包子,陈老师耶,陈老师主动联系俺了,俺学自动化测试技术就是看的他的书入门的呢”

 

“是吗?”,包子抛开她的电视反问到文字。

 

“嗯”,文字肯定了一声,继续在QQ中问到,“我最近写了点关于QTP的东西,不晓得怎样,是否可以发给您帮我看看,给些意见,我好学习一下,并调整接下来的内容”

 

“好啊,你发我邮箱,我一定会看的”,陈老师回到。

 

“好,那先谢了”

 

“下周末,有几个朋友要在深圳聚一下,你到时也来吧,我们见一个面,如何”

 

“好,太好了”,文字兴奋的讲到。

 

“那先就这样,到时聊”

 

“嗯,到时聊”,QQ便复归于宁静。

 

“包子,太好了,这运气……真该现在去买点彩票”,文字非常高兴的讲到。

 

“是有点,不过你要抓住机会,多请教才是”

 

“嗯,你说我把我写的文章发给他,他看了会有啥反应”,文字担心的问到。

 

“我咋知道呢,你先发嘛,不发怎么知道”

 

“有道理,有道理”,文字心想到,便打开了163邮箱写到:

 

上次说的写的连载文章今天发送已完成的一部分,共有四篇文章,分别是:《Web-QTP随想录—史密期夫妇的初识》,《WEB-QTP随想录—老婆的生日》,《WEB-QTP随想录—清蒸豆豉鱼》,《WEB-QTP随想录—李密的猜想》,《WEB-QTP随想录—农民工父亲》。每篇文章我都选用了当天生活中的一些事做为叙述的引子,其中也有一些稀奇古怪的话,当时想到了就写了下来,至于每一篇文章到底写了些什么也是有大体方向的,不过我现在还没有打算搞个介绍什么的,因为我想还是顺着这个自然发展,其实也不是我刻意要搞些什么神秘感的色彩,主要是因为每次启笔时如果我不叙述点其它什么事的话,技术文章的压力就压得我非常茫然,反而不知如何继续了。其中有些东西,我也不晓得是否是正确的,我只是根据我在工作中的经验进行了一些猜测就表述出来了,如果有些地方错误的,还希望能得到指正。另外,感谢您发布时的编辑,有些图片可能还得借助截图工具生成在本地后再上传,这是个繁杂活,您受累了。

 

发出去后,怀着惴惴不安的心情等着回信,原以为会等好久,结果第二天陈老师便回信到:

非常好!这个系列绝对会受到QTP初学者的欢迎!我打算每周发一篇上去,这样你也有充足的时间把 后续的文章陆续写出来,期待一个精品QTP学习系列在不久的将来浮出水面!

 

得到肯定的回复,文字心里顿时洋溢起了满足的成就感,觉得自己做这些事,还是有一些意义的,不管怎样,这个事情一定得坚持做下去,曾经自己半途而废了很多事情,这次不管怎样可不能放弃啊。持之以恒,就是胜利!

原创粉丝点击