




已阅读5页,还剩55页未读, 继续免费阅读
(计算机应用技术专业论文)软件自动化测试脚本生成技术研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京邮电大学 硕士学位论文摘要 学科、专业:工学计算机应用技术 作者:丛咀级研究生钱月琴 题目:软件自动化测试脚本生成技术研究 英文题目:r e s e a r c ho ns c r i p tg e n e r a t i o nt e c h n o l o g yi ns o f t w a r e a u t o m a t i o nt e s t 主题词:脚本生成自动化测试数据驱动技术 关键字驱动技术 k e y w o r d s :s c r i p tg e n e r a t i o n a u t o m a t i o nt e s t d a t a - d r i v e nt e c h n o l o g y k e y w o r d - d r i v e nt e c h n o l o g y 南京邮电大学硕士研究生学位论文 摘要 摘要 随着软件规模的逐渐增大,对软件测试的要求也越来越高,手工测试已经不能满足 测试需求,自动化测试技术逐渐地应用到各种类型应用程序的测试中。测试脚本是自动 化测试中的关键要素,而手工编写脚本工作量大且需要测试人员具有专业的编程知识。 目前自动化测试工具录制的脚本大都是线性脚本,不能对其进行复用,且脚本中包括了 大量测试数据和被测对象信息,如果被测程序进行了修改,需要重新录制脚本,对脚本 维护的工作量非常大。 针对上述问题,本文主要对采用白盒测试为主的单元测试和采用黑盒测试为主的 g u i 功能测试的脚本生成技术进行研究。将数据驱动脚本技术应用到单元测试中,提出 了一种自动生成单元测试数据驱动脚本的方法,并使用该方法实现了单元测试数据驱动 脚本生成系统。在g u i 功能测试中采用s a f s ( 软件自动化框架支持,s o t 乇w a r e a u t o m a t i o n f r a m e w o r ks u p p o r t ) 框架实现关键字驱动脚本技术。基于e t o m ( 增强的电信运营图, e n h a n c e dt e l e c o mo p e r a t i o n sm a p ) 业务过程分解的思想,对关键字驱动脚本中的关键 字划分提出了一种新的划分模型,并根据该模型提出了脚本划分模型,提高了脚本复用 性的同时降低了脚本维护工作量。在s a f s 基础上提出了一种生成关键字驱动脚本的方 法,并使用该方法实现了功能测试关键字驱动脚本自动生成系统。 通过应用实例分析,本文所实现的单元测试和功能测试脚本自动生成系统,能有效 快速地生成项目所需的脚本,缩短了测试时间;且系统采用的数据驱动和关键字驱动脚 本技术,在很大程度上减少了脚本维护的工作量。 关键字:脚本生成,自动化测试,数据驱动技术,关键字驱动技术 南京邮电大学硕士研究生学位论文 目录 目录 摘要,i a b s t r a c t i i 第l 章绪论:l 1 1 选题的背景和意义l 1 2 研究课题来源2 1 3 相关研究3 1 4 本文所做的工作5 1 5 本文的组织结构5 第2 章自动化测试及脚本技术6 2 1 自动化测试概述6 2 2 测试脚本及其生成技术概述6 2 3 测试脚本技术7 2 3 1 线性脚本技术7 2 3 2 共享脚本技术8 2 3 3 结构化脚本技术8 2 3 4 数据驱动脚本技术8 2 3 5 关键字驱动脚本技术9 2 4 脚本技术的评价9 2 5 本章小结1 0 第3 章基于数据驱动的单元测试脚本生成技术11 3 1 数据驱动脚本技术运行原理1 l 3 2 单元测试中应用数据驱动脚本技术基础1 l 3 2 1 测试用例文件。1 2 3 2 2 解析测试用例文件1 2 3 2 3j u n i t 测试脚本规范1 3 3 3 单元测试数据驱动脚本生成系统的设计1 4 3 4 单元测试数据驱动脚本生成系统的实现一1 5 3 4 1 测试用例文件的实现1 5 3 4 2 解析测试用例模块的实现1 6 3 4 3 制定测试脚本模板1 7 3 4 4 数据驱动脚本生成模块的实现一1 9 3 5 单元测试数据驱动脚本生成系统的应用2 l 3 6 单元测试数据驱动脚本生成系统的优缺点分析2 3 3 7 本章小结2 3 第4 章基于关键字驱动的功能测试脚本生成技术2 4 4 1s a f s 框架研究一2 4 4 1 1 关键字驱动脚本技术在s a f s 中的研究一2 4 4 1 2 对s a f s 框架的改进一2 6 4 2 关键字划分模型及脚本划分模型2 7 4 2 1 关键字划分模型的理论基础2 8 4 2 2 关键字划分模型:2 8 4 2 3 基于关键字划分模型的脚本划分模型3 0 4 3 关键字驱动脚本生成系统的设计31 4 3 1 关键字驱动脚本生成系统的总体设计3 2 i i i 南京邮电大学硕士研究生学位论文 目录 4 3 2 关键字驱动脚本生成系统的详细没计3 3 4 4 关键字驱动脚本生成系统的实现3 4 4 4 1 解卡斤测试套件模块的实现。3 4 4 4 2 生成高层脚本模块的实现3 6 4 4 3 生成中层脚本模块的实现3 8 4 4 4 编写低层脚本4 l 4 4 5 生成启动脚本模块的实现4 l 4 5 功能测试关键字驱动脚本生成系统的应用4 3 4 5 1 被测对象描述4 3 4 5 2 系统运行结果4 4 4 6 关键字驱动脚本生成系统的优缺点分析4 6 4 7 本章小结:一4 7 第5 章总结与展望4 8 5 1 本文总结4 8 5 2 未来展望一4 8 参考文献4 9 致谢5 2 发表论文5 3 附勇毛5 4 i v 南京邮电大学硕士研究生学位论文 第1 章绪论 第1 章绪论 1 1 选题的背景和意义 在过去的半个世纪,软件获得了空前的发展,逐渐渗透到各个领域,从最早的科学 计算、文字处理、数据库管理、银行业务处理,到工业自动控制和生产、办公自动化、 新闻媒体、通信、汽车、消费电子、娱乐等,软件无处不在,改变了人类的生活与生产 方式。随着计算机软件在各行各业的普及应用,软件的专业化和多样化特点越来越显著, 人们对软件质量的要求也越来越高。但同时,我们也看到软件产业目前还不够成熟,软 件质量的现状还不容乐观,软件在运行和使用过程中出现的问题还比较多【i 】。 作为软件工程重要组成部分的软件测试是保证软件质量的有力手段。软件测试对于 软件质量的重要意义,不仅仅在于发现软件系统存在的错误,更体现在经过各种测试技 术和方法对软件产品进行测试后,可以提高人们对软件产品质量的信心。 软件测试不是一项简单的工作,它远比人们所直观想象的要复杂。高效、高质量地 完成一个软件系统的测试,涉及的因素很多,且要找到有效的测试策略。大量统计资料 表明,软件测试阶段投入的成本和工作量往往要占软件开发总成本和总工作量的4 0 到5 0 甚至更多,而其所耗费的测试工作时间往往要超过软件开发整个周期的5 0 e 引, 由此可见软件测试工作的繁重。随着软件应用范围的扩大,软件复杂度的提高以及软件 设计技术的不断发展,又大大增加了软件测试的复杂性。所以,相对来说,传统的软件 测试技术不仅要耗费大量的人力、物力和财力资源,且其已无法满足大型的、复杂的软 件测试需要。因此对软件测试技术和方法的研究越来越受到业界的重视。 自动化测试技术的研究以及相应的自动测试工具的开发已经明显地提高了测试的 效率,减少了繁琐的重复劳动,保证了测试的可重复性。目前普遍使用的主流自动化测 试工具大多覆盖了软件测试生命周期的各个阶段。从单元测试到功能测试和性能测试, 都有自动化测试工具的支持。在自动化测试带来诸多优点的同时,对软件测试人员和执 行自动化测试工具的环境也有了更高的要求,也可能会对测试的进展起反作用【3 】。 著名的软件测试专家b o r i sb e i z e r 博士认为:“软件开发历史上最臭名昭著的错误都 是单元错误即通过适当的单元测试可以发现的错误。”他引证了v o y a g e r 的错误( 将 探测器发送到太阳) 、a t & t ( a m e r i c a nt e l e p h o n e t e l e g r a p h ) 和d c s ( 集散控制系统, d i s t r i b u t e dc o n t r o ls y s t e m ) 的错误( 曾造成美国三分之一的电话瘫痪) 以及i n t e l 奔腾 芯片的错误,都能够通过全面的单元测试排除掉【4 j 。而在单元测试的自动化方面,虽然 自动化测试工具都有定程度的自动化,但是,在产生测试脚本方面都采用了类似的方 l 堕室坚皇奎兰堡主婴壅生兰垡笙壅笙! 雯堕堡 式,需要手工指定被测产品、被测方法,在产生的脚本框架下手工编辑测试脚本,并对 脚本进行调试。在实际使用这些工具的时候就会发现它有以下弱点:缺乏自动产生脚本 的机制;不能独立地完成整个测试过程;测试数据硬编码在脚本中【引。 软件产品必须具备一定的功能,借助这些功能为用户提供服务,尤其是g u i 的出 现给软件使用者带来了极大的方便。但与此同时,也给软件测试人员带来了全新的挑战。 g u i 功能测试采用的方法以黑盒测试为主,而黑盒测试很大一部分工作集中在用户界面 上,不需要深入研究软件内在的结构,而是“表面化”地使用软件,从输入输出的信息 中寻找可能的错误和纰漏【5 】。目前有很多针对g u i 功能测试的自动化测试工具,但这些 工具都有一个通病,那就是录制的脚本是线性脚本。有的自动化测试工具支持数据驱动 脚本,但是需要手工修改录制的线性脚本使其成为数据驱动脚本。随着g u i 的大规模 应用,采用自动化测试工具取代原有的手工测试面临着很多全新问题和挑战:只有当被 测程序运行稳定时,才能够采用自动化测试工具对其进行功能测试:如果对被测对象进 行了修改,所有涉及该被测对象部分的脚本都需修改,对回归测试来说,脚本的自愈性 太差:而且由于录制脚本很简单,测试人员对每个测试用例可能都录制很多脚本,导致 对脚本维护相当困难;测试工具对测试结果验证的支持非常有限,往往需要测试人员在 录制完脚本之后,手工地加入测试结果验证,导致测试效率低下,而且也很容易产生很 多人为的错误;以上的这些缺陷已经使自动化测试陷入了一种尴尬境地【6 j 。 为了弥补自动化测试工具的这些不足,本文在充分研究脚本生成技术的基础上,针 对以白盒测试为主的单元测试设计并实现了自动生成数据驱动脚本的方案。数据不需硬 编码在脚本中,大大提高了脚本的复用性;整个单元测试过程也仅需很少的人机交互, 节省了大量地人力、物力和财力。在对g u i 功能测试认真学习研究的基础上,并结合 相应的测试工具分析g u i 测试的现状,决定对g u i 功能测试采用关键字驱动脚本技术。 采用关键字驱动脚本之后,如果对g u i 界面上的元素进行了更改,脚本并不需要进行 修改:针对被测系统的各个业务逻辑都有相应的脚本支持,在需要多次用到该业务逻辑 的地方,可以调用相同的脚本,脚本的复用性大大得到了提高;将测试数据保存在数据 文档中,加强了对测试数据的维护,也减少了脚本的维护工作量。本文对g u i 功能测 试的最大贡献是能够自动生成关键字驱动脚本,很大程度上减少了回归测试过程中测试 人员的工作量,最终达到高效进行软件测试、降低测试成本、提高软件产品质量的目的。 1 2 研究课题来源 本文研究课题得到国家科技支撑计划项目( 项目编号:2 0 0 7 b a h l 7 8 0 0 ) 的支持。 南京邮电大学硕士研究生学位论文第l 章绪论 该项目针对目前电信运营支撑系统测试与管理方面存在的问题,提出开发针对电信业务 软件测试与服务的平台,以实现对电信业务调测一体化。 完成该项目的主要工作有:对测试过程中用到的信息进行建模,以及对n g o s s ( 新 一代运营软件和系统,n e wg e n e r a t i o no p e r a t i o n ss o f t w a r ea n ds y s t e m s ) 软件的评测过 程进行管理。根据需求文档以及活动图模型自动生成测试用例。根据生成的测试用例和 所采用的测试工具,自动生成可执行的测试脚本。在生成测试脚本之后,对脚本解释执 行,由于测试电信业务所需的脚本相当多,所以需要对脚本采用分布式执行,即将脚本 分发到各个执行终端执行。执行脚本的最终目的是要得到脚本的执行结果,对这些测试 结果进行采集、分析,决定该模块是否还要进行回归测试。 本文的研究课题主要是根据测试用例和所采用的测试工具自动生成可执行的测试 脚本,在项目整个的开发过程中起到了承上启下的作用。测试用例是描述性文件,而且 是与测试工具和平台无关的,它不必关心测试执行人员怎样执行它;但是站在测试执行 人员的角度,所需要的测试用例必须是可直接运行的;本文的研究课题正好解决了这一 衔接问题,将描述性的测试用例文件转换为可执行的脚本文件并交给测试执行人员执 行,测试人员在脚本执行之后,可以采集执行的结果并对结果做出分析。 1 3 相关研究 从最初的非脚本测试到现在的自动化测试工具,可以看出人们为逐步实现自动化测 试所做的努力【7 j 。非脚本测试没有周密的计划或测试列表,测试者边测试边想测试的内 容,不采用测试脚本。然后经过一段时间发展,出现了模糊手工脚本,该类型脚本含有 对测试用例的描述,但不对输入和比较进行详细说明。在使用了相当长一段时间的模糊 脚本之后,人们发现详细的脚本更能提高测试效率,该类型脚本包含准确的测试输入数 据及相应的测试输出结果。所有测试人员必须严格按脚本执行,这种方式与测试工具最 接近,理论上讲是自动化的开端。将详细手工测试脚本自动化,使自动化测试人员将精 力放在测试用例的设计上,而不是将精力集中在如何执行测试上,这就催化了自动化测 试 3 1 。在意识到软件测试重要性之后,越来越多的专家学者和测试工具的生产厂商都致 力于脚本技术的研究【3 j 。 在人们研究脚本技术的同时,发现如果能自动生成脚本将极大地降低手工工作量 川,于是出现了多种可以自动生成脚本的自动化测试工具,包括商业和开源的。自动化 测试工具也由早期的静态录n 回放工具( 不附带脚本语言) 发展到静态录n 回放工具 ( 具有脚本语言) ,可以用脚本语言处理条件、异常和软件日益增长的复杂性。现在已 南京邮电大学硕士研究生学位论文第1 章绪论 经发展到可变的录制回放工具,该工具引入了附加的可变测试数据,该功能点是与录 制回放特性协同使用的【9 】【1 0 1 。 对于单元测试的脚本自动生成技术的研究,目前主要是测试工具利用面向对象软件 的逆向工程技术生成测试脚本,该方法手工选择被测程序源代码中需要测试的方法,然 后由逆向工程技术生成一个或多个脚本,得到的脚本是线性脚本。 对于功能测试自动生成脚本技术的研究,目前主要是对捕获回放技术的研究,由 早期录制的线性脚本发展到现在的数据驱动脚本。捕获回放技术分为两个阶段:捕获 和回放阶段。在捕获阶段,测试人员手工操作一遍测试用例,测试工具记录用户的一系 列操作,并将这一系列操作转化为脚本。在回放阶段,将这些脚本作为输入,回放用户 的操作,将程序的状态信息和输出结果与原始记录进行比较,并向用户返回测试报告。 这种方法使测试人员从再三重复运行的测试中解放出来。但是,若对产品进行了修改, 捕获的脚本在回放时会出现问题,此时需要手工修改脚本或者重新录制脚本【“】。 除了自动化测试工具的逆向工程和捕获回放技术生成脚本之外,也有很多的专家 学者致力于脚本自动生成技术的研究。 。 文献 1 2 】针对有动态行为的系统提出一种生成脚本的方法。对于包含非决定性行为 的应用程序提出了一种自动化测试方法。该方法为一个应用程序的决定性行为测试产生 测试代码。当测试非决定性行为实例时,该方法提供可接受的行为转换,使非决定性行 为可以有效地被测试。 文献 1 3 1 针对w e b 应用程序的自动化测试提出了一种面向活动图的方法来进行自 动化测试,在该方法中,开发者定义一个域模型来代表应用程序状态,使用一个带有自 校验的用户接口来验证应用程序的正确性,该方法能够自动生成测试用例和x m l ( 可 扩展标记语言,e x t e n s i b l em a r k u pl a n g u a g e ) 格式的测试代码。 文献 1 4 】提出根据抽象的程序文档生成测试程序的算法,并在该算法的基础上实现 了一个测试工具,文中给出了利用该工具测试一个商业网络管理应用程序的结果。 文献 1 5 提出使用遗传算法来为基于j a v a 的应用程序生成测试脚本。描述了一个生 成测试用例和优化测试用例的工具t c g o j ( t e s tc a s eg e n e r a t i o na n do p t i m i z a t i o nf o r j a v a p r o g r a m s ) ,能为任何j a v a 应用程序生成测试用例,并且可以优化测试用例的结果, 但其也有一个缺点,不能自动生成验证语句。 文献 1 6 提出根据类的封装特性和测试用例自动产生测试程序。该方法为面向对象 的类测试,通过合并测试建立过程、测试执行和测试验证为一个单独的测试程序,通过 给定的测试用例和类的封装性可以自动产生测试程序。 4 南京邮电大学硕士研究生学位论文 第l 章绪论 文献 1 7 】利用n e t 框架下提供的反射机制及代码文档对象模型命名空间,以及数据 脚本技术实现了测试脚本的自动生成。 1 4 本文所做的工作 通过对目前的测试方法以及测试工具的分析研究,在阅读大量国内外相关领域文献 的基础上,借鉴实际经验,提出了一套比较完备的自动化测试脚本生成技术的解决方案。 本文针对软件测试的脚本自动生成技术进行研究,限于时间,不可能对所有的测试 活动的脚本生成技术都进行研究,主要对采用白盒测试( 如单元测试) 和黑盒测试( 如 功能测试) 技术为代表的测试活动的脚本生成技术进行研究;并且在研究怎样生成脚本 的同时,还考虑了要生成高效的脚本,所以在单元测试中要求生成数据驱动脚本,在功 能测试中要求生成关键字驱动脚本。 主要创新点: l 、对以白盒测试方法为主的单元测试,提出一套基于j u n i t 框架的单元测试数据 驱动脚本自动生成的方案,并利用该方案在开发环境e c l i p s e 下用j a v a 语言实现了单元 测试数据驱动脚本生成系统; 2 、对以黑盒测试方法为主的g u i 功能测试,提出了自动生成关键字驱动脚本方案, 并利用该方案在开发环境e c l i p s e 下用j a v a 实现了功能测试关键字驱动脚本生成系统; 3 、根据n g o s s 体系架构中e t o m 业务过程分解的思想,提出了一套划分关键字 驱动脚本中关键字的方法及该方法指导下的脚本划分模型,提高了脚本的复用性。 1 5 本文的组织结构 本文的结构共分为五章,分别如下: 第l 章:阐述了选题的背景和意义以及本研究课题的来源,论述了软件自动化测试 以及脚本自动生成技术的研究现状,并介绍了本文的研究工作及组织结构; 第2 章:介绍了软件自动化测试技术,介绍了测试脚本的概念及内容并概述了脚本 生成技术,详细介绍了现有的各种脚本技术,并对各种脚本技术作了评价比较; 第3 章:实现了在单元测试中应用数据驱动脚本技术,设计并实现了单元测试数据 驱动脚本生成系统,详细讲述了实现过程,最后给出了该系统的应用实例; 第4 章:结合s a f s 框架实现了在g u i 功能测试中采用关键字驱动脚本技术,提 出了划分关键字驱动脚本中关键字的模型,并指出在该模型指导下的脚本划分模型;设 计并实现了功能测试关键字驱动脚本生成系统,最后给出了该系统的应用实例; 第5 章:总结了课题研究中存在的不足,以及下一步改进的方向。 5 南京邮电大学硕士研究生学位论文第2 章自动化测试及脚奉技术 第2 章自动化测试及脚本技术 软件自动化测试脚本生成技术涉及到软件自动化测试技术、所采用的测试脚本技术 以及所采用的测试工具等内容。项目采用常用的测试工具,对自动化测试脚本生成技术 进行研究。下面对软件自动化测试脚本生成技术所密切相关的自动化测试技术、测试脚 本及其生成技术和测试脚本技术进行总结和概括,并对各种脚本技术作评价比较。 2 1 自动化测试概述 软件自动化测试是相对手工测试而存在的一个概念,由手工逐个地运行测试用例的 操作过程被测试工具自动执行的过程所代替。手工测试是靠测试人员的一步一步操作来 实现的,测试人员操作一步,测试前进一步,测试人员停下来,测试也停下来。而自动 化测试是通过测试工具来实现的,一旦启动测试,无论测试人员在做什么事情,测试都 会继续下去。自动化测试要求无论自动还是手工执行测试都不影响测试的有效性和可重 复性。自动化测试对测试的经济性有影响,自动化测试通常要比手工测试经济得多,其 开销比手工测试的开销少得多。自动化测试的方法越好,长期使用获得的收益就越大【4 j 。 测试工具的使用是自动化测试的主要特征,也是自动化测试的主要手段。自动化测 试,有时不需要测试工具,而使用一些命令、s h e l l 脚本就可完成测试任务;但自动化 测试不能仅仅局限于工具本身,必须和测试目标及策略结合起来,包括了自动化测试思 想、流程和方法,在流程上支撑自动化测试的实现,在方法上保证选用正确的测试工具。 还不得不承认,不是所有的测试都可以由测试工具完成,有些测试还必须由手工完 成。自动化测试和手工测试往往交织在一起,相互补充,工具执行过程往往需要人工分 析,手工测试时也可以借助工具处理某些数据、日志或显示某些信息。 2 2 测试脚本及其生成技术概述 测试脚本、测试脚本生成技术、测试脚本技术三者有着不同的内涵,下文逐一进行 解释。 测试脚本是交互应用或部分非交互应用的测试自动化中的必要组成部分,是一组测 试工具执行的指令集合,也是计算机程序的一种形式,被相应的测试工具所识别和执行。 目前主要有三种方式产生测试脚本【8 】: 1 、手工编写测试脚本,与普通的编程原理类似,手工编辑脚本就是采用某种特定 的编程语言,编写一系列能够在特定环境和平台下运行的代码,然后运行这些代码; 2 、采用测试工具利用“面向对象软件的逆向工程技术”产生测试脚本,该技术主 要用于单元测试自动化中,对于采用面向对象方式设计的目标应用程序,单元就是程序 6 南京邮电大学硕士研究生学位论文第2 章自动化测试及脚本技术 中的各个类,针对这些类的单元测试采用这种技术产生测试脚本,首先要提供被测单元 的源程序,在该程序单元内人工选择需要测试的方法,产生测试脚本; 3 、利用自动化测试工具“录制回放”技术产生测试脚本,该技术是大多数自动化 测试工具针对g u i 功能测试所采用的主流自动化测试技术,主要是由测试人员在测试 工具的平台环境下,手工执行一遍测试用例,由测试工具记录手工操作的步骤和对象, 并将记录的信息写入到脚本中,测试人员可回放脚本来检验被测应用程序是否正确。 对脚本生成技术的研究主要是对自动化测试中脚本自动生成技术的研究,在第1 3 节详细概括总结了脚本自动生成技术目前在国内外的研究情况。 测试脚本技术围绕着脚本结构设计如何有效地实现测试用例描述的测试规程,在建 立脚本的代价和维护脚本的代价中获得平衡,并从中获得最大收益。 测试脚本技术可分为线性脚本技术、共享脚本技术、结构化脚本技术、数据驱动脚 本技术和关键字驱动脚本技术。线性脚本是最简单的脚本,如同流水账那样描述测试过 程,一般由自动录制得到;结构化脚本是对线性脚本的加工,类似于结构化设计的程序, 是脚本优化的必然途径之一。而数据驱动和关键字驱动脚本可以进一步提高脚本编写的 效率,极大地降低脚本维护的工作量。目前自动化测试工具生成的脚本大都为线性脚本, 有少数的自动化测试工具( 如r a t i o n a lf u n c t i o n a lt e s t e r ) 可自动生成g u i 功能测试的数 据驱动脚本。 2 3 测试脚本技术 脚本中的信息十分广泛,信息越多,越容易出错,因而更需要修改和管理。不同的 脚本技术都追求共同的目标:提高生产率使自动化测试更为简单。虽然不能完全废除测 试脚本,但通过使用不同的脚本技术可以减少脚本的大小、数量以及复杂度【3 】。本节将 介绍不同的脚本技术,以及每种技术的优缺点和适用场合。 2 3 1 线性脚本技术 线性脚本【1 8 】( 1 i n e a rs c r i p t s ) 是录制手工执行的测试用例得到的脚本。这种脚本包 含所有的击键、功能键、箭头、控制测试软件的控制键及输入数据的数字键。如果用户 只使用线性脚本技术,即录制每个测试用例操作的全部内容,则每个测试用例可以通过 脚本被完整地回放。线性脚本也可以包含测试结果验证语句,在录制测试脚本时,可以 添加比较指令( 如果测试工具支持) 或在回放脚本录制的输入时增加比较指令。 线性脚本的优点:不需要深入的工作或计划,只需坐在计算机前录制手工任务;可 以快速开始自动化测试;对实际执行操作可以审计跟踪:能提供良好的演示。 7 堕塞塑坐奎兰堡圭堕壅生兰垡笙奎笙! 兰旦垫些塑姿丝塑奎垫查 线性脚本缺点:一切依赖于每次捕获的内容;测试输入和比较是“捆绑”在脚本中 的;无共享或重用脚本;容易受软件变化的影响;维护成本高。 使用线性的脚本时机:几乎任何可重复的操作都可以使用线性脚本技术进行自动化 测试;如果测试用例只用一次,非常适合使用线性脚本技术;线性脚本可以用于演示或 培训;线性脚本可用于设置和清除测试。 2 3 2 共享脚本技术 共享脚本3 1 ( s h a r e ds c r i p t s ) ,顾名思义是指脚本可以被多个测试用例所使用。这意 味着脚本语言允许一个脚本被另一个脚本调用,而这已成为所有自动化测试执行的标 准。共享脚本技术的思路是产生一个执行某种任务的脚本,而不同的测试要重复这个任 务,当要执行这个任务时只需在每个测试用例的适当地方调用该脚本。 共享脚本的优点:以较少的开销实现类似的测试;维护开销低于线性脚本;删除明 显重复的脚本。 共享脚本的缺点:需要跟踪更多的脚本、文档、名字以及存储,如果管理的不好, 很难找出适当的脚本;对于每个测试仍需要一个特定的测试脚本,因此维护成本比较高。 使用共享的脚本时机:共享脚本技术适合小型系统或大型应用中只有- d , 部分需要 测试的情况。 2 3 3 结构化脚本技术 结构化脚本【3 1 ( s t r u c t u r e ds c r i p t s ) 类似于结构化程序设计,具有各种逻辑结构,包 括选择性结构、分支结构、循环迭代结构。结构化脚本中含有控制脚本执行的指令,这 些指令或为控制结构或为调用结构。结构化可以进一步理解为将整个脚本分为不同的模 块,通过层次调用,使脚本更易维护和扩充。 结构化脚本优点:较好的可读性;可以对一些容易导致测试失败的特殊情况进行处 理;可以作为模板被其他脚本调用; 结构化脚本缺点:脚本变得很复杂;测试数据仍然“捆绑”在脚本中。 结构化脚本的使用时机:被测软件系统比较复杂,通常结合数据驱动和关键字驱动 脚本技术一起使用。 2 3 4 数据驱动脚本技术 。 数据驱动脚本 3 1 ( d a t a d r i v e ns c r i p t s ) 技术将测试输入存储在独立的数据文件中, 而不是存储在脚本中,也即脚本与数据相分离。脚本中存放控制信息。执行测试时,从 文件中而不是直接从脚本中读取测试输入。这种方法的最大好处是同一个脚本可以运行 r 堕室坚皇查兰堡主堕壅生堂垡堡塞笙! 童鱼垫垡型鎏丝些查垫查 不同的测试用例。当有两个测试用例执行的操作相同,但输入和期望输出不同,这两个 测试用例可以使用同一个测试脚本和不同的测试数据文件。 通过数据驱动脚本,已经开始从自动化测试中获益。使用该技术,可以以较小的额 外开销实现较多测试用例。因为需要做的所有工作只是为每个增加的测试用例指定一个 新的输入数据集合及期望结果,无需编写更多的脚本。 数据驱动脚本的优点:可以很快增加类似的测试;测试者增加新测试不必具有工具 的脚本语言技术或编程知识;对于第二个测试及后续测试无额外的脚本维护开销。 数据驱动脚本的缺点:初始建立脚本的开销较大;初始建立脚本需要专业编程支持。 数据驱动脚本的使用时机:长时间运行测试,有些错误,只有在软件长时间运行后 才能发现。 2 3 5 关键字驱动脚本技术 关键字驱动脚本( k e y w o r d d r i v e ns c r i p t s ) 实际上是较复杂的数据驱动脚本技术的 逻辑扩展,将数据文件变成测试用例的描述,用一系列关键字指定要执行的任务。在关 键字驱动技术中,假设测试者具有某些被测系统的知识,所以不必告诉测试人员如何进 行详细的动作,只是说明测试用例做什么,而不是如何做。这样,在脚本中使用的是说 明性和描述性方法 2 0 1 。 关键字驱动脚本技术除了实现测试数据与测试脚本分离,还实现了测试业务逻辑与 测试脚本分离和被测对象界面元素名与脚本内容对象名分离,这也是关键字驱动脚本技 术的核心【2 。关键字驱动脚本技术是在数据驱动脚本技术基础上发展起来的,吸取了数 据驱动脚本技术中将可变部分和不可变部分分离以降低脚本维护工作量的思想。 关键字驱动脚本优点:脚本的规模是随软件的规模而不是测试的数量而变化的;可 以用与平台无关的方法实现关键字驱动脚本技术。 关键字驱动脚本缺点:建立脚本的初始开销较大;针对具体的关键字实现的脚本需 要很有经验的编程人员来完成。 关键字驱动脚本的使用时机:开发的软件规模比较大,业务逻辑也很复杂。 2 4 脚本技术的评价 通过第2 2 节介绍的各种脚本技术可以看到,使用线性、共享或结构化脚本,只是 对现有的测试进行自动化,然而,使用数据驱动和关键字驱动技术可以针对每个回归测 试方便地增加许多测试用例【1 9 】。既然数据驱动和关键字驱动脚本要优于线性、共享和结 构化脚本,而关键字驱动脚本技术又是数据驱动脚本技术的逻辑扩展,是不是所有的项 9 南京邮电大学硕士研究生学位论文 第2 章自动化测试及脚本技术 目关都采用关键字驱动脚本技术呢? 事实却并不是这样,譬如针对单元测试,就没有必要应用关键字驱动脚本技术,因 为单元测试涉及的业务逻辑不是很复杂,且关键字驱动脚本技术中一个很重要的元素就 是实现界面元素名和内部对象名的分离,但在单元测试中不涉及界面元素,所以在单元 测试中采用关键字驱动脚本技术不但不能提高测试效率,反而使单元测试更加复杂。所 以项目在生成单元测试脚本时,生成的是数据驱动脚本。 而针对功能测试,因为涉及到界面元素和复杂的测试业务逻辑,而仅仅依靠数据驱 动脚本技术并不能解决这些问题,而关键字驱动脚本技术的三个要素中除了实现测试数 据与脚本分离之外,还要实现界面元素名和内部对象名的分离、业务逻辑和脚本的分离。 基于功能测试的特点和关键字驱动脚本技术的特征,本文在生成功能测试脚本时,决定 生成关键字驱动脚本。 2 5 本章小结 本章首先介绍了软件自动化测试技术。其次,介绍t n 试脚本的概念,概述了脚本 生成技术,再次,介绍了软件自动化测试中常用的线性脚本、共享脚本、结构化脚本、 数据驱动脚本和关键字驱动脚本技术。最后对各种脚本技术作了分析比较,通过分析和 论证,在项目中决定以白盒测试方法为主的单元测试采用数据驱动脚本技术,以黑盒测 试方法为主的功能测试采用关键字驱动脚本技术,本课题的主要工作就是研究生成数据 驱动脚本和关键字驱动脚本的方法并实现这些方法。 l o 南京邮电大学硕士研究生学位论文 第3 章基于数据驱动的单元测试脚本生成技术 第3 章基于数据驱动的单元测试脚本生成技术 根据第2 4 节对脚本技术的分析研究,可以看到单元测试中采用数据驱动脚本技术 的性价比最高。目前的自动化测试工具针对单元测试大都采用手工编写线性脚本的方 式,但手工编写脚本会增加测试时间还会带来一些人为的错误。本章基于这样的事实, 提出在单元测试中应用数据驱动脚本技术,并提出了一种生成单元测试数据驱动脚本的 方法,根据该方法设计了单元测试数据驱动脚本的自动生成系统,在开发环境e c l i p s e 下用j a v a 开发语言实现了该系统。该系统能根据测试用例自动生成单元测试的数据驱 动脚本,生成的脚本能直接在j u n i t 框架下运行。 3 1 数据驱动脚本技术运行原理 数据驱动测试脚本,它包含了测试的所有公共逻辑。可以将随着测试改变而改变的 数据存储在测试数据文件中,测试脚本读取该文件来执行测试。对于每个测试而言,它 采用相同系列的动作来实现四阶段测试:第一阶段,解释程序检索文件中的测试数据, 然后使用文件中的数据建立测试环境;第二阶段,它执行具体文件指定参数的s u t ( 被 测系统,s y s t e mu n d e rt e s t ) ;第三阶段,验证s u t 生成的实际结果( 例如返回值、测 试后状态) 与数据文件的预期结果是否匹配。如果结果不匹配,将测试标记为失败;如 果s u t 抛出异常,捕获异常并相应地标记测试然后继续:第四阶段,测试脚本进行必 要的测试环境清理,然后继续执行文件中的下一个测试【2 2 】。图3 1 是数据驱动测试原理 图【3 】图中“验证”阶段的箭头指向其本身,表示对测试结果的标记( 成功或失败) 。 图3 - l 数据驱动测试原理图 3 2 单元测试中应用数据驱动脚本技术基础 一个软件系统是由众多单元构成的,单元质量决定了系统的质量,单元质量的重要 性就决定了单元测试的重要性。目前在单元测试中大都采用手工编写线性脚本的方式来 进行测试,本节将数据驱动脚本技术应用到单元测试中,下面将具体讲述在单元测试中 采用数据驱动脚本技术所需的一些文件,以及单元测试工具j u n i t 测试脚本规范。 l i 南京邮电大学硕士研究生学位论文第3 章基于数据驱动的单元测试脚本生成技术 3 2 1 测试用例文件 因为测试数据包含在测试用例中,数据驱动要实现测试脚本与测试数据的分离,则 不能直接调用测试用例中的测试数据。在单元测试数据驱动脚本生成系统的设计与实现 中,将测试用例以x m l 2 3 1 格式存储在文件系统中,在脚本中用调用命令直接调用测试 用例x m l 文件中的数据。测试用例采用x m l 格式存储,而不采用其他格式存储,具 有以下两点好处:( 1 ) x m l 是一种描述性语言,能够通过定义自己的标记来自由定义 信息结构,这有助于信息的精确检索;通过自己定义的标记,也便于对测试用例所表示 的内容进行正确理解;( 2 ) j a v a 语言本身提供多种机制解析x m l 文件,不需要其他工 具的辅助,目前j a v a 语言提供的对x m l 的解析机制有:s a x ( x m l 的简单a p i ,s i m p l e a p if o rx m l ) 、d o m ( 文档对象模型,d o c u m e n to b j e c tm o d e l ) 和d o m 4 j t 2 4 】( j a v a 版文档对象模型,d o mf o rj a v a ) 。 因为面向对象程序的单元测试主要是对类的测试,测试类中的方法和类的状态,当 然也还要对接口进行测试。所以在测试用例文件中要指明的内容有:将要测试类的类名、 将要测试的类中的方法名、测试该方法需要的参数名称和值以及该被测方法返回的预期 结果值。可以在x m l 文件中以不同的节点来表示这些信息,x m l 本身就相当于一棵 树,将测试用例名称作为树的根节点:测试用例中可能会包括多个类,所以类名是根节 点的孩子节点:类中可能又会包含一到多个方法,所以方法名是类名的孩子节点;方法 中包含实现该方法需要的参数值以及该方法的预期返回值,所以参数值和预期结果值是 方法的孩子节点。针对测试用例结构中的这种关系,下面给出该关系的树形图描述,如 图3 2 所示。图中的方法n 表示该方法可能在测试用例中的排序为n ,其实对方法并没 有排序,这里只是为方便描述而这样表示的。 图3 - 2 单元测试用例的树形图 3 2 2 解析测试用例文件 在本章的前面部分介绍了数据驱动的优点是可以将测试数据单独存放在一个文件 1 2 南京邮电大学硕士研究生学位论文第3 章基于数据驱动的单元测试脚本生成技术 中,在脚本中不用涉及具体的测试数据,如果对测试数据进行了修改,只需修改测试数 据文件,而不用修改脚本。基于这样的思想,本文在j u n i t 框架下应用单元测试的数据 驱动脚本技术,下面介绍在实现数据驱动时怎样获取测试用例中的信息。 第3 2 1 节介绍了测试用例文件的格式,那么怎样实现从测试用例的x m l 文件中 得到脚本中需要的数据呢? 这就需要对测试用例文件进行解析,解析得到的结果是测试 用例中具体的内容,也即脚本中需要的内容。 因为要在单元测试中采用数据驱动脚本,所以将解析测试用例文件得到的结果以函 数的形式返回,在脚本中需调用某数据时,直接用返回该数据的函数替代。这样主要有 两点好处:( 1 ) 针对相同业务逻辑的测试,只需用一个脚本文件就可实现多个测试,只 是每次测试时所采用的测试用例文件不同;( 2 ) 针对同一个测试,若发现测试用例文件 中某数据不正确,直接在测试用例文件中修改该数据即可,脚本不需做任何改动。 这里主要介绍的是解析测试用例文件的原理,下文将详细讲述实现解析测试用例文 件的过程。 3 2 3j u n i t 测试脚本规范 j u n i t 2 5 】是针对j a v a 语言应用程序的一个单元测试框架,它被认为是迄今为止所开 发的最重要的第三方j a v a 库。它是一个易用的、灵活的、开源的测试平台。j u n i t 的 优点是整个测试过程无需人的参与,无需分析和判断最终测试结果是否正确,而且可以 很容易地一次性运行多个测试。这也是本文采用j u n i t 作为单元测试工具的主要原因。 j u n i t 的出现促进了测试的盛行,而且便于和编译单元( 如a n t ) 以及i d e ( 集成开发环 境,i n t e g r a t e dd e v e l o p m e n te n v i r o n m e n t ) 单元( 如e c l i p s e ) 集成。 j u n i t 可以运行数据驱动脚本,最简单的实现方式是写包含循环的测试方法,该循 环从文件中读取一组输入数据值以及预期结果。这种构建数据驱动测试解释程序的方法 会产生具有许多断言的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现场安全秩序管理制度
- 现金收款收据管理制度
- 班组岗位安全管理制度
- 理疗店铺运营管理制度
- 生产企业厂务管理制度
- 生产现场钥匙管理制度
- 生产职工考勤管理制度
- 公园里活动策划方案
- pe投后管理制度
- 专精特新管理制度
- 第五单元《面积》(教学设计)-【大单元教学】三年级数学下册同步备课系列(人教版)
- 掼蛋考试试题及答案
- GA/T 2159-2024法庭科学资金数据清洗规程
- 企业风险管理-战略与绩效整合(中文版-雷泽佳译)
- 业务学习踝关节骨折
- 实景演出制作合同协议
- 迅镭激光切割机操作培训
- 《医疗机构重大事故隐患判定清单(试行)》知识培训
- 浙江省杭州市2024年中考英语真题(含答案)
- 《陆上风电场工程设计概算编制规定及费用标准》(NB-T 31011-2019)
- 装修管理规则-城市综合体---成都租户指引
评论
0/150
提交评论