基于selenium的web自动化测试

基于selenium的web自动化测试
基于selenium的web自动化测试

基于Selenium的Web自动化测试

1绪论

1.1引言

网络时代的到来和迅速普及,为软件产业带来了一场革命性的变化,基于Web 的应用系统已经开始逐步取代原来的单机版应用系统,成为当前和未来的软件系统开发和实施的主流。现在的Web应用系统结合了商业、数据库以及企业的运用,因此,对于Web应用系统的要求也愈来愈严格,它必须具备高度的扩展性,合理的执行效率,以及全天候安全强固的执行环境。也就是说,现在Web应用系统必须能够安全及时地服务大量的客户端用户,又能够长时间安全稳定地运行。而且由于interent的开放性和易访问性,在Web应用系统商业应用领域的竞争非常激烈。用户对网站的期望很高,如果网站无法做到快速加载、正确显示信息、即时反应并提供直观的浏览与简易的交互功能,用户就有可能转换门庭,去别的网站。因此,Web应用的测试至关重要。

但是由于Web应用系统具有分布、异构、并发和平台无关的特性,因而Web应用系统的测试要比普通程序的测试要复杂的多。

从功能测试角度看,与传统的应用软件相比,Web应用系统的独特之处主要有以下几点:

1.Web应用系统的组成实体多种多样。就HTML文档而言,用不同语言编写的脚本,各式各样的样式表及组件使得Web应用系统难以理解和测试。

2.Web应用系统中有大量的导航链接,确保系统能够根据用户的选择准确地显示用户需要的内容是Web测试的重要方面。

3.Web应用系统通过会有大量的Cookie等技术来保存用户的状态信息,确保系统对这些状态信息的正确管理也是Web测试的重要挑战。

4.Web应用系统的客户端及操作系统的多样性导致的兼容性问题,要求对各个环境进行测试。

5.Web应用系统客户端内容及结构更新快,新功能的不断加入不仅要对新加入功能进行测试,而且还要对原有功能进行回归测试。

基于selenium的Web自动化测试

6.Web应用系统开发技术层出不穷,如AJAX,XML,JSP/ASP等等,每种技术都有各自的特点,测试也要根据相应的技术进行以提高测试效率。

相对于传统软件而言,基于Web应用系统的测试工作要求相对来说更高,测试工作更严峻,如果单靠手工去进行测试,是远远不够的,必须引入自动化测试方法。

1.2 Web应用系统功能测试自动化研究

在实际测试工作中,自动化测试的难点在于:

1.测试用例。测试用例是手工测试与自动化测试的基本,自动化测试效率的高低与测试用例的设计的好坏有着直接的关系。

2.自动化测试用例的选取。哪些测试用例适合用来进行自动化呢?只有选取那些重复性高,手工测试无法实现或自动化测试比手工测试效率更高的测试用例进行自动化,才能更好的提高自动化测试的效率。但是如何确定测试用例符合这些标准又是一个值得讨论的问题。

3.自动化测试脚本的健壮性。Web应用系统的表现层的内容与结构的易变性经常会导致测试脚本失败,而后又需要维护,这样大大降低了自动化测试的效率。

目前,对于Web应用系统的功能测试基本上都是采用“录制一回放”的模式来生成测试脚本,即测试人员用自动化测试工具将手工执行的测试过程录制成测试脚本,然后根据需要修改测试脚本,接着执行测试脚本,如果测试脚本执行失败,分析失败的原因,如果是测试脚本的问题,就需要对测试脚本进行维护。

对于元素的定位地址,目前很多的自动化测试工具一般或使用DOM,或使用XPath表达式来表达页面元素的定位信息,如://ul[@,class='in']/LI[1]/a,可读性差,测试人员需要到页面中去定位该元素才能了解该元素代表什么。而且元素的定位信息遍布于测试脚本中,一旦该元素的定位信息有所改变,就需要首先找出使用到该元素的测试脚本,并逐一更新定位信息。

我们需要对页面元素的定位信息进行统一管理,使用一个有意义的名称去标识被测页面元素,对每一个页面元素的定位信息应只有一个单一的入口点,并通去一定的定位逻辑动态的生成页面元素的定位信息。

绪论

1.3研究内容和组织结构

本文针对Web应用系统的特点,首先介绍了软件测试的方法及Web应用系统测试方法,自动化测试及其应用,根据自动化测试工作中出现的页面元素定位难的问题,基于开源自动化测试工具Selenium,提出了一套解决方案selenium+junit框架,以解决web自动化测试的问题。

本文的组织结构如下:

第一章,简述了Web应用系统自动化测试的背景知识及其现状,并介绍本文的研究内容。

第二章,首先介绍了软件测试的基本概念,并分析了Web应用程序的特点,及Web应用程序测试的主要方法。

第三章,首先介绍了软件测试自动化的基本概念,并就Web应用程序的特点分析了自动化测试与手工测试的不同。然后介绍自动化测试工具的选择及应用。

第四章,首先介绍了开源功能测试工具Selenium及如何有效使用该工具,然后构建Selenium + Junit框架进行自动化测试。

第五章,对本论文的研究进行总结,讨论了它的可取与不足之处,指出进一步研究的方向。

基于selenium的Web自动化测试

2软件测试概述

2.1什么是软件测试

2.1.1软件测试的定义

所谓软件测试,就是一个过程或一系列过程,用来确认计算机代码完成了其应该完成的功能,不执行其不该有的操作。软件应当是可预测且稳定的,不会给用户带来意外惊奇。

