一种基于 QTP 的自动化测试方法及系统 【技术领域】
本发明涉及测试工具技术领域, 具体涉及一种面向 JAVASWING 基于自动化测试工 具 QTP 的可执行脚本语言的自动化测试方法及系统。背景技术
自动化测试工具 QTP(QuikcTest Profession) 是以关键字作为驱动的一款录制、 回放的自动化测试软件, 在录制过程中会产生大量的控件集合以支持录制脚本的运行。其 采用 VBScript 作为脚本语言, 并同时可调用由外部编写的 VBScript 脚本。 一般 QTP 工具应 用在相对成熟的产品中, 使用该软件进行流程测试、 回归测试以及部分程序初始化工作 ;
QTP 的录制后的脚本是可编辑的, 也可以使用描述性语言对控件进行描述, 并且 QTP 自身提供大量的 API 函数库可供调用。在现有的 QTP 程序中, 录制、 编辑后的脚本重复 使用的效率是很低下的, 并且由于被测试程序的变动也会导致脚本维护量的上升, 对于 QTP 本身软件的学习也存在一定的难度, 因此需要提炼出一种语言组合框架和方法来符合日常 测试用例编写的思维习惯, 减少对 QTP 软件本身的学习时间, 可快速进入自动化阶段, 从而 减小脚本的维护工作量。 发明内容 针对现有技术中存在的缺陷和实际应用的需要, 本发明的目的在于提供一种面向 JAVASWING 基于 QTP 的自动化测试方法及系统, 使测试人员不需要对 QTP 程序本身做出过多 了解, 以平时的设计测试用例的思维即可设计自动化测试用例。
为实现上述目的, 本发明采用的技术方案如下 :
一种基于 QTP 的自动化测试方法, 包括以下步骤 :
(1) 启动 QTP 程序, 装载预制的带有引用框架程序的 QTP 脚本包, 选择一个指定的 测试用例执行列表, 并输入需要执行的测试用例函数 ; 框架程序包括流程控制模块、 语言框 架脚本模块和测试用例文件组模块 ;
(2) 通过流程控制模块获取并打开所要执行的测试用例文件, 获取测试用例文件 的相关参数 ; 所述相关参数包括操作类型、 操作控件类型和输入数据 ;
(3) 将测试用例文件的相关参数传递给语言框架脚本模块, 由语言框架脚本模块 将测试用例文件组合成可被 QTP 程序识别的操作语句, 并反馈给 QTP 程序执行 ;
(4) 流程控制模块读取 QTP 程序执行的测试结果, 并将测试结果回写到测试用例 文件。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 步骤 (1) 中, 所述 QTP 脚本 包是为使用 QTP 程序建立的一个空脚本文件夹, 文件夹中配置了框架程序的 VBS 文件, QTP 程序通过装载指定的 VBS 文件, 运行 VBS 文件中的框架程序。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 测试用例执行列表为测试 用例文件的集合, 测试用例文件是由若干个测试用例条目组成的。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 步骤 (1) 中, 步骤 (1) 中, 所 述测试用例执行列表是由测试人员手动编辑的。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 步骤 (2) 中, 所述操作类型 包括打开、 单击、 双击、 选择、 录入、 录入表、 关闭、 和验证 ; 所述操作控件类型包括按钮、 菜 单、 树、 单选钮、 复选框、 标签、 表格、 文本框、 下拉框和超级链接 ; 所述输入数据是向文本框 内输入的指定文本或者随机文本, 在输入时能够选择树的指定节点和随机节点。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 步骤 (3) 中, 由语言框架脚 本模块将测试用例文件组合成可被 QTP 程序识别的操作语句的具体步骤为 :
i、 装载测试用例文件操作控件的面板和对话框, 语言框架脚本模块获取当前桌面 上存在的面板, 通过对话框组合出面板到达操作控件的路径 ;
ii、 通过测试用例文件的操作类型、 操作控件类型或者名称组合出 QTP 程序识别 的操作语句 ;
iii、 将面板到达操作控件的路径和组合出的 QTP 程序识别的操作语句再次组合 成为完成语句反馈给 QTP 程序。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 步骤 (4) 中, 测试结果包括 OK 和 NG 两种 ; OK 表示测试用例条目的执行结果正常, NG 表示测试用例条目的执行结果异 常。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 当测试结果为 OK 且输入内 容为随机文本时, 流程控制模块会记录随机产生的内容。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 当测试结果为 NG 时, 流程控 制模块会记录相应的测试用例条目执行结果异常的原因, 并对该测试用例条目进行截图。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 步骤 (2) 中, 测试用例文 件中的相关参数中还包括 “参数数据” , 在 “参数数据” 中设有两个预制结果参数 : “NG” 和 “PIC” , 预制结果参数 NG 表示当测试用例文件本身的测试结果为 NG 时, 流程控制模块会将 测试用例条目的测试结果自动修改为 OK ; PIC 表示无论测试用例文件的测试结果是 OK 还是 NG, 流程控制模块都会对测试用例条目进行截图。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 步骤 (4) 中, 在得到测试用 例条目的测试结果后, 若测试用例条目的 “参数数据” 中存在预制结果参数, 会将测试结果 与该测试用例条目的 “参数数据” 列中的预制结果参数进行比对, 并将对比修改后的测试结 果保存 ; 若测试用例条目的 “参数数据” 中不存在预制结果参数则直接保存测试结果。
进一步, 如上所述的一种基于 QTP 的自动化测试方法, 将测试结果与预制结果参 数对比的方法为 :
若测试结果为 NG 且预制结果参数为 NG 时, 流程控制模块会将该测试用例条目的 测试结果自动修改为 OK ;
若测试结果为 OK 且预制结果参数为 NG 时, 流程控制模块会将该测试用例条目的 测试结果自动修改为 NG ;
若预制结果参数为 PIC, 无论测试用例文件的测试结果是 OK 还是 NG, 流程控制模 块都会对测试用例条目进行截图。
再进一步, 如上所述的一种基于 QTP 的自动化测试方法, 所述截图的命名规则为“错误 _ 用例名称 _ 序列 X 号用例截图 .jpg” ; 其中, X 为测试用例文件中测试用例条目所在 序列中的序列号。
基于上述 QTP 的自动化测试方法的一种基于 QTP 的自动化测试系统, 包括 :
启动模块 : 用于启动 QTP 程序, 装载预制的带有引用框架程序的 QTP 脚本包, 并选 择指定的测试用例执行列表 ; 框架程序包括流程控制模块、 语言框架脚本模块和测试用例 文件组模块 ;
流程控制模块 : 用于获取并打开需要 QTP 程序执行的测试用例文件, 获取 QTP 程序 的测试结果并将测试结果回写到测试用例文件 ;
语言框架脚本模块 : 用于将测试用例文件组合成可被 QTP 程序识别的操作语句, 并反馈给 QTP 程序 ;
公共函数库模块 : 用于生成测试用例文件在测试过程中所需要的输入数据。
测试用例文件组模块 : 用于保存测试人员编辑的测试用例文件。
进一步, 如上所述的一种基于 QTP 的自动化测试系统, 所述启动模块包括一个可 执行程序脚本即所述的 QTP 脚本包, QTP 脚本包是为使用 QTP 程序建立的一个空脚本文件 夹, 文件夹中配置了框架程序的 VBS 文件, QTP 程序通过装载指定的 VBS 文件, 运行 VBS 文 件中的框架程序。 。 再进一步, 如上所述的一种基于 QTP 的自动化测试系统, 通过语言框架脚本模块 将测试用例文件组合成可别 QTP 程序识别的操作语句的具体步骤为 :
①、 装载测试用例文件操作控件的面板和对话框, 语言框架脚本模块获取当前桌 面上存在的面板, 通过对话框组合出面板到达操作控件的路径 ;
②、 通过测试用例文件的操作类型、 操作控件类型或者名称组合出 QTP 程序识别 的操作语句 ;
③、 将面板到达操作控件的路径和组合出的 QTP 程序识别的操作语句再次组合成 为完成语句反馈给 QTP 程序。
本发明的效果在于 : 本发明所述的方法及系统符合日常测试用例编写的习惯, 能 够使测试人员不需要对 QTP 本身做出过多了解, 只要以平时的设计测试用例的思维即可设 计自动化测试用例, 大大减小了脚本的维护工作量, 解决脚本维护成本高的问题。
附图说明
图 1 为本发明一种基于 QTP 的自动化测试系统的结构图 ; 图 2 为本发明一种基于 QTP 的自动化测试方法的流程图 ; 图 3 为具体实施方式中测试用例文件的示意图 ; 图 4 为具体实施方式中测试用例文件的测试结果示意图。具体实施方式
下面结合说明书附图与具体实施方式对本发明做进一步的详细说明。
图 1 示出了本发明一种基于 QTP 的自动化测试系统的结构图, 该测试系统主要包 括:
启动模块 11 : 用于启动 QTP 程序, 装载预制的带有引用框架程序的 QTP 脚本包, 并选择指定的测试用例执行列表 ; 框架程序包括流程控制模块、 语言框架脚本模块和测试用 例文件组模块 ;
所述 QTP 脚本包是为使用 QTP 程序建立的一个空脚本文件夹, 文件夹中配置了框 架程序的 VBS 文件, QTP 程序通过装载指定的 VBS 文件, 运行 VBS 文件中的框架程序。
流程控制模块 12 : 用于获取并打开需要 QTP 程序执行的测试用例文件, 获取 QTP 程序的测试结果并将测试结果回写到测试用例文件 ;
语言框架脚本模块 13 : 用于将测试用例文件组合成可被 QTP 程序识别的操作语 句, 并反馈给 QTP 程序 ;
公共函数库模块 14 : 用于生成测试用例文件中所要求的一些数据。
测试用例文件组模块 15 : 用于保存测试人员编辑的测试用例文件。
该自动化测试系统的工作流程图为 : 首先, 启动模块 11 启动 QTP 程序, 装载预制的 带有引用框架程序的 QTP 脚本包, 并选择测试用例文件组中指定的测试用例执行列表, 将 需要执行的测试用例函数输入到 QTP 程序中, 然后调用流程控制模块 12, 流程控制模块 12 获取并打开所要执行的测试用例文件, 通过语言框架脚本模块 13 将测试用例文件组合出 可被 QTP 识别的操作语言, 并将组合后的测试用例文件通过流程控制模块 12 反馈给 QTP 程 序执行, 在执行完毕后, 流程控制模块 12 会读取执行结果, 并与预制参数结果进行比对将 测试结果回写到测试用例文件的结果列, 并对结果异常的测试用例条目截图。在测试的过 程中, 所需要的输入数据和其他一些数据都是由公共函数库模块 14 提供的, 例如随机文本 ( 包括字符、 数字、 汉字等 )、 创建截图、 在截图上打印文字等功能。 图 2 是出了基于图 1 中基于 QTP 的自动化测试系统的一种基于 QTP 的自动化测试 方法的流程图, 该方法主要包括以下步骤 :
步骤 S11 : 启动 QTP 程序, 选择测试用例执行列表 ;
通过启动模块 11, 启动 QTP 程序, 装载预制的带有引用框架程序的 QTP 脚本包, 选 择一个指定的测试用例执行列表, 并输入需要执行的测试用例函数。 其中, 框架程序包括流 程控制模块、 语言框架脚本模块和测试用例文件组模块 ; QTP 脚本包是为使用 QTP 程序建立 的一个空脚本文件夹, 文件夹中配置了框架程序的 VBS 文件, QTP 程序通过装载指定的 VBS 文件, 运行 VBS 文件中的框架程序。测试用例文件保存在测试用例执行列表中, 测试用例文 件是由若干个测试用例条目组成的。测试用例执行列表保存在测试用例文件组模块中。测 试用例执行列表是一个可编辑的文本文件 ( 如一个 .txt 文件 ), 通过选着指定的测试用例 列表, 就可以确定所需要执行的具体的测试用例文件的路径, 即通过获取指定的测试用例 执行列表的内容得到具体需要执行的测试用例文件的路径 ( 如得到具体执行哪个 excel 文 件的哪个页签的路径 ), 在测试用例执行列表文件中需要执行的部分与不需要执行的部分 可以通过设定的标识区分, 如在列表文件中不需要执行的部分的可以在行前端设置 “__” 标 识来识别。在启动 QTP 程序后, 输入需要执行的测试用例函数。其中, 测试用例执行列表中 的测试用例文件是由测试人员按常规的测试用例设计逻辑手动编辑的。例如 :
用户名输入 : 张三 ; 密码框输入 : 12345, 单击” 登录” 按钮, 预期结果为 : 出现提示 面板, 输入密码错误, 当编辑自动化测试用例时, 一般可以这样书写 :
步骤 S12 : 获取测试用例文件的相关参数 ;
在步骤 S11 选择好指定的测试用例执行列表中的测试用例文件后, 通过流程控制 模块 12 获取测试用例文件并打开, 获取测试用例文件的相关参数包括所要执行的测试用 例文件的操作类型、 操作控件类型和输入数据等内容。
本实施方式中以 excel 文件格式的测试用例文件为例进行说明, 当测试用例文件 为 excel 文件时, 如图 3 所示, 其中的操作类型就包括了打开、 单击、 双击、 选择、 录入、 录入 表、 关闭、 和验证等操作 ; 操作控件类型包括按钮、 菜单、 树、 单选钮、 复选框、 标签、 表格、 文 本框、 下拉框和超级链接等 ; 输入数据是向文本框内输入的指定文本或者随机文本, 包括随 机字符、 汉字、 数字、 excel 的行列格式转换、 数据库的连接等, 在输入时能够选择树的指定 节点和随机节点。在使用随机产生的字符的情况下, 对于 excel 文件, 可以直接使用 excel 所提供的公式, 例如 : = G23, 来直接获取 G23 单元格中的内容, 在需要与其他文字共同组合 成输入数据, 可以描述为 : 例如 : 单位地址= Cell(F24) 来表明获取单元格 F24 中的内容作 为输入数据。
步骤 S13 : 将测试用例文件组合成可被 QTP 程序识别的操作语句, 并反馈给 QTP 程 序执行 ;
将步骤 S12 中获取的测试用例文件的相关参数传递给语言框架脚本模块 13, 由语 言框架脚本模块 13 将测试用例文件组合成可被 QTP 程序识别的操作语句即形成 QTP 能够 识别的标准语言, 并反馈给 QTP 程序执行。其中, 通过语言框架脚本模块将测试用例文件组 合成可别 QTP 程序识别的操作语句的具体步骤为 :
①、 装载测试用例文件操作控件的面板和对话框, 语言框架脚本模块获取当前桌 面上存在的面板, 通过对话框组合出面板到达操作控件的路径 ;
②、 通过测试用例文件的操作类型、 操作控件类型或者名称组合出 QTP 程序识别 的操作语句 ;
③、 将面板到达操作控件的路径和组合出的 QTP 程序识别的操作语句再次组合成 为完成语句反馈给 QTP 程序。
例如 : QTP 程序通过录制形成的本身认可的执行语句为 : JavaWindow(“支付系 统” ).JavaDialog(“登录” ).JavaEdit(“用户名” ).set“999800002” , 而由语言框架脚 本框架使用描述性语言会通过判断当前界面的面板情况 (JavaWindow 和 JavaDialog 的情 况, 当界面存在多余的面板时和对话框, 程序会提示关闭多余面板, 再继续执行 ), 以及通 过读取测试用例获取需要执行的具体控件来组合成控件执行语句, 最后通过描述性语言
构造的结果为 : JavaWindow(“to_class: = JavaWindow” ).JavaDialog(“to_calss: = JavaDialog” ).JavaEdit(“attached text: =用户名” ).set“999888002” 这样即可形成 QTP 可识别执行语句。
步骤 S14 : 读取并保存 QTP 程序的测试结果。
在步骤 S13 中 QTP 程序执行完毕后, 流程控制模块 12 读取 QTP 程序的执行结果, 并 将读取的执行结果与预期结果比对, 将比对后的测试结果回写到测试用例文件。 其中, 测试 结果包括 OK( 测试用例条目的执行结果正常 ) 和 NG( 表示测试用例条目的执行结果异常 ) 两种。
当测试结果为 OK 且输入内容为随机内容时, 流程控制模块 12 会记录随机产生的 内容。随机产生的内容可记录在测试用例文件的备注列中, , 保存在 “备注” 的内容可以作 为下一步测试的输入数据 ; 例如在图 4 中, 序列号为 8 输入数据位 Random 的测试条目, 其测 试过程中随机产生的内容, 即 “备注” 项中的数据可以作为下一次测试的输入数据。
当测试结果为 NG 时, 流程控制模块 12 会记录相应的测试用例条目执行结果异常 的原因, 并对该测试用例条目进行截图。截图的命名规则为 “错误 _ 用例名称 _ 序列 X 号用 例截图 .jpg” ; 其中, X 为测试用例文件中测试用例条目所在序列中的序列号。
此外, 在测试用例文件的相关参数中还包括 “参数数据” , 在 “参数数据” 中设有两 个预制结果参数 : “NG” 和 “PIC” , 预制结果参数 NG 表示当测试用例文件本身的测试结果为 NG 时, 流程控制模块会将测试用例条目的测试结果自动修改为 OK ; PIC 表示无论测试用例 文件的测试结果是 OK 还是 NG, 流程控制模块都会对测试用例条目进行截图。 在 QTP 程序执 行完毕得到测试用例条目的测试结果后, 若测试用例条目的 “参数数据” 中存在预制结果参 数, 会将测试结果与该测试用例条目的 “参数数据” 列中的预制结果参数进行比对, 并将对 比修改后的测试结果保存 ; 若测试用例条目的 “参数数据” 中不存在预制结果参数则直接保 存测试结果。将测试结果与预制结果参数对比的方法为 :
若测试结果为 NG 且预制结果参数为 NG 时, 流程控制模块会将该测试用例条目的 测试结果自动修改为 OK ; 例如, 在需要测试某一数据是否删除成功时, 会通过程序查找该 数据是否存在, 若删除成功了, 该数据的查找失败就会显示测试结果为 NG, 而删除成功正是 所需要的结果, 所以通过在预制参数结果中设置 NG 这一结果, 将测试结果自动修改为 NG, 达到所需要的结果。
若测试结果为 OK 且预制结果参数为 NG 时, 流程控制模块会将该测试用例条目的 测试结果自动修改为 NG ;
若预制结果参数为 PIC, 无论测试用例文件的测试结果是 OK 还是 NG, 流程控制模 块都会对测试用例条目进行截图。
当测试用例条目的 “参数数据” 中不存在预制结果参数, 可以通过在测试用例条目 中设置标志性的数据来查看测试结果是否正确, 例如在查看数据是否录入成功时, 可以使 用查看表格中是否存在设置的标志性的数据来验证, 如查看数据条数的变化, 若发生变化 说明数据录入成功。
在 测 试 用 例 执 行 列 表 中 的 全 部 测 试 用 例 文 件 执 行 完 毕 后, 保存并关闭文件 (excel), 以保存测试结果, 如图 4 中所示, 对于序号 1 中操作类型为单击 Active, 操作控件 类型为菜单 JavaMenu, 输入数据为系统功能的指定文本的 excel 文件的测试用例条目, 其测试结果为 OK, 表示单击的动作确实发生了 ; 对于序号 6 中操作类型为验证 JVerify 的测 试用例条目, 该测试用例条目的条目中设置了输入数据 “请选择您要修改的数据! ” 在进行 该条目的测试时, 就会在面板上应该出现 “请选择您要修改的数据! ” 的提示, 在得到该测 试条目的实际反馈结果后会将该实际的测试结果与测试用例中的输入数据进行比对, 差一 个字或者一个空格, 测试结果都会显示为 NG, 并同时反馈给测试用例条目进行结果记录, 可 以通过该方法来验证文字类测试结果是否正确。
本发明是为解决繁重的脚本维护和 QTP 软件学习成本而产生的, 但是本发明也需 要了解具体的测试用例编写规范, 对于公司目前而言看, 可以解决部分产品回归、 流程测试 的问题, 该方法目前仅限在 JAVASWING 开发的程序上使用。
显然, 本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精 神和范围。这样, 倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围 之内, 则本发明也意图包含这些改动和变型在内。