|
在没做自动化测试之前,我一直担忧自动化测试将会取代手工测试,甚至曾经还担心因此而需要转行,否则就要丢饭碗。自从接触自动化测试以来,我发现自动化测试所能做的事实在有限,对于一般的基本功能验证,使用自动化来完成还是一个不错的选择,然而自动化毕竟是通过脚本运行测试,不可能有人的思维和逻辑,尤其是不会发散测试。从这一点上来说,自动化永远不可能代替手工测试。
一个好的自动化测试顶多也就能完成测试工作的80%工作量,剩余的20%工作,还是需要测试人员去发散测试的。由于接触自动化测试也才不久,对于自动化测试所带来的理想目标也没个谱,所以以上所说只是在自己摸索使用过程中的一点感受而已。
就我所使用的自动化测试工具(RFT)来说,它还是一款相当不错的工具的,特别是对于有Java编码基础的人来说,更是会喜欢上它。它与Java的无缝连接,使得要实现一个功能变得简单。RFT工具的原理应该是通过录制脚本,使得所操作的对象都记录在测试对象地图中,然后在回放的时候到测试对象地图中去找到相应的对象,通过识别属性来找到控件,完成回放测试。这很明显,如果在回放测试时界面上的控件属性改变以后,RFT工具就无法找到这个对象了,从而会报“找不到合理的值。。。”等错误。所以,如果还是需要使用原来录制好的脚本进行回放测试的话,就必须更新测试对象地图,也就是重新找过这些对象。可以想象一下,如果版本之间有大的改动的情况下,将会有多少对象需要重新找过,以便能够适应新的测试版本?显然,这种方式对于回归测试来说,需要更新的地方就比较多了。于是,这里有一个比较好用的功能,find()方法,它能够通过属性值动态查找测试对象中的控件,只要控件的那个属性没变化,不管你前端怎么变都没关系,反正在执行脚本时,它每次都会重新去找符合条件的对象。于是在脚本中会有大量的类似于new GuiTestObject(find(atDescendant(".xxxx","xxxx",".xxxx","xxxx"))).click();语句出现,find()方法就是通过在脚本中以动态方式查找对象,每次执行时都去查找,从而不至于出现由于界面的更改而需要大量修改脚本的局面。然而,这也是有点问题的,在大量new一个新对象以后,内存能否吃得消?这是我所遇到的一个疑惑。另外,在通过find()查找一个对象时,常常会因为执行语句太快的原因,使得报出无法找到对象的错误。尝试使用xxx.waitForExist()方法,不过从来就没成功过,真是奇怪。只能使用sleep(n)来让它硬性等待,尤其是在切换页面的时候,报无法找到对象的错误的概率大大提升。还有一个问题,那就是各位开发人员对控件的属性做的一点也不规范,参差不齐,不是缺了胳膊就少了腿。命名也极不规范,导致在动态查找时困难重重。想起来就气~~~~
因为刚接触RFT工具才做一个工程,所以对这个工具的使用也是一知半解,很多高效的函数功能我未能好好运用,没办法,一来没有看过别人是怎么做自动化测试的,心里面对自动化测试的概念没个谱,二来自己的编码水平也是赶鸭子上架硬着头皮搞的(搞多了倒是觉得现在已经基本够用了)。唯有以不断的学习中提高自己吧。不过可以看到,现在做的一个工程比上一个工程要顺畅多了,思路也是比较清晰了,只是在实际编写脚本时,会遇到很多没有想到的问题。
一句话,期待能够看看其他做自动化测试的XDJM们是如何做自动化的,也很想加入一个有真正自动化测试团队的公司,以正自己的思想。希望有同仁前辈能够指点一二,不甚感激! |
|