软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的文档和程序最终复审,是软件质量保证的关键步骤。如果给软件测试下定义,可以这样讲:测试是为了发现错误而执行程序的过程,也就是说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计的一批测试用例(即输入数据或操作及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。

软件测试是为了发现程序中的错误,是一个找错的过程;软件测试的过程亦是程序运行的过程;程序运行需要数据,为测试而设计的数据或辅助程序称为测试用例。

值得指出的是,不能保证通过测试的程序一定正确,测试只能找出程序中的错误,而不能证明程序无错。有时可以认为,软件运行期间测试活动从未间断,只是在软件交付之后,将由用户来继续扮演测试角色而已。

2.1.2软件测试的目标

对于软件测试,基于不同的立场,存在着两种完全不同的测试目标。从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可以接受该产品;而从软件开发人员的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件产品已正确地实现了用户的要求,确立人们对软件质量的信心;因此,他们会选择那些导致程序失效概率小的测试用例,回避那些易于暴露程序错误的测试用例;同时,也不会着意去检查、排除程序中可能有的副作用。显然,这样的测试对完善和提高软件质量是毫无价值的。由于,程

软件测试概述

序中往往存在着许多预料不到的问题,可能会被疏漏,许多隐藏的错误只有在特

定的环境下才有可能暴露出来;如果不把着眼点放在尽可能查找错误这样一个基

础上,这些隐藏的错误和缺陷就查不出来,会遗留到程序运行阶段中去。如果从

用户的角度考虑,替他们着想,就应当把测试活动的目标对准揭露程序中存在的

错误;在选取测试用例时,需要考虑那些深层次意义下才可能发现程序错误的数据。

有些测试专家认为软件测试的范围应当包括得更广泛些。认为软件测试不仅要考虑正确性以,还应当关心程序的效率、健壮性等因素,并且应该为程序调试提供更多的信息。20世纪70年代中期以来,形成了软件生命期概念。这时人们对于软件测试的认识更广泛,也更深刻了,这对于软件产品的质量保障以及组织好软件开发工具有着重要的意义。这时,对软件质量的判断决不只限于程序本身,而是整个研制过程。

2.1.3软件测试的原则

测试是一项非常复杂的、创造性的和需要高度智慧的挑战性的工作。测试一

个大型程序所要求的创造力,可能要超过设计那个程序所要求的创造力。软件测

试中很重要的一个方面是人的心理问题,一些直观上看是很显而易见的至关重要

的原则,总是被人们忽视。

确定预期输出(或结果)是测试情况必不可少的一部分,如果事先无法肯定预期的测试结果,往往会把看起来似是而非的东西当成正确的结果。必须提倡用事先精确对应的输入和输出结果来详细检查所有的输出。

程序设计机构不应测试自己的程序,程序员也应避免测试自己的程序。软件

测试的出发点是找错误,要让程序设计机构和程序员在测试自己的程序时持否定

的态度是困难的。除了这个心理学问题外,还要注意:程序中可能包含由于程序

员对问题的叙述或说明的误解而产生的错误。如果是这种情况,让程序员测试自

己的程序时往往是不能发现问题的。以上的看法并不意味着程序设计机构或程序

员不能调试自己的程序,而是强调,由第三方来进行程序测试会更有效、更成功。

一般而言,测试计划可以在需求分析完成后开始,详细的测试用例定义

可以在设计模型被确定后立即开始,因此,所有测试可以在任何代码被

基于selenium的Web自动化测试

编写前进行计划和设计。

>Pareto原则应用于软件测试。Pareto原则意味着测试发现的错误中的80%

很可能集中在20%的程序模块中。

>测试应从“小规模"开始,逐步转向“大规模”。即从模块测试开始再进

行系统测试。

>穷举测试是不可能的,因此,在测试中不可能覆盖路径的每一种组合,

然而,充分覆盖程序逻辑,确保覆盖程序设计中使用的所有条件是有可能的。

>为达到最佳的测试效果,提倡由第三方来执行测试。

2.1.4软件测试的对象

软件测试并不等于程序测试。软件测试应当贯串于软件定义与开发的整个期间;因此,需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,诸如:需求规格说明、概要设计规格说明、详细设计规格说明和原程序等,都应成为软件测试的对象。软件测试不应仅局限在程序测试点的狭小范围内,而置其它阶段的工作于不顾。

2.2软件测试的基本方法

软件测试方法可根据测试过程中是否发生状态变化分为两大类:动态测试和

静态测试方法;又可根据对测试对象了解的程度,分为黑盒测试和白盒测试两类。

2.2.1静态和动态的方法

根据程序是否运行,测试可分为静态测试和动态测试。静态测试就是静态分析,对模块的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和仿真运行。静态测试采用人工检测和计算机辅助静态分析手段进行检测,只进行特性分析。

静态测试包括对软件产品的设计规格说明书的审查,对程序代码的阅读、审

软件测试概述

查等。静态分析的查错和分析功能是其它方法所不能替代的,已被当做一种自动

化的代码校验方法。

动态测试是通过观察代码运行的动作,来提供执行跟踪、时间分析,以及测

试覆盖度方面的信息。动态测试通过真正运行程序发现错误。通过有效的测试用例,对应的输入/输出关系来分析被测程序的运行情况。

不同的测试方法各自的目标和侧重点不一样,在实际工作中,应将这两种方

法结合起来运用,以达到更完美的效果。

2.2.2黑盒测试和白盒测试

根据测试是针对系统的内部结构还是针对具体实现算法的角度来进行,分别

称为白盒测试和黑盒测试。

1.黑盒测试法

黑盒测试,也称功能测试或数据驱动测试。它不管程序内部结构是什么样的,只是从用户出发,根据产品应该实现的实际功能和已经定义好的产品规格,来验证产品应该具有的功能是否实现,每个功能是否都能正常使用,是否满足用户的要求。

在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试人员针对程序接口和用户界面进行测试,只检查程序

功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据

而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

黑盒测试主要用于发现以下情况:

>是否有不正确或遗漏了的功能;

>在接口上,能否正确地接受输入数据,能否产生正确的输出信息;

>访问外部信息是否满足要求;

>性能上是否满足要求;

>界面是否错误,是否不美观;

>初始化和终止错误。

黑盒测试方法主要用于软件确认测试。其具体方法有等价类划分、边界值分析、因果图、错误猜测法等。

基于selenium的Web自动化测试

黑盒测试方法着眼于程序外部结构,不考虑内部逻辑结构,针对软件界面和软件功能进行测试。在用黑盒测试时,必须在所有可能的输入条件和输出条件中确定测试数据。黑盒测试中不可能做到穷举测试,因此局限于功能测试是远远不够的,还要结合白盒测试方法,进行逻辑和路径测试。

2.白盒测试法

白盒测试,也称结构测试或逻辑驱动测试,也就是已知产品的内部工作过程,清楚最终生成软件产品的计算机程序的结构和语句,按照程序内部的结构测试程序,测试程序内部的变量状态、逻辑结构、运行路径等,检验程序中的每条通路

是否都能按预定要求正确工作,检查程序内部动作或运行是否符合设计规格要

求,所有内部成分是否按规定正常进行。主要用于软件验证。白盒测试的主要方

法有逻辑覆盖、循环覆盖和基本路径测试。逻辑覆盖又可分为语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。

白盒法是“基于覆盖的测试",应朝着提高覆盖率的方向努力,尽可能多地

进行测试,找出那些被忽视的错误。一般来说,白盒测试的原则是:>保证每个模块中所有独立路径至少被使用一次。

>对所有逻辑值均测试为真值和假值。

>在上下边界及可操作范围内运行所有循环。

>检查内部数据结构以确保其有效性。

2.3软件测试的阶段

软件测试是软件开发过程中的重要内容之一,是软件质量保证的关键。软件

测试贯穿软件产品开发的整个生命周期一一软件项目一开始,软件测试也就开始了,从产品的需求分析审查到最后的验收测试、安装测试结束。整个过程如图

2-1所示。

软件测试概述

图2-1软件测试阶段示意图

基于selenium的Web自动化测试

从过程来看,软件测试是由一系列的不同测试阶段所组成的,这些阶段分为:单元测试、集成测试(组装测试)、系统测试和验收测试。软件开发的过程是自顶向下的,测试则正好相反,以上这些过程就是自底向上,逐步集成的。当然,这里只是一个完整的过程,对于不同的软件系统或产品可以进行适当的裁减或合

并。

2.4软件测试的工作范畴

软件测试工作可以分为六个方面:

测试组织和管理:建立测试队伍,设立不同功能或完成不同任务的测试小组,对测试用例、软件缺陷、测试执行、测试文档等进行管理,当然,也可以把测试

管理工作看成是软件质量管理工作的一部分。

测试计划:独立的测试组织负责定义软件测试的方法和规范。开发组织负责

编制单元测试的计划和说明。测试组织主要负责编制其它各测试阶段的测试计划

和说明。

设计测试用例:为了更有效地进行测试,需要设计测试用例。

测试实施:按测试计划与测试说明的定义对测试对象进行相应的测试,填写测试报告中相应的表格,并通知相关人。

测试结果分析:对测试结果进行定量和定性的分析,以检查测试工作执行的

状态。

测试评审与报告:依据软件测试评审准则在各测试阶段评审时提交类型完整

的测试文档。

2.5Web应用系统的特点及测试内容

2.5.1Web应用系统的特点

Web应用系统基本是建立在客户/服务系统之上的,在这种系统中,客户端是各种可以访问因特网的终端设备,如手机,个人计算机,掌上电脑等等,

但绝大多数对应用系统的访问都是来自个人计算机上的浏览器。

软件测试概述

由于各个浏览器对颁布的标准的遵循度,以及对标准的扩展方面大相径庭,导致同一个页面在不同的浏览器上的显示及逻辑处理上都不相同,开发人员在开发基于Web应用程序时就需要考虑到不同浏览器之间的不同,及对不同的脚本处理上的不同,浏览器兼容性的测试也是Web应用系统测试中的一个重要挑战。

Web应用系统的服务端一般有三层:

第一层:表示层。用户对Web应用系统的直观体验就在一层上,在这一层

上将提供各种用户需要的信息及交互操作,并把用户的请求发送到应用服务端,

并把相应的结果返回给用户。

第二层:业务层,运行应用服务器。在这里运行的软件模拟业务流程。下面

列举的是一些与业务层有关的功能:事务处理;用户身份鉴定;数据确认;程序

日志,大型的Web应用系统在此层会加入负载均衡机(Load Balance)分散服务器的压力。

第三层:数据层,在这里从一个或多个关系数据库管理系统(RDBMS)中存储和获取数据,它包含与第二层进行通信的数据库设备。进入数据层的接口由数据模型定义,模型描述了如何进行数据存储。该层一般也会用到负载均衡机制以缓解应用系统的高事务量。

2.5.2Web应用系统的测试内容

Web测试主要通过功能测试、性能测试、兼容性测试、安全性测试与可用性

测试等来发现Web系统的缺陷。

1.功能测试

功能测试就是结合规格说明的要求,保证功能上正确无误。实现用户功能需

求是对软件系统最基本的要求,所以软件功能测试也是所有测试任务的基础。抛

开与传统软件系统功能测试的相同之处,Web应用系统功能测试主要包括以下五

方面的内容:链接测试、表单测试、COOKIE测试、脚本语言测试、数据库测试。在制定测试计划、设计测试策略、选择测试方法和分配人力资源等方面,功能测

试往往是考虑最多的因素。

2.性能测试

通过测试确定系统运行时的性能表现,如得到运行速度、响应时间、占有系统资源等方面的系统数据。如某个网站可以被访问,而且可以提供用户预先设定的功能,意即通过了功能测试,但第打开一个页面或完成某个请求都需要1-2

分钟,用户不可忍受,其结果没有用户愿意使用这个网站所提供的服务。

3.配置和兼容性测试

因为Web应用系统通常需要支持多个主流的Web浏览器,而最终用户面对的也是这些不同的浏览器。针对浏览器的配置和兼容性测试在Web应用系统测试中必不可少,并且占了Web应用系统客户端配置和兼容性测试的大部分时间。所以设计有效的测试用例,精简宠大的测试矩阵是Web兼容性测试的要点。

4.可用性测试

满足用户需求,易于用户使用的Web应用系统才是好的系统。Web应用系

统最终要面向Web用户,系统给用户的印象是非常重要的,如果网站不规范、很难使用或者功能不能运行,将会使用户对网站失去兴趣,转去访问别的网站,最终失去用户。

由此可见,Web应用系统的测试工作量更大,仅仅靠手工测试去完成,效率低,而且测试人员资源宝贵应该投入更多需要智力的工作上,如测试用例的设计等,自动化测试可以完成那些机械的、重复的测试工作或手工无法完成的测试工作,如性能测试。引入自动化测试可以大大提高测试工作的效率。

3基于Web应用程序的自动化测试

3.1什么是软件自动化测试

所谓自动化测试,就是执行自动测试工具或者用某种程序设计语言编制的自

动测试程序,控制被测软件中的各种类和对象,模拟手动测试步骤,完成测试工作。自动化测试的根本目的是自动地对软件产品在各种环境和状态下的执行进行

测试,排除影响测试的人为因素,从而降低花费在测试上的开销。

自动化测试方法的优点包括可以大规模地提高测试效率,减少测试工作量;

具有可重复性,可精确地再现以前的测试步骤,有利于进行回归测试;可以降低

人为的操作失误,从而减少测试成本。

传统的手工测试是一个劳动密集型工作,可以充分利用人的能力。测试员可

以临时想出新测试,也可以注意到没有或不能预测的现象。但是手工测试容易出错。它不支持那些可以由自动测试完成的相同种类的质量检查,引入自动测试能

够用更有效、可重复的自动测试环境代替手工测试活动。

虽然自动测试能够增强测试工作的效率,但是不能利用测试员隐含的知识和

认识。自动化测试每次运行都以同样的速度、同样的顺序、完全一样的鼠标移动

和键盘操作去做同样的事。而手工测试在每次运行测试时都可以对测试做变动。

这些变动可以发现未看到的程序错误。因此,一味在项目测试中追求全部测试自

动化是不现实的也是不合理的,应该把自动化测试看作是手工测试的扩充,用

其来完成手工测试所不能完成的工作。

3.2软件自动化测试的背景及意义

3.2.1测试自动化的背景

最近行业内对软件的质量要求越来高,这必然引起了对测试工作的重视,一款好软件的出世,不但要求有强大的测试团队,该团队必须具备在业务方面、测试技能方面的专业水平,而且在软件开发过程方面经常由于测试而作持续不断地调整。

幸运的是,随着软件开发技术和工具的提高,软件工程和软件过程实践的推广,软件测试日益得到重视和专业化。我别论文期间,一直研究测试理论、自动化测试工具,并建立了一套测试体系。

在此并不介绍整个测试体系,而是介绍测试方面最值得探讨的部分:测试自动化。目的是与大家共同进步。当然自动化测试方面的介绍,但我要介绍的是自动化测试,而是测试如何的自动化.

3.2.2自动化测试实施的意义

1、对新版本执行回归测试-测试每个特征

对于产品型的软件,每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。

2、更多更频繁的测试-沉闷、耗时

我们的产品向市场的发布周期是3个月,也就是我们的开发周期只有短短的3个月,而在测试期间是每天/每2天都要发布一个版本供测试人员测试,一个系统的功能点有几千个上万个,人工测试是非常的耗时和繁琐,这样必然会使测试效率低下。

3、替代手工测试的困难

压力测试、并发测试、大数据量测试、崩溃性测试,用人来测试是不可能达到的。

4、具有一致性和可重复性

由于每次自动化测试运行的脚本是相同的, 所以每次执行的测试具有一致性, 人是很难做到的. 由于自动化测试的一致性,很容易发现被测软件的任何改变。

5、更好的利用资源

理想的自动化测试能够按计划完全自动的运行, 在开发人员和测试人员不可能实行三班倒的情况下, 自动化测试可以胜任这个任务, 完全可以在周末和晚上执行测试. 这样充分的利用了公司的资源,也避免了开发和测试之间的等待.

6、解决测试与开发之间的矛盾

常在开发的末期,进入集成测试阶段, 由于每发布一个版本的初期,测试系统的错误比较少,这时开发人员有等待测试人员测试出错误的时间. 事实上在叠代周期很短的开发模式中,存在更多的矛盾,但自动化测试可以解决其中的主要矛盾。

7、增加软件信任度。

3.3软件自动化测试的优点

软件自动化测试一般通过执行某种程序设计语言编制的自动测试程序,控制

被测软件的执行来模拟手动测试步骤,完成全自动或半自动测试,其目的在于

缩短测试周期,增强对软件性能方面的测试能力等,其优点可总结为以下几点:(1)令软件新版本进行回归测试的开销最小。

(2)可以在更短的时间内完成更多的测试。

(3)可以完成一些手工测试不能或难以完成的测试。

(4)具有一致性和可重复性。

(5)更好地利用资源。

3.4自动化测试的引入条件

自动化测试能大大降低手工测试工作,但决不能完全取代手工测试。完全的

自动化测试只是一个理论上的目标,实际上想要达到100%的自动化测试,目前不可能实现。正常40%的自动化测试度已经是非常最高的了。

测试自动化的引入有一定的标准,要经过综合的评估,绝对不能理解成测试

工具简单的录制与回放过程。实际上,从实现成熟度来说,自动化测试可分为以

下五个级别(表3-1):

表3-1自动化测试的引入级别

自动化测试能提高测试效率,快速定位测试软件各版本中的功能与性能缺

陷,但不会创造性的发现测试脚本里没有设计的缺陷。测试工具不是人脑,要求

测试设计者将测试中各种分支路径的校验点进行定制;没有定制完整,即便事实

上出错的地方,测试工具也不会发觉。因此,制订全面、系统的测试设计工作是

相当重要的。

自动化测试能提高测试效率,但对于周期短、时间紧迫的项目不宜采用自动

化测试。推行自动化测试的前期工作相当庞大,将自动化测试框架应用到一个项

目中也要评估其合适性,因此决不能盲目的的应用到任何一个测试项目中,尤其

不适合周期短的项目,因为很可能需要大量的测试框架的准备和实施而会被拖跨。

3.5自动化测试的可行性分析

任何自动化测试在项目中的应用都要结合项目本身的特点和测试的实际需

要。对于系统功能测试,项目的需求分析和设计分析文档以及测试用例都是进行

自动测试可行性分析的基础。在这些因素确定以后,接下来需要从以下几方面

进行引入自动化测试的可行性分析。

1.对测试用例进行分类

自动化测试要以手工测试的测试用例为基础,因此把整个测试用例按照自动

化测试工具实现程度的难易分成以下四个不同的等级:

(1)不能实现的测试用例。

(2)实现困难的测试用例。

(3)实现一般的测试用例。

(4)实现容易的测试用例。

2.比较自动化测试和手工测试的工作量

使用自动化的测试的主要目的之一就是降低手工测试的工作量,因此如果引

入自动化测试后引起的工作量的增加远大于原来手工测试的工作量,就是不经济的,这种情况下我们就不应考虑引入自动化测试。因此,在一开始的准备阶段,

对于那些可以由自动测试完成的测试用例,需要分别进行手工测试和自动测试的工作量记录和比较、分析,得出自动测试对于项目的可行性程度。由于该部分内容和本文主题没有直接关系,因此不再展开进行论述。

基于以上两方面分析和实际的使用经验,可以得到影响自动测试技术是否适

合项目的可行性分析的因素:

>项目组测试用例的循环测试轮数,一般只要两轮以上的测试,自动化测

试的消耗将小于手工测试的消耗,同时越多轮数的测试就越适合使用自动测试技术,自动测试技术的可行性程度越高;

>测试组对测试用例的分析需要结合测试工具的实际功能,越容易用测试

工具实现测试的用例越多,自动测试技术的可行性程度越高

>自动测试效率受到测试人员对测试用例的熟悉程度,测试人员对于自动

测试工具熟练使用程度以及测试人员与开发人员的沟通能力等因素,这些因素都将影响到自动测试的可行性程度。

3.6软件自动化测试在软件行业的使用现状

自动化软件测试研究已经逐步进入成熟阶段,各种商业自动化测试工具也相

继被推出,有越来越多的软件开发组织开始尝试在测试过程中引入自动化测试。

但是具体的实施情况参差不齐,按实施的不同层次可以分为以下几类:

测试自动化没有纳入规划。认为不必实施自动化测试,主要是软件开发组织

的人员、资金、资源都不足。

准备实施测试自动化的过程中遇到阻力。有了此类规划,购买了自动化测试

工具,并创建了自动化测试流程,但由于实施过程中遇到困难,没有继续推广解

决问题,而是过一段时间后,回到了原来的测试模式。

实施了自动化测试,但却是失败的。公司实施了自动化测试,但是开发与

测试之间矛盾重重,对测试自动化的管理失控。这类组织虽然表面上还在勉强维持自动化测试,但实施的成本比手工测试增加了,工作量比从前更大了。这显然应该归于失败的范畴。

自动化测试实施的相对比较成功,但总是存在些问题。比如工具选择的不准

确,培训不到位,文档不完备,人员分配不合理,脚本可维护度不高等,从而造

成表面上的自动化测试流程,没有给测试工作带来实用的价值。

测试自动化实施的相对比较成功。对被测试产品功能进行了很好的前期评

估,使得相对比较稳定的功能实施了自动化测试,比较易于变化的功能采取手工

测试完成,这样自动化测试和手工测试试的结合给回归测试工作带来一定的方便并增加了测试覆盖度,同时便于测试管理。

因而从以上描述可以看出目前的自动化测试实施的还不够健全,因而自动化

测试还不能完全代替手工测试,比较好的解决方案是自动化测试和手工测试相

结合的方式。

3.7几种典型的软件自动化测试框架

在自动化的软件测试系统实现过程中使用框架设计可以使得测试脚本的维

护量减至最少。然而,大量的自动化测试工具均采用传统的“录制一回放”模

型,导致了较高的脚本维护量,因为测试数据在测试脚本程序中是以硬编码方

式实现的。此外,工具内建的测试用例除了测试应用程序的图形用户界面,实际

上并没有其它用处。因此,如何选择一个合适的测试自动化框架,是一个自动化

测试小组开始启动前需要最优先考虑的一个问题。

一个自动化测试框架就是一个由假设、概念以及为自动化测试提供支持的实

践的集合。以下描述五种基本的自动测试框架:模块化测试脚本框架,测试库构

架框架,关键字驱动/表驱动测试框架,数据驱动测试框架,以及混合测试框架。

可以根据实际需要去考虑采用其中的一种测试框架而不是仅仅依赖于一个简单

的捕获工具。同时,这些框架是了解自动测试框架以及根据自己的需要和经验来

设计自动测试框架的基础。

1.模块化测试框架

模块化测试脚本框架(TEST MODulARITY FRAMEWORK)需要创建小而独立的可以描述的模块、片断以及待测应用程序的脚本。这些树状结构的小脚本组合起来,就能组成能用于特定的测试用例的脚本。

在五种框架中,模块化框架是最容易掌握和使用的。在一个组件上方建立一

个抽象层使其在余下的应用中隐藏起来,这是众所周知的编程技巧。这样应用同

组件中的修改隔离开来,提供了程序设计的模块化特性。模块化测试脚本框架使

用这一抽象或者封装的原理来提高自动测试组合的可维护性和可升级性。

2.测试库框架

测试库框架(Test Library Architecture)与模块化测试脚本框架很类似,并且具有同样的优点。不同的是测试库框架把待测应用程序分解为过程和函数而不是脚本。这个框架需要创建描述模块、片断以及待测应用程序的功能库文件。

3.关键字驱动或表驱动的测试框架

对于一个独立于应用的自动化框架,关键字驱动(KEYWORD DRIVEN)I9LJJ 试和表驱动(TABLE DRIVEN)测试是可以互换的术语。这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似。在一个关键字驱动测试中,把待测应用程序的功能和每个测试的执行步骤一起写到一个表中。

这个测试框架可以通过很少的代码来产生大量的测试用例。同样的代码在用

数据表来产生各个测试用例的同时被复用。

4.数据驱动测试框架

数据驱动(DATA DRIVEN),LJ试是一个框架。在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。这类似于表驱动测试,在表驱动测试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。然而,数据驱动测试不同于表驱动测试,尽管导航数据并不包含在表结构中。在数据驱动测试中,数据文件中只包含测试数据。

这个框架意图减少需要执行所有测试用例所需要的总的测试脚本数。数据驱

动需要很少的代码来产生大量的测试用例,这与表驱动极其类似。

5.混合测试自动化(Hybrid Test Automation)框架

最普遍的执行框架是上面介绍的所有技术的一个结合,取其长处,弥补其不

足。这个混合测试框架是由大部分框架随着时间并经过若干项目演化而来的。

3.8自动化测试工具的比较

智能运维:浅谈持续集成( CI)、持续交付(CD) 和软件测试

导读:浅谈CI/CD 和软件测试 知其然,知其所以然。相较于DevOps而言,CI/CD是一个相对具象的概念。在IT 企业中,CI/CD的应用愈加广泛,成为推动软件研发活动的重要基础设施服务,同时推动DevOps 模式的实际落地。 什么是CI/CD 在实践CI/CD 相关内容之前,我们有必要先认识下什么是CI/CD。 一般传统或者狭义、普遍的CI/CD,是指持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)。而更加广义、全面的理解,是指持续集成(Continuous Integration,CI)、持续测试(Continuous Testing,CT)、持续交付(Continuous Delivery,CD)和持续部署(Continuous Deployment,CD)四个方面。通常,一个软件开发的流水线如下图所示。 ?Design:这一阶段完成软件开发的需求分析和设计。 ?Develop:这一阶段完成软件开发的功能代码,一个最佳实践是采用测试驱动开发(TDD)的方法,测试代码和功能代码的编写同时 进行。需要注意的是,在Develop 阶段也会运行单元测试和其他 小型测试。 ?Test:这一阶段完成软件的各项大型或专项测试,比如界面测试、API 测试、性能测试和系统测试等。

