《精通QTP——自动化测试技术领航》—第1章1.4节认清并请远离QTP的脚本录制模式

简介:

本节书摘来自异步社区《精通QTP——自动化测试技术领航》一书中的第1章1.4节认清并请远离QTP的脚本录制模式,作者余杰 , 赵旭斌,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 认清并请远离QTP的脚本录制模式
精通QTP——自动化测试技术领航
阶段要点

 了解Keyword View结构。

 摆脱Keyword View。

 熟练掌握Expert View的代码结构。

1.4.1 QTP的两种视图及思维转换
从本章节开始,读者将真正开始彻底摆脱脚本录制,正式走向脚本开发的台阶。在开始讲解QTP脚本开发之前,首先需要详加介绍Expert View这个视图,这个视图是QTP官方指定的脚本开发唯一认可的视图。那么,以何为出发点以及如何介绍Expert View这个视图呢?决定以抛砖引玉的方式,利用脚本录制视图Keyword View形象地引出脚本开发视图Expert View。

相信只要稍许接触过QTP的读者就一定知道QTP提供两种视图,一种是Keyword View(关键字视图),另一种是Expert View(专家视图)。Mercury公司开发两种视图的本意是想让不同类型的人使用不同类型的视图。接下来分别对这两个视图进行讲解,并开始抛砖,直到引出一块良田美玉。

1.Keyword View(关键字视图)
通过关键字视图(一种图形化的视图),QTP提供了一种模块化的表格格式,创建和查看测试或组件的步骤。在录制脚本的过程中,用户在应用程序上执行的每个步骤,在关键字视图中记录为一行,这样用户就可以轻松地修改任何一部分业务步骤。在这里拿“百度”的首页举一个例子,业务操作分3个步骤:

点击“图片”链接;
在图片搜索栏中输入“凤姐”;
点击“百度一下”。
在完成了这3个步骤后,关键字视图将包含下列行,如图1-47所示。


a6892103096ee49b161918829e864c6a27465577

图1-47中可以看到关键字视图非常直观有效,使用的用户可以很清晰地看到被录制对象的录制层次及运行步骤。但是,如果想自动化完成一些复杂的业务操作,在这张视图里是绝对不可能的,那就必须切换到专家视图里才行。专家视图等一切事宜就暂且搁置一下。先掌握关键字视图的界面、原理和工作机制。

在关键字视图中,一共分4列:Item、Operation、Value和Documentation。

Item:记录了所有对象。

Operation:该对象的操作。

Value:对象操作所用到的值。

Documentation:QTP自动生成的描述语句,描述了是什么对象,做了什么,怎么做。

关键字视图的介绍马上就要结束了,最后作者分解这个视图(语句会很随意)后会直接进入专家试图的解说。前面说过“在录制脚本的过程中,用户在应用程序上执行的每个步骤在关键字视图中记录为一行”,在本例中一共记录到6个步骤,如下:

打开浏览器;
进入百度首页;
点击[图片]链接;
进入图片页面;
在[搜索框]输入“凤姐”;
点击[百度一下]。
2.Expert View(专家视图)
瞬移成功,首先肯定是要讲专家视图的工作原理,“QTP在关键字视图中的每个节点在专家视图中对应一行脚本”。读者可能一下子不明白这句话,那先来看两段代码,第一段代码是将关键字视图的工作原理用在专家视图上的错误代码,转换后的脚本如下:

Browser("百度一下,你就知道")
'图1-47中页面1部分
Page("百度一下,你就知道")
Link("图 片").Click
'图1-47中页面2部分
Page("百度图片—全球最大中文图片库")
WebEdit("word").Set"凤姐"
WebButton("百度一下").Click
再看一下专家视图中正确的代码:

'图1-47中页面1部分
Browser("百度一下,你就知道").Page("百度一下,你就知道").Link("图 片").Click '句1
'图1-47中页面2部分
Browser("百度一下,你就知道")._
Page("百度图片—全球最大中文图片库").WebEdit("word").Set "凤姐" '句2
Browser("百度一下,你就知道")._
Page("百度图片—全球最大中文图片库").WebButton("百度一下").Click '句3
看完这两段代码以后,再回过头来理解专家视图的工作原理,专家视图和关键字视图是完全不同的,用通俗点的讲,专家视图并不像关键字视图那样,每个步骤都在视图中记录成一行,在专家视图中,必须定位到业务操作最终的对象,并且每一句的结束,以及最终的对象的业务行完毕为基准。在这里,最终的对象就是节点,专家视图中的一句代码是关键字视图中好多个步骤的结合。而那段作者自己伪造的代码就不是,每一句都不完整,要么有头没尾,要么无头有尾,这就是Keyword View和Expert View最根本的区别,下面,一句句看专家视图中的代码构成,先以“句1”来说,“句1”中集合了3个对象。

