第一部分:自动化一个测试用例
当你要开始自动化一个测试用例的时候,有一些重要的事情需要完成。当你完成所有这些事情的时候,测试脚本的自动化也随之完成。
在这里,我们将首先在大部分的自动化测试用例里找出所有通用的任务。
让我们用一个例子(GmailLogin)来理解前面所说的内容
为了自动化Gmail Login,你需要写一些代码来做以下的事情:
- 打开Gmail Url
- 输入正确的用户名和密码
- 点击登录按钮
通过下面的图让我们更加详细的理解这一点:
任务1 - 识别对象
- 在你对任何对象做操作之前,你需要唯一地识别这个对象。比如,在你输入Email之前,你应该知道在Gmail Login界面上的2个输入框那个是Email。一旦你正确的识别出email,你就可以在Email里输入正确的数据
- 每个控件都有它自己的唯一属性集,用它们,在同一个页面你就可以与其它的控件做区分。例如,Gmail的的登录按钮包含了文本'Sign in',用这个文本就可以明显与其它的按钮做出区分
- 因此,识别一个对象,你要找出这个对象的唯一识别属性
任务2 - 在对象上执行操作
- 一旦你唯一的识别一个对象,那么下一步将是对这个对象的一些操作
- 你所执行的操作依赖对象的类型,不同类型的对象包含不同的操作
- 比如:对于按钮和链接,你可以做点击操作。对于一个输入框,你能执行Set或者Type操作。类似的,对于每个对象都有自己的操作集合
任务3 - 数据处理
- 数据处理也是在对象上执行操作的一部分
- 对于像输入框的控件,你需要执行输入一些数据的操作
任务4 - 合并所有单独的操作
- 为了创建一个测试脚本,你需要合并单独的操作在一起,然后执行它们
- 比如:Gmail的登录部分将有以下的操作
- op1: 打开Gmail URL
- op2: 输入用户名
- op3: 输入密码
- op4: 点击登录按钮
- 您能以Action或者Function的形式合并所有单独的操作
- 因此一个Action或者Function是一个操作集合,这些操作集合合并成一个业务逻辑流(比如Login, Logout, Search)
任务5 - 重用和不重用的函数
- 在你的测试脚本里有一些函数,一些是只能用一次,而其他的函数可以用多次
- 只能用一次的Actions是不可重用的Actions,可以用多次的Actions是可重用的Actions
- 例子:考虑以下的3个测试用例
- 上图,你注意到函数Gmail_Login和Gmail_Logout是被用了多次。因此,这些都是可重用的函数,其它都是非可重用的函数。
一个简单测试脚本的结构
以上我们已经列出了你需要执行测试脚本的通用任务
- 识别唯一的对象
- 在对象上执行操作
- 只要需要就要执行数据处理操作
- 创建重用和非重用的的Action(Function)
第二部分:QTP怎样自动化测试用例
- 在第一部分,你看到为了创建一个测试脚本你需要完成的通用任务
- 在这个部分,你将看到QTP怎么样协助我们来完成这些任务
- QTP有不同的功能和机制来帮助你完成这些任务
- 让我们看下每个任务以及对应QTP的功能
识别和存储对象
QTP提供一个唯一的机制,使用它,你能找出对象的唯一识别属性。这个机制叫做Object Spy。QTP也提供一个叫做Object Repository的仓库,可以存储一些对象以及他们的属性
在对象上执行操作
QTP有一系列预定义函数库,他们包含了不同对象的相关所有的操作。当你写一个对象在你的脚本里,QTP也提供了智能提示,它可以自动展示与这个对象相关的所有函数和属性
执行数据处理操作
QTP有自己内建的机制,叫做DataTable, 你在这里保存测试数据,稍后在测试脚本里使用它。QTP提供它自己的集合函数,使用它们就可以从DataTable里解析数据
即使你的数据存储在外部文件里,比如Excel或者XML文件,QTP提供许多方法,使用它们你就可以从外部数据源里获取到数据
存储重用和不重用的代码
QTP也提供许多方法,你能用这些方法来存储重用和非重用的的代码。这些机制是:
- Action:Action是你保存代码最通用的方法之一。你能保存重用和不重用的代码在Actions里
- Function Library: 函数库是又一个很流行的方法,你几乎可以在所有的QTP项目里的使用它。函数库主要用来存储可重用的代码
- Business/Scripted Components: 尽管很少用,这个也是你可以存储代码的地方
总结:
- 为了写测试脚本,你需要知道你要做的一些通用任务是:
- 识别和存储对象
- 在对象上执行操作
- 在脚本里处理测试数据
- 合并所有的操作形成重用&非重用的动作
- 你也知道QTP怎么用它的一系列功能来帮助你创建测试脚本:
- Object Spy和对象库
- 内建的函数库
- DataTable和相关的方法
- Actions,函数库和组件