?Release:这一阶段完成软件产品的发布,并交付给用户使用。 持续集成(Continuous Integration) 随着敏捷开发的发展,持续集成在软件项目活动中也日益成为主流。顾名思义,持续集成是指每日频繁地(比如一天多次)将代码集成到主干分支中。强调通过集成和测试的速度,快速给出一个集成的结果(是失败还是成功),在代码集成之前,必须先通过自动化测试验证,只要有一个测试用例失败,就不能集成。 Martin Fowler 说过,“持续集成并不能消除Bug,而是让它们非常容易被发现和改正”。这也正是持续集成的真谛所在。 敏捷开发的核心是指整个软件开发活动被划分成一系列短的迭代过程,每个迭代完成一定数量的功能,迭代周期应该尽量短。在软件开发需求已经确定的情况下,迭代应该由测试驱动开发(TDD)和集成反馈来驱动。只有这样,才能为质量持续改进奠定一个良好的基础。

Selenium安装以及简单的自动化测试用例

Selenium安装以及简单的自动化测 试用例 中科软科技股份有限公司 2013年4月 V1.0.0

关于本文档 说明:类型-创建(C)、修改(U)、删除(D)、增加(A);

目录 目录 (3) 1.Selenium介绍 (3) 2.相关组件 (3) 3.启动seleniumRC (4) 4.简单测试用例 (4) 4.1在火狐浏览器上下载并打开selenium IDE (5) 4.2录制测试用例 (6) 4.2.1 录制 (6) 4.2.2 检查 (6) 4.2.3 语言转换 (6) 4.2.4 准备Eclipse环境 (7) 4.2.5 运行 (9) 1.Selenium介绍 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。 功能: ●测试直接在浏览器中运行,就像真实用户所做的一样,从终端用户的角度测试应用程序。 ●使浏览器兼容性测试自动化成为可能。 ●使用简单,可生成多种语言的用例脚本。 2.相关组件 ●Selenium IDE:一个Firefox插件,可以录制用户的基本操作,生成测试用例。随后可以 运行这些测试用例在浏览器里回放,可将测试用例转换为其他语言的自动化脚本。