Browser—该对象如果出现必定是第一层,可以把它想象成打开的一个指定浏览器,具体哪个浏览器那么就由后面括号里的参数决定,如:Browser("百度一下,你就知道"),这样QTP就能很准确地识别到底打开的是哪个浏览器了。
Page—浏览器下肯定有各种各样的网页。那要定位这个对象也就很简单了,和上面一样,在后面的括号内加参数,如:Page("百度一下,你就知道"),这样QTP就知道了,原来是要定位一个叫“百度一下,你就知道”的网页,然后其他网页会一概不理!
Link—在定位了前两个对象后,终于可以定位到要进行业务操作的对象了。可是,页面上如果有好多Link呢,怎么办?只能和之前一样,在后面的括号内写进参数,如Link("图 片"),这样QTP就不会乱了!好了,在最终找对了要操作的对象后,就可以给出指令,命令它做事情了,如需要它进行点击操作,那就给Link对象来个Click方法,到此,整个语句就可以完毕了。
分析:“句1”已经被拆解,作者在这里用最通俗的语言方式连贯地叙述一遍“句1”,希望能让新人听明白。→在一个叫做“百度一下,你就知道”的浏览器下的一个名曰“百度一下,你就知道”的网页页面上找到一个叫“图片”的链接,找到后,点击它。

在上面的例子中,是以Browser().Page().Link()的结构出现的,但实际上,在Web测试中并不只有这一种固定形式,除了Browser必定是在第一层以外,Page以及Link(或其他所有对象控件,如WebEdit等)都不是固定必须要接在前面那层的后面的,比如:

(2)Browser().Page().Frame().Link():Link对象跟在Frame对象后面而没有跟在Page后面。

(2)Browser().Dialog().Page().WebElement():Page对象跟在Dialog对象后面的一个例子。

接下来再看看“句2”,这句代码中需要注意Page已经变化了,变成了Page ("百度图片—全球最大中文图片库"),然后在该页面中找到对象WebEdit("word"),最后给这个对象一个Set的操作方法并在后面写入参数,使得QTP在该页面上找到关键字搜索框,输入“凤姐”。

最后的“句3”唯一和前者的变化就是最终操作的对象不同了,Browser不变,页面仍然是Page("百度图片—全球最大中文图片库"),最后在前面输入好参数的前提下对WebButton ("百度一下")这个控件进行一个点击的操作,使得百度图片搜索引擎能够搜索到一些凤姐的照片。

终极分析 以上可以看到Browser对象一直使用的是同一个,随着Page对象的改变而分成了2个分支,在不同的分支上定位到不同的最终目标并赋予“动作”。所以,现在应该知道关键字视图中的代码结构了。就是通过这样的一层层定位,直到定位到最后的待操作对象,从而在Expert View下完美地组成一句脚本代码。

需要引出下一层对象用“.”,直到定位到最后一个待操作对象,然后仍然用“.”赋予其动作(各种不同的方法)。

在QTP中,要找到具体对象,如“图片”这个Link,规则就是在对象大类(Link类)后面以括号+引号的形式具体定位到那个Link控件,比如Link("图片")。需要注意的是,输入括号和引号乃至其他任何符号都必须是在英文状态下。切记!很容易出现类似的问题,在中文状态的输入法下打引号,结果QTP报错,自己找了好长时间也找不出问题。

概括&小结:

对于QTP 来说,绝大部分的复杂操作都无法在关键字视图中实现,例如,要处理动态对象、需要定制个性化测试结果、获取对象运行时的属性值(Run-time Value)等。

QTP的核心编码语言是Visual Basic Script,因此,如果读者熟悉VBScript,就可以运用自如地通过编程方式在专家视图中设计复杂的测试脚本。同样,QTP本身的对象库编程(Object Programming)和描述性编程(Descriptive Programming),这一切也都必须在专家视图中才能完成。

关于对象库编程、描述性编程、VBScript编程、Run-time Value、处理动态对象等一系列知识都会在后面的章节中逐步向读者呈现。

1.4.2 总结
不知道有些读者会不会有这样的疑问,本书既然一向有“彻底抛弃脚本录制”的理念,那为什么还要写Keyword View(关键字视图)的内容呢,就算要写只一句话带过不就得了!作者由衷地希望有这些疑问的读者越多越好,这说明广大读者就是冲着“抛弃录制”的思想购买这本书的。现在听作者解释一下吧。

作者这么做就是因为想抛出一块好砖引出更好的玉,在抛砖的时刻(笼统、重点配合一个实例介绍关键字视图)如果能做,越有声色,后面引出的玉一定就能更好(将关键字视图中的步骤“画面”,一条一条转进专家视图使其成为脚本代码的一个解读过程)。另外,请重新回顾下这个小章节标题的后半部分“思维转换”。作者觉得更应该引导读者转换的是思想、思维,绝对不该是两个视图间的转换那么简单与粗糙。读者要从思想上去认识Expert View,如果光从操作上直接转向Expert View(直接在关键字视图敲击代码),表面上看很简单很轻松,但其实忽略了对专家视图的认识,也忽略了对QTP两个视图原理以及之间关系和不同点上的认识,如果这样走下去,作者觉得在今后脚本开发的学习道路上挫折会越来越多,地基打好的关键性大家都很明白。相信,本书的这一个小章节内容虽少,但是对今后的帮助不一定少!

