1.8.3 Test DataTable VS Run-time DataTable
这个标题很熟悉吧,在本书的前面几个章节,介绍过Test Object和Run-time Object。在这里,我们又和Test…以及Run-time…见面了。回顾一下,Test Object是什么意思?就是固定在测试对象库里的测试对象。那么Run-time Object呢?就是程序运行时实际的测试对象。那么在这里Test DataTable和Run-time DataTable的理念完全是借鉴它们的。先来看一下Test DataTable和Run-time DataTable之间的区别和含义。
● Test DataTable—在Data table里事先准备好的、固定的测试数据,它是一组静态数据,是由自动化测试工程师人为事先填写进去的。
● Run-time DataTable—在QTP执行过程中,将测试数据填写到Data table里,QTP运行结束,测试数据就消失(不会保存在Data table里),但是可以在测试报告中看到它。
先来看一下Test DataTable,这个就相当简单了,并且之前就已经全面地做过实例(Global Sheet和Local Sheet),可以手工在Data table中设置一些测试数据。主要来看看Run-time DataTable究竟是怎么回事。
我们试想一下,现在有一个注册的业务需要进行自动化测试。因为自动化测试有模块化和细分化的原则,所以,需要把这个业务拆成两个脚本,第一个脚本主要做注册的操作。而大家都知道通常现在的任何网站都会在注册后进入另一个验证界面,往往要验证一些基本信息,比如,确认你填写的用户名、生日、住址等是否正确。所以,把这个验证的业务过程封装到第二个脚本中去。那么问题就来了,如果一个测试业务由两个脚本组成,那么它们之间的数据中转该如何进行?即将第一个脚本中填写的注册信息放到第二个脚本中去验证。此时,通常情况下有两个比较好的方法,第一个就是通过EOM转出数据,这个是后续章节的内容,这里不多做阐述。而另一个好方法就是利用QTP自带的Data table,方法与实现步骤如下(假设以注册举例,只在注册后的验证界面中校验用户名这个数据)。
(1)填写完所有必填项,并使用GetRoProperty来获取已填写的用户名。
(2)将这个动态的获取到的值动态地传入Global Sheet的某个指定列中。
(3)在第二个脚本(校验注册信息的这个页面)中动态读取这个值并做判断校验。
(4)脚本运行完毕,Run-time数据消失,不过可以通过Test Report来查看脚本在运行时使用过的所有测试数据。
那么接下来就来做一个实例,需完成如下业务。
(1)进入百度首页。
(2)在搜索框中输入“QTP自动化测试技术领航”字样。
(3)点击“百度一下”按钮。
(4)校验在搜索结果页面中的搜索框中是否保留了刚才输入的字样。
在看到这个业务后,先进行业务分析,并大致给出一个实现思路,步骤如下所示。
脚本1。
(1)进入百度首页。
(2)在搜索框中输入“QTP自动化测试技术领航”字样。
(3)使用GetRoProperty去获取搜索框中刚才输入的字样,并传入Global Sheet的指定列中。
注意:在这里读者肯定要问,为什么不直接把“QTP自动化测试技术领航”字样传入Global Sheet,而要多一个步骤通过GetRoProperty去获取?因为,如果你直接传入数据,就少了一个验证是否成功输入到搜索框中的过程了,这样的自动化测试是不可靠的。
脚本2。
(4)读取Global Sheet中的Run-time Data。
(5)获取搜索结果页面中的搜索框的值,假设为CheckValue。
(6)将Run-time Data与CheckValue做比较。
最后,通过上述分解步骤完成脚本如下:
脚本1:
SystemUtil.Run "www.baidu.com" Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebEdit("关键字输入框").Set "QTP自动化测试技术领航" Run_Time = Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebEdit("关键字输入框").GetROProperty("value") '将Run_Time传入Global Sheet指定列 DataTable.Value("Runtime_Data","Global") = Run_Time Browser("百度一下,你就知道").Page("百度一下,你就知道")._ WebButton("百度一下").Click |