●Selenium Remote Control (RC) :支持多种平台(Windows,Linux,Solaris)和多种浏览器(IE, Firefox,Opera,Safari),可以用多种语言(Java,Ruby,Python,Perl,PHP,C#)编写测试用例。 ●Selenium Grid :允许Selenium-RC 针对规模庞大的测试案例集或者需要在不同环境中 运行的测试案例集进行扩展。 3.启动seleniumRC 官网下载:https://www.360docs.net/doc/c56241022.html,/download/。打开cmd,进入RC存放文件夹。在命令行输入:java –jar selenium-server.jar 。 启动成功。 注意在启动RC前,确认电脑上安装JDK版本高于1.5 4.简单测试用例 以OA系统登录为例:

持续集成测试

一、概念引入 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。 在敏捷开发中,有一个很重要的实践叫做持续集成。而什么是持续集成呢?简单来说,持续集成是频繁、持续的在多个团队成员的工作中进行集成,并且给与反馈。一个典型的持续集成周期包括以下几个步骤: 1.持续集成服务器不断从版本控制服务器上检查代码状态,看代码是否有 更新。 2.如果发现代码有最新的提交,那么就从版本控制服务器下载最新的代码。 3.等代码完全更新以后,调用自动化编译脚本,进行代码编译。 4.运行所有的自动化测试。 5.进行代码分析。 6.产生可执行的软件,能够提供给测试人员进行测试。 测试是持续集成流程中重要的一环,也是区别去传统的软件开发流程中的一个重要的标志。为什么要有持续集成测试呢? 每天,程序开发人员将各自开发的代码上传到配置管理工具(如SVN、VSS)中,而配置管理工具会记录下谁在什么时间上传了什么代码文件。随后,持续集成工具会定期(可以是几个小时、半天,或者一天,由使用者自己定义)向配置管理工具询问,从上一周期到现在是否有代码上传。如果有,则下载到持续集成工具中进行集成。之后,持续集成工具会调用构建工具代码编译、自动化测试,以及执行静态代码检查。如果这几项工作执行成功,则打包复制到应用服务器(如Weblogic)上执行重新发布,并形成代码检查与测试等报告;如果执行失败,则及时通过邮件通知管理者,并记录相关日志。 配置管理工具 毫无疑问,配置管理工具对持续集成工具来说是绝顶重要的,它是所有最新代码的来源。持续集成工具会定期向配置管理工具询问代码是否有更新。只有有了更新,持续集成工具才会去完成后续的工作,否则就没有了意义。目前在Java开发项目中,最主流的无疑是Subversion(简称SVN)。SVN是对CVS的升级,它通过插件的形式被集成到开发工具中,并且提供了更加方便的上传下载操作,使开发人员最厌恶的上传下载操作变得简便。SVN的另一个巨大贡献是改变了VSS 那样的串行修改模式。众所周之,VSS的版本管理思路就是串行修改模式,即对于同一个文件只能一个人修改,其他人不能修改。这样的模式对应大规模团队开发来说无疑是非常蹩脚的。SVN改变了这种模式,同一个文件可以多人并行操作,但同时SVN又提供了强大的版本冲突处理机制,当并行操作的多人各自提交版本时,通过版本冲突处理机制可以顺利的合并版本,使最终形成统一版本。

持续集成与测试自动化

持续集成与测试自动化 https://www.360docs.net/doc/c56241022.html,原创作者:黄良生 一、背景 我从毕业到现在, 曾在大小不同的三个公司就职: 有民营的、有外资的、也有上市公司。但以前大多都是做项目,从事软件开发工作,绝大部分公司对测试都不重视,即使有也没有成规模,更谈不上建立测试体系。总之,重开发轻测试的管理思想在中国延续了几十年、并且还要继续,看看他们给测试工程师开的低工资和老师在课堂上讲到测试时一笔带过就知道测试被中国的老板所忽略。 最近两年,我从事CRM软件产品的测试、项目管理工作。由于公司对软件的质量要求特别高,这必然引起了大家对测试工作的重视,不但要求有强大的测试团队,该团队必须具备在业务方面、测试技能方面的专业水平,而且在软件开发过程方面经常由于测试而作持续不断地调整。 幸运的是,随着软件开发技术和工具的提高,软件工程和软件过程实践的推广,软件测试日益得到重视和专业化。我从事测试工作期间,一直研究CMM、测试理论、自动化测试工具,并建立了一套完整的测试体系。 在此并不介绍整个测试体系,而是介绍测试方面最值得探讨的部分:持续集成与测试自动化。目的是与大家共同进步。当然已经有很多关于持续集成和自动化测试方面的介绍,但我要介绍的不只是持续集成,也不只是自动化测试,而是测试如何的自动化. 二、测试自动化 自动化测试就是希望能够通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。自动化测试的目的在于发现老缺陷。而手工测试的目的在于发现新缺陷。 测试自动化涉及到测试流程、测试体系、自动化化编译、持续集成、自动发布测试系统以及自动化测试等方面整合。也就是说要让测试能够自动化,不仅是技术、工具的问题,更是一个公司和组织的文化问题。首先公司从资金、管理上支持您,其次要有专门的测试团队去建立适合自动化测试的测试流程、测试体系;其次就是把原代码从受控库中取出、编译、集成、发布可运行系统、进行自动化的单元测试和自动化的功能测试的过程。 (一)、自动化测试的好处 1、对新版本执行回归测试--测试每个特征 对于产品型的软件,每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。 2、更多更频繁的测试--沉闷、耗时 我们的产品向市场的发布周期是3个月,也就是我们的开发周期只有短短的3个月,而在测试期间是每天/每2天都要发布一个版本供测试人员测试,一个系统的功能点有几千个上万个,人工测试是非常的耗时和繁琐,这样必然会使测试效率低下。 3、替代手工测试的困难--300个用户有些非功能性方面的测试:压力测试、并发测试、大数据量测试、崩溃性测试,用人来测试是不可能达到的。在没有引入自动化测试工具之前,为了测试并发,研发中心的一、两百号人在研发经理的口令:1-、2-、3!,大家同时按下同一个按钮。回想起这中情景也蛮有意思的。 4、具有一致性和可重复性 由于每次自动化测试运行的脚本是相同的, 所以每次执行的测试具有一致性, 人是很难做到的. 由于 自动化测试的一致性,很容易发现被测软件的任何改变。 5、更好的利用资源--周未/晚上 理想的自动化测试能够按计划完全自动的运行, 在开发人员和测试人员不可能实行三班倒的情况下, 自动化测试可以胜任这个任务, 完全可以在周末和晚上执行测试. 这样充分的利用了公司的资源,也避免了

构建robotium+jenkins+TMTS可持续集成自动化测试

Windows下构建robotium+jenkins+TMTS可持续集成自动化测试 前言 TMTS是淘宝的自动化测试构架,优缺点都较为明显 优点:最主要的就是已经实现出错截屏并提供日志 缺点:比较小众化,遇到问题也无人解答 自动化测试终究是要能够持续集成才能有更大的意义的,利用 robotium+jenkins可以实现集成测试,但此时要想得到出错截屏加日志就麻烦了。 TMTS主要由三部分组成 1.TmtsFramework进行自动化用例编写 2.TmtsToolkit进行出错截屏与获取日志报告 3.hudson进行apk包的自动打包、安装,并进行用例执行 TmtsFramework编写用例其实与robotium编写用例一样都是基于instrument 的,因此想用robotium编写用例,而同时又想得到出错截屏与日志报告 就完全可以使用robotium+TmtsToolkit 因此就可以用robotium+jenkins+TmtsToolkit构建可持续集成自动化测试Windows下环境搭建 软件安装 1.安装jdk 2.安装tomcat https://www.360docs.net/doc/c56241022.html,/download-70.cgi 3.安装ant https://www.360docs.net/doc/c56241022.html,/bindownload.cgi 4.安装jenkins https://www.360docs.net/doc/c56241022.html,/ 下载war包,放于tomcat的webapps目录下,启动tomcat将自动部署 5.安装Android SDK

https://www.360docs.net/doc/c56241022.html,/sdk/index.html 搭建android开发环境,包括eclipse,ADT等 6.下载TMTS架构中的athena-1.1.jar、ddmlib.jar包 https://www.360docs.net/doc/c56241022.html,/p/TMTS/src/branches/V1.1/trunk/android/AthrunTe st/ 当然最好把整个TMTS下载下来 环境变量PATH添加 \java\apache-ant-1.8.2\bin\ \java\android-sdk-windows\tools\ \java\android-sdk-windows\platform-tools\ \Java\jdk1.6.0_07\bin\ 添加ANDROID_HOME 添加JAVA_HOME 添加ANT_HOME 有什么命令找不到了就加下PATH变量 tomcat启动 运行\java\apache-tomcat-7.0.8\bin\startup.bat jenkins配置 浏览器访问 http://localhost:8080/jenkins 插件安装 Hudson Subversion Plug-in,jenkins的svn插件 Android Emulator Plugin,android模拟器插件 JUnit Attachments Plugin,junit测试报告附件插件 Email-ext plugin,邮件扩展插件。此处说明下,默认Jenkins只会发送构建失败的邮件,我们需安装此插件才能自定义不同场景 除了这些之外还可以安装其它一些插件,那样可以使得Jenkins非常强大,需要什么安装什么 构建build.xml文件,使用ant自动打apk包,构建build.xml文件及ant打包可以参考其它文章 构建任务 1.使用jenkins新建任务时,填入任务名称,选择“构建一个自由风格的软件项目”,以后新建类似任务时则可以选择“复制现有任务”

开源自动化测试工具selenium的使用

开源自动化测试工具selenium的使用 (玉米猫) 一Selenium概述: Selenium是现在使用最为广泛的一款开源自动化测试工具,也是非商业支持的稳定性易用性最好的一款自动化测试工具。和由HP提供强大商业支持的QTP相比,selenium不仅在软件投资上有比较大的优势,在针对web测试的稳定性上也有绝对的优势。以下介绍的内容会通过和QTP在各方面的比较中进行,并针对简单的测试样例,对基本的使用进行简单说明。 二Selenium的组成: 和QTP等其他工具类似,selenium也有几个组件组成,同时在使用的时候还需要一些开发的IDE平台进行支持。 对于初步的简单使用,需要先掌握seleniumIDE,RC的基本使用,以及对象识别方式Xpathe的基本知识。 1)seleniumIDE: selenium和QTP类似,同样需要先进行一定的脚本录制工作,而它默认支持的录制浏览器是firefox,IDE就充当了一个脚本记录的工作,它的表现形式为firefox的一款插件。 它可以记录准备过程中,用户在firefox上的制定网址下所做的一切操作,并转化为自己需要的一种开发语言,包括:java、perl、PHP、C#、Ruby等等。 2)RC: RC是selenium的特色组件,它通过从底层向不同的浏览器发出动作指令,达到用脚本控制web的效果,和QTP的activeX驱动的模式有着本质的不同,只要浏览器的动作指令原理不发生本质性的变化,就可以利用selenium达到自动化测试的效果,不会由于出现新的浏览器,还要等待HP重新开发相应的activeX控件。

