您的位置:首页 > 其它

在156环境上搭建满配环境时遇到的问题和解决办法

2009-01-18 19:08 513 查看
由于性能测试的需要,我们需要在156环境上搭建一个超过3000个载频的配置集,由于工作量大,我开始考虑使用自己比较熟悉的自动化工具——QuickTest Pro来协助搭建。实践过程也是一波三折,经历了好几个意想不到的困难:

在正式介绍实践过程之前,先介绍一下包括QuickTest、Robot这样的自动化测试工具自动捕捉窗口上各种控件并执行相应操作的原理还有通常情况下做脚本的流程。我们知道在windows操作系统中,所有对象无论可视还是不可视,都有一个独一无二的Object ID号和它的一组属性:包括具体名称、类型、当前值还有能进行的操作等等。自动化测试工具就是通过捕捉每个控件的ID号,然后修改其对应属性值来模拟用户操作的。

一般情况下制作一段QTP脚本的流程是:首先按照测试用例的要求手工把整个流程走一遍,估计一下哪些地方会有哪些困难(譬如说有些动作很难录制进脚本);哪些动作适合分划成不同的Action;哪些动作适合被复用;哪些功能需求需要编程解决。心里有底之后就开始录制,通常是录制一段然后停一下保存成一个Action,然后继续录制第二段,如此反复。全部录制完成后把整个脚本从头到尾跑一遍看看录制的有什么问题。在确认没有任何问题之后就开始进行参数化处理:哪些地方要填进不同的值;哪些地方要输出结果;哪些地方要进行比较(就是拿输出的结果和我希望得到的结果比较,看看有没有达到我的预期),都完成了一段脚本也就大功告成了,当然实际录制过程中有些步骤是可以跳过的。

而Java系统的情况比较特殊,它的大多数控件在Windows操作系统中没有登记,所以也就给不出Object ID号,更谈不上查找对应属性的可能,唯一能做的就是录制鼠标在整个大屏幕上点击坐标的过程,这给自动化测试工具的使用带来了很大困扰。补救的办法有两个:安装Java插件或者通过自身的脚本录制技巧来弥补这个问题。

最开始很不顺利,由于QuickTest Pro中缺少Java插件,它和我们的iOmcr环境兼容性非常差。录制了一遍再看代码发现完全就是一个鼠标在窗口上点击的坐标位置的过程,而不是我希望得到的针对特定Object ID的具体执行操作,而且由于机器执行指令的速度远远快于人,相同的指令执行起来一瞬间就执行完毕,鼠标点下去,不等相应界面弹出来它就执行下一个动作了,和iOMCR窗口的配合程度非常差,显然这样的脚本是没有任何使用价值的:
Window("ISMG").Window("由模板创建基站").Drag 188,32
Window("ISMG").Window("由模板创建基站").Drop 104,33
Window("ISMG").Window("由模板创建基站").Type "B8018-"&CStr(i)
Window("ISMG").Window("由模板创建基站").Click 268,61
Window("ISMG").Window("由模板创建基站").Click 210,119
Window("ISMG").Window("由模板创建基站").Drag 524,32

那么自动化工具就真的不能用么?仔细观察了一下我发现其实这组代码如果经过适当修改还是可以派上用场的:

首先,它的运行速度太快了,鼠标点下去,不等需要的界面出现它就执行下一个动作了。因此第一步是控制它的执行速度,让它慢下来。具体做法是在每条语句之后加一条等待语句:
Wait 5 (等待5秒钟)
这样再执行一遍,发现脚本运行速度慢了很多,但是和iOMCR的配合程度明显改善,效果好于第一次执行,基本上达到我需要的效果。下面就是修改后的QTP代码段:
Window("ISMG").Window("由模板创建基站").Drag 188,32
wait 1
Window("ISMG").Window("由模板创建基站").Drop 104,33
wait 1
Window("ISMG").Window("由模板创建基站").Type "B8018-"&CStr(i)
wait 1
Window("ISMG").Window("由模板创建基站").Click 268,61
wait 1
Window("ISMG").Window("由模板创建基站").Click 210,119
wait 1
Window("ISMG").Window("由模板创建基站").Drag 524,32
wait 1

可是光这样还不够,脚本跑一次只能创建一个基站,而我需要的效果是一次能创建十几个甚至几十个基站,这样对脚本录制提出更高的要求。
如何解决这个问题?解决办法分两步走:第一步观察在整个创建基站过程中哪些界面经常使用但是其中内容、各种控件的相对位置却变动不频繁,这样的界面往往最有利于录制自动化脚本的:

我发现用模版创建基站的窗口在创建完成一个基站后,并不会立即消失,而且其中不少值也会保留。这是非常有利于录制自动化脚本的,因为最开始我希望通过点击树型表来解决问题,但是实践后发现树型表中特定节点会随着创建基站数目增多而渐渐上移,不利于脚本录制。而如果在模版创建基站窗口上录制的话会省掉很多麻烦,因为其中不少数值已经保留好而且窗口控件也比较固定。
录制好脚本后创建一个基站没问题,下一步需要让他能循环运行,这样可以循环创建多个基站。
实现QTP脚本循环运行的方法有三种:设定多组参数值,然后启动QTP自带的循环运行功能;使用类似于MultiTest Manager一类工具来实现;最后就是编码实现。三种办法各有其适用范围:
第一种办法适合于那些输入输出值很多但是循环次数不多的情况,但是不适合于那些循环次数太多的情况,否则光每次重新输入各种参数就是个惊人的工作量;
第二种办法适合于很多脚本,彼此流程各不相同,但是要求在特定时间下启动运行的情况。譬如要求夜间10点开始自动运行,早上8点发出报告的情况。
第三种办法是在脚本头尾加上for循环指令,然后在循环数和循环体参数之间建立关联(譬如当循环数i=1的时候,我要求输入的基站别名为“B8018-”&i,即B8018-1)。就可以实现“一次编写,循环运行”的效果。

最后我们采取了第三种方法来解决这个问题,这样使用自动化工具在156环境上搭建满配环境使用的脚本大体上编写了。后续还要求做些工作,譬如先试跑一下,不要求从1跑到28,只要求从1跑到3,看看效果如何。

自动化测试的特点是工具掌握起来非常容易,通常QTP这样的工具对照说明书学习一周左右都能上手,关键在于明确什么情况下适合使用自动化测试工具,什么情况下不适合使用;还有就是什么情况下使用什么手段来实现自动化测试。通常来说在一个系统刚刚下线,界面尚不稳定,正在进行系统测试的情况下最好避免使用自动化测试工具;当一个系统已经经过数轮开发,其界面基本稳定的情况下,进行回归测试正是自动化测试工具最擅长的地方:能在不占用大家工作时间的情况下完成重复性极强的回归测试任务。测试情况不单单包括前台测试,也包括后台测试、压力测试、安全性测试等等类型。不同性质的测试需要用到不同的测试工具和技能:譬如前台测试用QTP、Robot比较合适;后台测试需要测试工程师会编写一些SQL、Shell脚本甚至简单的程序;压力测试需要同时模拟多个用户进行相同操作(这时候需要用到Loadrunner一类的工具);而安全性测试要求测试工程师学会运用一些常用的黑客工具来对已有系统进行攻击。所以说自动化测试包含的面很广(甚至有种说法认为自动化测试的本质就是编码测试)。
另外,如何让自动化测试顺利进行不单单是测试工程师要考虑的问题,在前期的需求分析、概要设计直到开发阶段都要或多或少把如何有利于自动化测试的问题考虑进去:譬如选择什么样的语言进行开发有利于自动化工具运行?界面的设计是否有利于自动化测试等等。
衡量自动化测试实施的好坏有这么几个标准:高效性;可靠性;可复用性;性价比和最后效果。客观地说,这次自动化测试实施如果用上述四个标准衡量,还不能说是一次成功的尝试,还有许多可以改进和提高的空间:特别是在可靠性上还需要提高。
自动化测试实施有一个尺度问题,并不是简单地自动化程度越高越好,在以前的实践中有的人盲目追求自动化,不顾客观条件硬上,结果勉强搞出的“自动化”实施可靠性非常差,最后只好派人守在机器前面眼睁睁地盯着,反而不如原先。

最后,根据以往的使用经验,总结了一些使用QTP应该注意的地方放在下面:
QTP尽量避免与vnc一类的远程登录工具混用,特别是vnc,会导致QTP运行不稳定。
尽量避免使用QTP录制拖拽一类的动作。
QTP运行时通常情况下应该锁屏避免外界干扰,但是如果碰上类似录制java程序这样的特殊情况,不要这样做。
通常情况下,QTP提供了由用户指定在哪个程序上运行脚本的功能,每次录制或者运行脚本时最好启用该功能,这样能避免对其他程序的干扰。

关于有没有其他更好的办法录制针对java程序的脚本的问题,有一种叫Abott的eclipse插件初步实现了该功能,它是一种免费开源插件,有兴趣的同事可以在它基础上进行一些研究。

在153上重装数据库实例时遇到的问题

昨天我在UNIX服务器上卸载/重装Oracle实例,感觉过程颇不顺利,遇到很多意想不到的障碍,拖了解决。

首先卸载旧的实例的时候,在dbca环境下卸载,总是报“有些文件无法删除”的故障。开始百思不得其解,后来才想起来,当初装这个实例的时候不规范,用root用户建的,现在改用oracle用户来卸载,权限范围发生变化了,有些属于root用户的文件不能彻底删除,当然就故障百出了。由此联想到包括我在内的很多用户以前为了简单图快,一个root用户从头用到底,这样做法很不规范,到时候会给后期维护带来很多问题,希望还是养成针对不同服务使用不同权限帐户的习惯。

好容易把旧的实例卸载掉,新的问题又来了:创建新的数据库实例的时候,也是不断报各式各样的问题,安装总是进行不下去,这次我也很困惑,账户用的是对应账户,也是按照一份关于oracle下如何安装实例的doc文档作的,怎么会老是不成功呢?后来请教另外一个同事,才知道这文档由于写的比较早,里面很多配置都已经过期了(还有种情况就是由于针对机型不同,配置也有差异),其实里面很多配置完全不需要更改的,按照默认配置走下去绝对没问题,这样下去实例就顺利安装好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