单从表面上看,的确是!但是,同样面临一个问题,那就是在用同一个测试数据“QTP自动化测试技术领航”在做测试。所以,执行1次和执行上百次是没有什么实质性的区别的,特别像这种搜索框之类的功能点,这样的自动化测试也算是一种浪费时间的无效测试(特殊情况除外,如可靠性测试)。怎么才算有效?从手工测试的角度上来说,就是输入完全不同的测试数据,然后查看测试结果。那QTP该怎么做呢?很简单,只要把关键字输入框中Set的数据改掉就可以了,如下面这个脚本:
'启动浏览器并进入百度首页 SystemUtil.Run "www.baidu.com" '第一次 Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebEdit("关键字输入框").Set "QTP自动化测试技术领航" Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebButton("百度一下").Click Browser("百度一下,你就知道").Page("百度搜索_搜索结果页面")._ Image("到百度首页").Click '第N次 Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebEdit("关键字输入框").Set "谷歌" Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebButton("百度一下").Click Browser("百度一下,你就知道").Page("百度搜索_搜索结果页面")._ Image("到百度首页").Click '第十次 Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebEdit("关键字输入框").Set "最后一次了,相同的代码一共使用了10遍" Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebButton("百度一下").Click Browser("百度一下,你就知道").Page("百度搜索_搜索结果页面")._ Image("到百度首页").Click |
上面这段代码最后完全实现了想要的效果,但是,缺点大家都已经看到了,有太多的重复内容,假设是要输入100个测试数据呢?复制、粘贴100次吗?显然不需这样,完全可以将Set的值进行参数化。先给出第一个解决方案,使用前面第一段代码相同的循环,但又每次输入不同的关键字,代码如下所示:
SystemUtil.Run "www.baidu.com" For i = 0 to 9 '句1:代码唯一有改变的一句 Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebEdit("关键字输入框").Set DataTable.Value("关键字输入","Action1")&i Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebButton("百度一下").Click Browser("百度一下,你就知道").Page("百度搜索_搜索结果页面")._ Image("到百度首页").Click Next |
我们来分析一下这个脚本,其实这段代码几乎和先前的那段代码没有两样,作者只改动了一句而已(代码里用注释标注的句1)。解决方案其实也不难,就是把每次循环的计数和测试输入组合,这样每个测试数据就都不一样了。不过,读者应该发现了吧,在这里并没有直接将测试数据明确写出来,取而代之的是DataTable.Value("关键字输入","Action1")这句话。这个就是本章节介绍的参数化,通过DataTable参数化。
作者把测试数据封装到了DataTable.Value("关键字输入","Action1")里,如图1-196所示。
图1-196
如图1-196所示,这个就是QTP内置的Data Talbe界面,可以在这里输入一些数据。把测试数据“QTP自动化测试技术领航”输入到了A1这个单元格里。这样做有什么好处?首先,一定知道现在所做的事情的意义和意图。其实从某种角度上讲,虽然操作很简便,但是,我们是在做封装的动作,将测试数据独立出来,并封装到一个容器里,以后可以供脚本调用。为什么要封装并且要把测试数据独立出来存放到一个储存的地方?试想一下,如果不进行测试数据封装会有什么后果。比如脚本里有100处地方需要输入这个测试数据,如果突然有一天测试需求变化了,不再需要输入这个关键字,需要换另一种测试数据进行输入,因为需要修改100处地方!如果此时测试数据和脚本是分离的,那我们只需要在A1这个单元格修改1次就可以了!1:100哪个划算,相信读者和本人一样清楚!到此,也引出了自动化测试的一个重要理念:测试数据和脚本业务的抽离。当然,将测试数据剥离出脚本的方法有很多种,在这里只介绍如何利用QTP的Data Table进行测试数据分离。