3)其他: 由于selenium的非商业支持,所以很多类似于QTP中的组件都使用了firefox插件的办法得到了补充。 Firebug:帮助用户对页面上的对象进行识别,它可以准确捕捉到任何一个可见元素和不可见元素,同时支持由对象找代码和由代码找对象的使用方法,非常类似于QTP的spy 和控件高亮显示功能。 Xpather:帮助用户利用xpath标记对象的位置信息,根据xpath的实现方式,可以将页面上的每一个控件元素做唯一性标识,非常类似于QTP的对象库,区别在于Xpath只记录元素的位置样式属性,不会记录截图。 三Selenium的简单使用: 1)测试的准备工作: 这里所说的准备工作,只一个自动化测试的准备,预计基本的测试用例等内容已经准备完成。 假如被测系统为ADCPX: 首先:用firefox打开被测系统的首页,启动IDE插件。 需要注意的是,IDE的baseUrl一定是当前要测试的web首页,默认生成的第一个testcase 的名称可以通过属性进行更改。一个IDE中可以录制或生成多个testcase。

持续集成:自动化测试篇

持续集成:自动化测试篇 前言 如果组件A\B\C的可靠性都为90%,是否说明了A\B\C组成的系统整体可靠性为90%?其实不是,实际结果是90% * 90% * 90%* = 73%。大部分软件系统都由几百个甚至几千个对象组成,如果包含了100个组件的线性系统,每个组件的可靠性均为99%,那么整个系统的可靠性只有37%。 如果想要构建一个在服务层面承诺到达100%或接近100%的软件系统,则必须在单个对象层面上确保可靠性。如果不能从最低层面确保并测量可靠性,就不可能在系统层面上达到要求。 这就要求我们在每当系统发生变更时测试都必须执行,并且这些测试不单单是单元测试,还应包括组件测试、系统测试等,在日常的开发过程中,反复进行多种测试无疑是枯燥乏味的,在CI系统中包含持续测试则能让你轻松解决这一烦恼。 自动化单元测试 “单元测试”是验证软件系统中所有小元素的行为,这些小元素通常都是一个类。有时单元测试和被测试的类之间一对一的关系也会被放大,因为一些测试的类耦合程度较高。 单元测试没有外部依赖关系,不会依赖于文件系统和数据库。因为编码和看到单元测试之间的时间很短,所以单元测试是一种有效的除错方法。在进行持续集成过程的单元测试时,可以利用NUnit或JUnit单元测试框架,让单元测试自动化。 真正的单元测试应该少于1秒的时间内完成。如果花费的时间较长就需要检查一下,它是否失败了,或者它实际是一个组件级测试。配置自动化测试需要一些代价,但是执行这些测试的资源代价可以忽略不计。

