• QTP自动化测试框架的基础知识


    1. 什么是自动化测试框架?

    假定你有一个活,需要构建许多自动化测试用例来测试这个应用程序。当你对这个应用程序完成自动化测试后,你对自己创建脚本应该有什么期望吗?你难道不想要-

    • 脚本应该按照预期的来执行而且没有发生任何问题
    • 脚本和流程应该会被很容易的理解
    • 脚本是容易维护的

    所有以上观点需要一个合适的自动化测试框架才能被实现

    一个自动化测试框架是一个规范或者是约束,你需要让测试脚本遵从一些规则来完成上面提到的3点内容,这些规则或者纲要如下,比如

    • 指定一些目录结构用来存储对应的测试用例,函数库,对象库和数据表格
    • 决定数据表格格式,比如数据表个应该怎么组织,脚本是怎么访问这些数据表格的
    • 遵循正确的代码标准,并且要在代码里有备注,以便别人能看懂你的代码
    • 尽可能把一些能复用的代码封装成为函数,以便在发生变化的时候只需要修改很少的一部分

    在创建测试脚本的时候始终遵循你设置的准则,这样可以创建一个包含所有你曾经有针对性的功能的自动化测试框架

    框架的类型分别如下:

    2. 在QTP使用的不同类型的框架

     

     

    3. QTP里的线性框架

    线性框架是你一步一步在测试流程里写测试脚本。在这样的框架类型中,你不需要创建任何函数,所有的测试步骤都是从上到下线性的顺序来写。假如你有一个测试用例,它是按照 Login->Create->Order->Logout的流程来走,那么测试脚本就会按照如下图所写一样:

    3.1 在线性框架里的组件和工作流

    以下图形展示了关于QTP线性框架的组件和典型的工作流

     

    在这里每个测试用例都有它自己的对象库并且脚本里的数据都是hardcode

     

    3.2 线性框架的优势:

    • 不需要自动化的专业知识,你只需要录制和回放的方法就能用来创建脚本
    • 快速和容易的方式来创建测试脚本
    • 由于脚本是按照从上到下的顺序来写的,所以框架流程理解起来比较容易

    3.3 线性框架的缺点:

    • 重用代码的唯一方式是不断的复制和粘贴,从而导致大量冗余的代码
    • 由于脚本里数据都是hardcode,同一个测试用例不能被不同的测试数据所驱动
    • 由于代码在许多地方都是重复的,所以一旦有地方发生变化就需要修改很多地方

    4. 关于QTP的模块框架

    模块框架就是把所有的测试用例首先要分析下找出可以复用的流程的一个方法。然后把所有可以复用的流程放进函数里封装起来存储在外部文件中,当需要的时候可以在脚本里调用这些函数。考虑以下2个测试用例。

    a)Login>Create Order>Logout.

    b)Login>Search Order>Logout.

    在这里登录和登出是可以复用的流程。那么这些流程就被封装起来保存在外部函数库里。测试脚本应该看起来像这样

     

    4.1 模块框架的组件和工作流

     

    为了可以使用外部库文件里的函数,库文件首先需要和测试用例关联起来。这样测试用例就可以调用库文件里的函数了

     

    4.2 模块框架的优点:

    • 由于复用的函数只需要创建一次,测试脚本就只需要调用所需要的函数,而不需要重新再写一遍函数里的内容,那么创建起来就快一点
    • 由于代码的复用,创建测试用例所花的功夫也会缩短
    • 如果复用的函数里发生任何改变,只需要改变一个地方就会影响到调用它的所有测试用例,因此维护起来也会很容易

     

    4.3 模块框架的缺点:

    • 由于脚本里的数据还是hardcode,所以还是不能实现不同的测试数据运行同一个脚本
    • 需要花费额外的时间来分析测试用例识别出那些是可以复用的
    • 创建和维护函数库需要好的编程知识

     

    5. QTP的数据驱动框架

    在数据驱动框架里,测试脚本里的数据不在是hard-code。相反,数据是被存储在一些外部文件里。测试脚本需要首先连接到外部数据源,然后从数据源里解析这些数据。大部分时间,我们一般都会使用Excel表格用来存储数据。其它的经常使用的外部数据源是:文本文件,XML文件,数据库以及一个外部文件以上的组合

     

    5.1 数据驱动框架的组件和流程

     

    5.2 数据驱动框架的优点:

    • 由于数据与测试脚本是分离的,可以实现同一个脚本用不同的数据可以运行多次
    • 测试数据的更改不会影响到测试脚本,反之亦然

     

    5.3 数据驱动框架的缺点:

    • 连接到数据源并读取里面的数据是需要额外的努力和相关专业的知识
    • 需要用额外的时间来选择使用那种外部数据源,并且要决定外部数据源里的数据应该怎么被存储或是组织

     

     6. QTP的关键字驱动框架

    在关键字驱动框架里,你可以创建一些关键字以及相关联的一些方法和函数。然后你创建一个函数库,它里面包含一个读取关键字的逻辑,然后调用相关的动作。

    关键字驱动框架有许多不同的形式,其中一个解释如下:

    6.1 关键字驱动框架的组件

    • 数据表格或者Excel表格包含了关键字和需要执行特定流程或者动作的步骤

    • 一个函数库里包含一些函数,这些函数可以读取Excel里每行数据,然后把他转换为QTP可以识别的格式(也就是QTP脚本),然后最终执行它。比如,函数库读取Excel里的第一行数据,然后把他转化为----Browser(“Title”).Page(“Title”).WebEdit(“UserName”).Set “user1”
    • 对象库在这个框架里不是必须的,如果你不想用对象库的话,可以用描述性编程

    6.2 关键字驱动框架的工作流

    6.3 关键字驱动框架的优点:

    • 关键字和函数库变成完全通用的,因此对于不同的应用可以很容易的被重用
    • 所有复杂的逻辑都添加到函数库里了。一旦库文件被准备好,在Excel表格里写测试脚本将变得很容易

     

    6.4 关键字框架的缺点:

    • 需要花很多时间在初始化创建函数库上,关键字驱动框架的优势只有在它被长时间使用的时候才能被充分体现出来
    • 创建复杂的关键字函数库需要很强的编程技术
    • 对于新人想快速理解框架是有点困难

     

    7. QTP的混合框架

    混合框架的意思是上面提到的一些框架的组合,基于需求,你可以合并以上框架的任何功能来组合成你需要的混合框架的版

    有许多不同的方式来创建混合框架。让我们一起看看混合框架中其中一种的结构和工作流程

     

    7.1 关键字驱动框架的组件

    • 驱动脚本:它是一个VBS脚本文件,他是运行测试脚本的入口点
    • 批处理表格:批处理表格包含了有已经自动化的所有测试用例列表,并且还包含一个叫做Execute的列名,它的值是"Yes"和"No".驱动脚本会读取这个表格,然后执行被标记为"Yes"的测试用例

    • 每个测试用例是被分割成不同的业务流程。因此当这个用例包含的业务流程都被执行时候,这个用例才算被完全的执行

    • 上面所说的是构成混合框架的主要组件,像函数库,数据表,对象库,配置文件等其它一般的组件也是混合框架的一部分

     

    7.2 混合框架的工作流

     

    7.3 混合框架的优点:

    • 这个框架最大优点就是你可以用到其他框架最好的功能

    7.4 混合框架的缺点:

    • 该框架是非常复杂的,需要具备很好的编程知识和经验来从头到尾的构建混合框架

     

    8. QTP的业务流程测试(BPT)框架

    把测试用例分成多个流程,每个流程都用业务流程组件(Business process component)来脚本化的一个框架。当一个具体的测试用例所包含的组件都已经准备好以后,你可以在QC里按照你们的业务逻辑来连接这些组件从而组成一个BPT的测试用例,然后就可以执行它

    8.1 BPT框架的组件:

    • 应用程序区域:它作为一个容器用来存储业务流程组件和其他相关的项,比如函数库,对象库等等。
    • 业务流程组件:就像Action和函数是用来存储可以复用的脚本一样,BPT框架有业务流程组件,该组件包含了一个动作所对应的脚本
    • 以上提到的2个组件在BPT框架里是非常有用的,而其它就是一些标准的组件,比如函数库,对象库,数据表等等。这些所有组件组成了BPT框架

     

    8.2 BPT框架的工作流

     

    8.3 BPT框架的优点:

    • BPT可以让非技术业务专家可以使用业务组件快速创建测试用例
    • 许多功能,比如组件链接&数据参数化,这些都是来自BPT内置的功能。有了这些功能,你不需要花费额外的时间来写实现这些功能的代码

     

    8.4 BPT框架的缺点

    • BPT框架只能在QC里使用
    • 如果你想为了你的测试脚本用BPT框架,需要为该框架支付额外的费用
  • 相关阅读:
    发布时间 sql语句
    Excel中 查找重复数据
    身份证正则表达式
    (转)C#中的委托与事件
    C#中的ForEach
    Ajax请求中,contentType和dataType的区别
    让IIS支持PUT和Delete请求的方法
    Vue.js事件修饰符
    JS阻止默认行为
    关于bindinglist的一点小问题
  • 原文地址:https://www.cnblogs.com/testermark/p/3517824.html
Copyright © 2020-2023  润新知