在这里我就不罗嗦一些vbscript和qtp框架的基本用法了,就用实例说一下,我们当时的大概思路
先看一下文件夹的结构
话说已经有一年没写QTP的脚本了,几次提笔都不知道从什么地方写起。不过既然答应了小九要总结总结,就试着努力回忆一下吧。
很多同学刚开始接触QTP的时候都觉得无从下手,有不少同学问我要过教程啊之类的,也有的问我有没有好的书籍推荐。我还真是没有教程,其实QTP自带的帮助就挺不错的,就看你能不能耐心看下来。
接到自动化测试的任务后,我们首先和大家一起讨论了要自动化的用例,并不是所有的用例都能自动化,也不是所有的用例都需要自动化。
用例确定好之后,就开始了脚本的架构设计(PS:请忽略那些个流程中的设计文档啊,编码规范啊,我们直接切入主题吧)。在设计架构的时候,我主要考虑了以下几个方面:
1. 代码的复用
2. 数据如何准备
3. 数据如何清理
4. 一条用例一个脚本还是几条用例一个脚本
5. 测试报告如何生成
6. 对象库的管理
7. 因为项目有地区差异性,所以脚本的易维护性也很重要
带着上面的疑问,我们进行了编码前的准备工作
1.代码复用。如一个方法需要被重复调用2-3次以上的,就抽出来作为可以公共调用的方法。
2.数据驱动。测试数据用excel进行数据驱动。把需要的测试数据保存到excel里面,用的时候就从excel中读取,这样做有个好处就是方便对测试数据进行编辑。
3.数据准备。测试过程中如果需要准备数据,采取直插数据库的方式进行数据准备。这种方式有个很大的弊端,必须相当熟悉数据库的保存逻辑,否则会造成脏数据,而且也会影响测试结果,强烈不建议使用。如果系统中已经有现成的满足数据准备的功能,还是用已有的功能来实现。例如:要测试编辑员工资料的功能,就先用脚本跑一下增加员工的功能。
4.数据清理。
5.一条用例一个脚本。脚本之间不相互依赖,这样可以保证不会因为一条用例的失败,影响其他用例的执行。
6.测试报告的生成。现在已经忘了从哪个网站下载的原始测试报告框架ReporterManager,去掉了其中一些不需要的功能。保留了生成Excel报告和发生错误截屏的功能。推荐使用该框架,测试结果一目了然,尤其喜欢截屏部分,很好的保存了现场证据,呵呵。
7.对象库的管理。把多个用例中都会用到的对象都抽取出来,并进行归类,相同类别的对象保存到一个库中,方便脚本编写的时候查找调用。为什么不一条用例保存一份对象库呢?如果一条用例就保存成一个对象库,会造成一部分对象,在多个对象库中存在,假设该对象属性发生了变化,需要把N多的对象库进行相应的修改,而且也容易造成漏改的现象。
8.地区差异性。本来是想把各个地区的相同用例抽取出来作为主干代码,然后由地区差异的部分做成分支。但是脚本中有很多公共调用的部分,如果搞成分支,分支中也需要包含这些公共调用的代码。以后修改维护就很麻烦,一个小小的改动要把主干和所有分支中的代码都修改一下。我想SVN可能有解决方案,但是我们不会用而已。最后,我们把地区的信息,放在了负责数据驱动的excel里面,在excel里面进行差异化配置,在脚本中进行地区的判断。这样只维护一套代码就可以了。
9. 运用类。虽然在vbscript中也谈类啊对象啊有些奇怪,但是用了之后会发现,代码结构比较清晰,用起来很方便。我们可以在Class_Initialize中定义用例一开始必须要初始化的一些内容,在Class_Terminate中定义一些用例结束需要做的清理工作。在用到的时候,前后两句代码就可以解决。如果在执行过程中遇到一些异常情况,导致代码没有执行到最后一行就终止了,这时候Class_Terminate中定义的清理工作仍然会被执行,就不会造成有始无终的情况了(比如说用例开始的时候准备了很多测试数据,但是最后却没有被清理掉)。好处就不一一举例了。
QTP中有几个字符是需要被转义之后才能正常使用(尤其是在对象识别中),而QTP自带的帮助里面提供了一个函数NormalizeString,可以实现这种转义
: 冒号
‘ 单引号
” 双引号
\ 反斜杠
/ 正斜杠
$ 美元符号
() 左右圆括号
QTP中利用url识别对象时,有时会出现对象无法被识别的问题
例如下面这种情况:
Browser(“xxx”).Page(“url:=http://www.threes.cn/index.php?p=755″).Sync
如果执行上句会提醒页面上找不到与之匹配的对象
这是因为在VBScript的正则表达式中?号是匹配前面的子表达式零次或一次,这样明显是错误的
解决方法是:将?进行转义
即Browser(“xxx”).Page(“url:=http://www.threes.cn/index.php\?p=755″).Sync