自动化组件测试 “组件测试”或“子系统测试”验证的是系统的各个部分,可能需要安装整个系统或某些外部依赖关系,如数据库、文件系统、网络终端等。 典型的组件测试需要底层数据库支持,甚至可能跨越架构边界,这些测试涉及更多对象,每个测试的代码覆盖率也更大,通常比单元测试需要花更长的时间,如果用到数据库可以使用DbUnit\NDbUnit实现自动化。 组件测试执行的时间比较长,可以作为次级构建的一部分来执行或定期执行。 自动化系统测试 “系统测试”允许整个软件系统,需要完整安装系统,系统测试比组件测试执行时间更长,通常涉及多个组件。 如果事先已成功执行单元测试和组件测试,则已解决一些底层问题,只需要计划定期执行这个耗时较长的测试就可以。也可以作为次级集成构建的一部分,在下班后或夜间执行。 自动化功能测试 “功能测试”也称为“验收测试”,从用户的角度测试应用程序,意味着测试将模仿用户行为,通常是自动化测试套件中执行时间最长的。 开发者测试分组 通过将测试分组,按不同的时间间隔来执行较快(如单元测试)和较慢的(如组件测试)测试,顺序可以设置为:单元测试、组建测试、系统测试、功能测试。 可以“告诉”CI系统在恰当的时候执行每一类测试,构建次数完全可管理,测试定期执行,而不是当它们需要很长时间执行时就抛弃它们。 为缺陷编写测试