知识点巩固和举一反三练习

一、大家来找茬(结合图1-48找出代码片中的错误)


4fc533b8e46967d02b2c8e003294294952f7b2cc

代码片如下:

Browser("百度一下,你就知道").Page("百度一下,你就知道").Link("知 道").Click
Browser("百度百科—全球最大中文百科全书")._
Page("百度百科—全球最大中文百科全书").WebEdit("word").Click
Browser(百度一下,你就知道)._
Page("百度百科—全球最大中文百科全书").WebButton("进入词条").Set"51testing"
二、请根据图1-49中关键字视图的结构与步骤转化成专家视图中的代码。


63c56cc62b62a8c50d6fa1efdd0675ff917a4a46

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
相关文章
|
30天前
|
jenkins 持续交付
Jenkins自动化部署脚本
Jenkins自动化部署脚本
30 0
|
1月前
|
JavaScript 前端开发 测试技术
使用Selenium执行JavaScript脚本:探索Web自动化的新领域
本文介绍了如何在Selenium中使用JavaScript解决自动化测试中的复杂问题。Selenium的`execute_script`函数用于同步执行JS,例如滑动页面、操作时间控件等。在滑动操作示例中,通过JS将页面滚动到底部,点击下一页并获取页面信息。对于只读时间控件,利用JS去除readonly属性并设置新日期。使用JS扩展了Selenium的功能,提高了测试效率和精准度,适用于各种自动化测试场景。
46 1
|
4天前
|
Linux Shell Android开发
自动化脚本之GPIO/LED相关适用于Android/Linux
自动化脚本之GPIO/LED相关适用于Android/Linux
13 0
|
10天前
|
SQL 存储 分布式计算
Hive【基础知识 02-2】【Hive CLI 命令行工具使用】【详细举例-包含测试脚本文件】
【4月更文挑战第7天】Hive【基础知识 02-2】【Hive CLI 命令行工具使用】【详细举例-包含测试脚本文件】
16 0
|
17天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
【4月更文挑战第9天】本文探讨了Python在自动化测试中的应用,强调其作为热门选择的原因。Python拥有丰富的测试框架(如unittest、pytest、nose)以支持自动化测试,简化测试用例的编写与维护。示例展示了使用unittest进行单元测试的基本步骤。此外,Python还适用于集成测试、系统测试等,提供模拟外部系统行为的工具。在脚本编写实践中,Python的灵活语法和强大库(如os、shutil、sqlite3、json)助力执行复杂测试任务。同时,Python支持并发、分布式执行及与Jenkins、Travis CI等持续集成工具的集成,提升测试效率和质量。
|
29天前
|
运维 监控 Linux
linux脚本自动化运维任务
Linux自动化运维通过脚本提升效率,涵盖服务管理(启停服务、异常恢复)、系统监控(资源警报)、日志管理(清理分析)、备份恢复、补丁更新、自动化部署(如Ansible)、网络管理、定时任务(cron)和故障排查。结合shell、Python及工具,形成高效运维体系。
23 3
|
30天前
|
存储 Unix Shell
【简化Cmake编译过程 】编写通用的bash脚本:简化和构建cmake高效自动化任务
【简化Cmake编译过程 】编写通用的bash脚本:简化和构建cmake高效自动化任务
43 0
|
1月前
|
监控
通过Lua脚本实现禁止员工上班玩游戏的软件的自动化任务管理
使用Lua脚本,企业可以自动化管理员工行为,防止上班时间玩游戏。Lua是一种轻量级脚本语言,适合编写监控任务。示例脚本展示了如何检测工作时间内员工是否玩游戏,并在发现时执行相应操作,如关闭游戏或发送警告。此外,另一脚本演示了如何将监控数据通过HTTP POST自动提交到网站,以实现有效的行为管理。这种解决方案灵活且可定制,有助于提升工作效率。
119 1
|
1月前
|
数据采集 数据处理 开发工具
argparse是你的好帮手:快速编写自动化脚本、测试脚本、数据处理脚本
argparse是你的好帮手:快速编写自动化脚本、测试脚本、数据处理脚本
|
1月前
|
前端开发 Java 测试技术
《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)
【2月更文挑战第14天】《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程) 前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本。前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容,首先宏哥搭建好的环境中创建首个完整的自动化测试脚本,让小伙伴或者童鞋们提前感受感受,也是为了激起大家的学习兴趣。宏哥的个人经验是:自动化脚本编写比较容易,最大的困难去如何去写测试断言。自动化测试,最重要的还是落在测试上面,而不是自动化,自动化只是手段。
42 1
《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)