持续集成是什么

持续集成是什么 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI)。 本文简要介绍持续集成的概念和做法。 一、概念 持续集成指的是,频繁地(一天多次)将代码集成到主干。 它的好处主要有两个。 (1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。 (2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。 持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。Martin Fowler说过,"持续集成并不能消除Bug,而是让它们非常容易发现和改正。" 与持续集成相关的,还有两个概念,分别是持续交付和持续部署。 二、持续交付 持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。 持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。 三、持续部署 持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。 持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。 持续部署的前提是能自动化完成测试、构建、部署等步骤。它与持续交付的区别,可以参考下图。

(图片来源) 四、流程 根据持续集成的设计,代码从提交到生产,整个过程有以下几步。 4.1 提交 流程的第一步,是开发者向代码仓库提交代码。所有后面的步骤都始于本地代码的一次提交(commit)。 4.2 测试(第一轮) 代码仓库对commit操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试。 测试有好几种。 单元测试:针对函数或模块的测试 集成测试:针对整体产品的某个功能的测试,又称功能测试 端对端测试:从用户界面直达数据库的全链路测试 第一轮至少要跑单元测试。 4.3 构建 通过第一轮测试,代码就可以合并进主干,就算可以交付了。 交付后,就先进行构建(build),再进入第二轮测试。所谓构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等等。 常用的构建工具如下。 Jenkins Travis Codeship Strider Jenkins和Strider是开源软件,Travis和Codeship对于开源项目可以免费使用。它们都会将构建和测试,在一次运行中执行完成。 4.4 测试(第二轮) 构建完成,就要进行第二轮测试。如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然,这时构建步骤也要移到第一轮测试前面。 第二轮是全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试。所有测

selenium自动化测试的框架

selenium 自动化测试的框架 自动化测试的框架 软件自动化测试 style="font-family: 宋体 ;mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin;mso-fareast-font-family: 宋体 ;mso-fareast-theme-font: minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-the me-font:minor-latin"> 个阶段。 自动化测试的框架 软件自动化测试的框架和工具的发展大致将经历以下4个阶段。

浅谈持续集成构建在互联网软件测试项目中应用与分析

浅谈持续集成构建在互联网软件测试项目中应用与分析the Application of Continuous & build Integration in Internet Software Testing Project and Analyzing 阿里巴巴(中国)网络技术有限公司王亮 Alibaba(Chinia)Technology Co.,Ltd. Jonas.Wong 【摘要】:本文将介绍持续集成在互联网软件项目中的应用及案例分析,主要针对互联网行业软件项目过程中的软件测试效率和质量的研究与实践;在当前Web2.0时代,笔者抓住互联网行业的软件测试特性,在软件项目的开发过程中运用持续集成构建的思想来统一规范、流程和管理,不仅提升项目在提测之前的软件版本质量,也有利于软件项目过程的效率和质量风险控制。在浅谈持续集成及工具在项目中的应用同时,也结合笔者从事互联网软件测试的工作经验,进一步阐述与总结在软件测试过程的持续集成带来的益处与不足。 笔者会先介绍当前互联网的软件测试与传统的软件测试区别与联系,然后针对互联网软件测试的特性再结合持续集成工具思想的运用,最后将比较详细的介绍Hudson持续集成构建平台在项目中的实践与分析,从而解决了在多个项目并行开发的软件项目中应该如何应用持续集成以保持项目整理开发过程的高质量和高效率问题。 【关键词】:软件测试持续集成互联网软件项目构建自动化统一代码Web2.0 ABSTARCT: A perception on constant integration application of network software testing project and analyzing, The content is mainly about constant integration application of IT software project and focus on software project testing with quality research in network line. Presently it is the time for Web 2.0, the writer grasps network feature , adopts constant integration methods unify criterion、procedure and management. Which not only enhances software version quality, but also to the benifit for software project efficiency and quality risk control. While application of constant integration and project tools, combined with writer years experience in network testing, this content will summarize advantage and shortage occuring in the constant integration procedure. Writer will show us the difference between tradition and modern methods in software testing, and software testing feature combined with the applicating on constant integration methods. Finally it is detailed introduction for Hudson constant integration adopted in projects practicing and analyzing,It solves the problems of many items application in concurrent development software testing involved how to apply constant integration to keep item procedure high quality and efficienc. KEYWORDS:software testing Constant Integration Internet software project Build Automation Uniform Code Web2.0 一、引言 在互联网信息时代,随着Internet的快速增长及Web应用的不断发展,使其快速渗透到商业、电子商务、军事、工业、教育等领域和个人生活的各个方面,对我们的生活及工作产生了深远的影响。在当今市场需求和Internet技术进步的不断推动下,Web应用日益增加,互联网的软件规模不断扩大,复杂性增加,操作易用性降低,面对互联网的用户也越来越多,因此软件的质量越来越成为人们共同关注的问题,作为保证软件质量和可靠性的重要手段,软件测试已成为互联网软件项目开发过程的重要环节。 在整个软件生命周期中每个环节都存在软件测试的活动,软件测试伴随着软件开发,以检验每一个阶段性的成果是否符合质量要求和达到预先定义的目标,尽可能早的发现问题并

Selenium自动化测试用例设计注意事项

Selenium自动化测试用例设计注意事项 UI元素映射 元素验证 等待加载 日志记录 结果收集 Selenium自动化测试用例设计注意事项(一) 自动化测试设计简介 我们在本章提供的信息,对自动化测试领域的新人和经验丰富的老手都是有用的。本篇中描述最常见的自动化测试类型,还描述了可以增强您的自动化测试套件可维护性和扩展性的“设计模式”。还没有使用这些技术的、有经验的自动化测试工程师会对这些技术更加感兴趣。 测试类型 您应该测试应用程序中的哪些部分这取决于您的项目的各种影响因素:用户的期望,时间期限,项目经理设置的优先事项等等。但是,一旦项目边界定义完成,作为测试工程师,你必须做出要测试什么的决定。 为了对Web应用的测试类型进行分类,我们在这里创建了一些术语。这些术语并不意味着标准,但是这些概念对web应用测试来说非常典型。 ● 测试静态内容 静态内容测试是最简单的测试,用于验证静态的、不变化的UI元素的存在性。例如: → 每个页面都有其预期的页面标题这可以用来验证链接指向一个预期的页面。 → 应用程序的主页包含一个应该在页面顶部的图片吗 → 网站的每一个页面是否都包含一个页脚区域来显示公司的联系方式,隐私政策,以及商标信息→ 每一页的标题文本都使用的

标签吗每个页面有正确的头部文本内吗 您可能需要或也可能不需要对页面内容进行自动化测试。如果您的网页内容是不易受到影响手工对内容进行测试就足够了。如果,例如您的应用文件的位置被移动,内容测试就非常有价值。 ● 测试链接 Web站点的一个常见错误为的失效的链接或链接指向无效页。链接测试涉及点各个链接和验证预期的页面是否存在。如果静态链接不经常更改,手动测试就足够。但是,如果你的网页设计师经常改变链接,或者文件不时被重定向,链接测试应该实现自动化。 ●功能测试 在您的应用程序中,需要测试应用的特定功能,需要一些类型的用户输入,并返回某种类型的结果。通常一个功能测试将涉及多个页面,一个基于表单的输入页面,其中包含若干输入字段、提交“和”取消“操作,以及一个或多个响应页面。用户输入可以通过文本输入域,复选框,下拉列表,或任何其他的浏览器所支持的输入。 功能测试通常是需要自动化测试的最复杂的测试类型,但也通常是最重要的。典型的测试是登录,注册网站账户,用户帐户操作,帐户设置变化,复杂的数据检索操作等等。功能测试通常对应着您的应用程序的描述应用特性或设计的使用场景。 ● 测试动态元素 通常一个网页元素都有一个唯一的标识符,用于唯一地定位该网页中的元素。通常情况下,唯一标识符用HTML标记的’id’属性或’name’属性来实现。这些标识符可以是一个静态的,即不变的、字符串

Selenium自动化测试框架设计指南

TAS Design Guide Author: peng gong Table of Contents 1 TAS模型介绍 (2) 1.1 Jenkins (2) 1.2 Python (3) 1.3 Selenium (3) 1.4 脚本代码管理:svn (3) 1.5 TAS运行环境:Linux+window (3) 2 TAS Frameworks (3) 2.1 测试管理:Jenkins (4) 2.2 脚本语言:Python (4) 2.2.1 Python2.7 (4) 2.2.2 Nose (4) 2.2.3 proboscis (5) 2.3 Web驱动:selenium (5) 3 TAS部署和要求 (5) 3.1 TAS环境要求 (5) 3.2 Jenkins和selenium安装 (5) 4 TAS运行和测试 (6) 4.1 测试运行 (6) 4.2 开发调试 (6) 4.3 开发调试工具 (6) 5 Code Frameworks (7) 5.1 Code结构 (7) 5.2 team模块举例 (7) 5.3 编码规范: (7) 5.4 A Simplest Example Script (8)

1.2 Python Python最大优点就是比其他语言更简单易学。同时Python自带的和大量开源的测试框架使得TAS系统架构更简单和便捷。TAS Frameworks使用了python自带的unittest拓展的开源nose和proboscis模块。 1.3 Selenium Selenium selenium是跨平台的web测试工具包。TAS选择selenium的原因在于: Selenium具有跨平台,跨浏览器的特点。 Selenium支持多种编程语言和测试框架。 Selenium工具包 TAS中使用了selenium RC驱动Web,开发工程师在开发script过程中可以使用selenium IDE和firebug等工具。 selenium运行 TAS中selenium有两种工作方式:服务器端和QA客户端。selenium运行在服务器端Jenkins和Selenium 交互,后者启动浏览器完成测试,返回结果给Jenkins。selenium运行在QA客户端的好处在于可以并行运行多个TAS测试任务。 1.4 脚本代码管理:svn TAS系统的脚本代码使用svn进行管理。测试中,Jenkins上配置svn的路径,Jenkins job开始构建时从svn中checkout最新版本进行测试。 1.5 TAS运行环境:Linux+window TAS系统的Jenkins安装在Server端的Linux/Ubuntu中,同时selenium也可以部署在Server上。测试工程师的PC上部署的selenium一般用于debug调试使用。 2 TAS Frameworks TAS框架主要由4部分组成,测试集成管理的Jenkins,Python脚本以及python 包,Selenium驱动模块和版本管理svn。详细模块拓扑图如下:

持续集成(第二版)

持续集成(第二版)* Martin Fowler(英)雷镇(中) 持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他 们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成 会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。许 多团队发现这种方法可以显著减少集成引起的问题,并可以加快团 队合作软件开发的速度。这篇文章简要介绍了持续集成的技巧和它 最新的应用。 我还可以生动记起第一次看到大型软件工程的情景。我当时在一家大型英国电子公司的QA部门实习。我的经理带我熟悉公司环境,我们进到一间巨大的,充满了压抑感和格子间的的仓库。我被告知这个项目已经开发了好几年,现在正在集成阶段,并已经集成了好几个月。我的向导还告诉我没人知道集成要多久才能结束。从此我学到了软件开发的一个惯例:集成是一个很耗时并难以预测的过程。但是事实并非总是如此,我的ThoughWorks同事所做的项目,以及很多其它遍布世界各地的软件项目,都不会把集成当回事。任何一个开发者本地的代码和项目共享基准代码的差别仅仅只有几小时的工作而已,而且这只要几分钟的时间就可以被集成回去。任何集成错误都可以很快被发现,并被快速修复。这鲜明的差别并非源于昂贵和复杂的工具。其中的精华蕴含于一个简单的实践:使用统一的代码仓库并频繁集成(通常每天一次)。 当我向别人介绍持续集成方法时,人们通常会有两种反应:“这(在我们这儿)不管用”和“做了也不可能有什么不同”。但如果他们真的试过了,就会发现持续集成其实比听起来要简单,并且能给开发过程带来巨大的改变。因此第三种常见的反应是:“我们就是这么做的,做开发怎可能不用它呢?” *本文选自https://www.360docs.net/doc/c56241022.html,/(英),https://www.360docs.net/doc/c56241022.html,(中).修改日期:2010-03-17.

相关文档
最新文档