游戏项目中的自动化测试和持续集成

游戏项目中的自动化测试和持续集成
游戏项目中的自动化测试和持续集成

游戏项目中的自动化测试和持续集成

现在,许多游戏项目要么跳票严重,要不就是发布时Bug多多。当然,这样的现象并不仅存于游戏工业。例如,根据2001Standish集团发表的那份声名狼藉的报告“极度混乱”所表述的,70%以上的软件项目要么被取消,要么严重的超时和超支。然而,游戏是软件开发复杂性的最佳代表,不同技能的人需要协同工作,这也就是某些人所说的游戏项目中高风险因素所在。

软件项目延期、Bug满天飞和失败的原因是多种多样的,但看起来除了随产品特性不断变化之外,测试和品质管理是永恒的问题。以我们的经验来看,相当多数的游戏开发工作室完全依靠人工的方式来测试游戏引擎、开发工具和游戏代码,几乎没有采用自动化过程测试。很巧,在2002GDC的圆桌会议:游戏中的纯软件工程,只有18%的与会者表示他们参与的项目采用了自动化测试。

在2000年,我们的客户,当时新成立的中间件公司对我们的3D引擎的稳定性和大量的BUG 抱怨频频,我们第一次想到了自动化测试。直到那时,每当完成一个新特征,我们还是依靠人工测试,并且使用这些特征开发出技术演示供市场部使用。我们在彻底分析了情况后得出以下结论,我们的软件质量问题主要和我们测试方法有关:

*人工测试不够全面和彻底,因为它仅仅花费了很多时间。代码在修改或添加之后,它本应运行预定义的人工测试集来保证修改不会产生新的问题。人工测试花费的时间越来越多,并给开发者带来挫折感,打击他们执行测试的积极性。而且,测试的工作量使得开发者不愿意改进或优化现有的代码。

*当开发者测试他们自己的代码时,他们总是不愿意(潜意识?)执行最苛刻的测试用例,因此就导致了最有可能出错之处也是最不可能被全面测试到这样的情形。

因此,我们决定采用自动化测试,从开发一个新SDK部件开始。结果是鼓舞人心的,最终我们把它推广到所有的SDK部件开发中去。测试框架极限编程,由Kent Beck和Martin Fowler总结的一系列方法和经验,带来了自动化测试的流行。一般来说,自动化测试指无需用户干预,用来验证软件产品中的功能子集的代码和数据。它可以是用来测试某个特定类方法(通常称为单元测试),也可以是用来测试程序功能性的集成测试(功能测试)。

为了促进自动化测试进程,有许多开源代码的单元测试框架,比如CPPunit(C++专用)或Nunit(。net专用)。这些测试框架提供了GUI来运行测试集并提供测试结果反馈。根据你的项目,也许需要根据你的游戏进行一些额外的功能扩展和自定义,例如支持跨平台。这些测试框架的内容,一个单元测试对应一个函数,测试类由多个单元测试组成,并且包含一个开始和结束测试的方法(例如载入和卸载一幅地图)。这些测试类可以放在分离的执行文件中,例如DLL文件,也可以与主项目在一起。除此之外,测试类应该存放在产品代码之外的文件中,这样的话,他们就可以很方便的从版本发布中移除。

物理引擎的简单测试代码,如果任何一个VTEST条件没有满足,那么测试就失败。该测

什么?当要决定测试的范围时,实用第一。一般来说,为简单的功能编写单元测试是没有意义的,比如常见的getter和setter方法。为了让自动化测试物有所值,被测试的代码至少应该是可能会产生错误的,比如,发射一束穿透游戏场景的光线并且返回它穿过的任何几何物体的方法(光线测试),然后将返回的结果与编写测试用例的作者提供的预期结果作比较。

到底是只为类的公用接口编写测试用例(黑盒测试)还是要兼顾类的私有成员(白盒测试),是一个有争议的问题。通常来说,黑盒测试比白盒测试粗糙,它们只能检查一个操作的最终结果,不能检查内部中间状态,它们对于被修改的测试代码比较迟钝。刚才提到的光线测试功能可能被全部重写(比如原先的版本运行效率不够),但是它返回的结果没有变化。这时,白盒测试用例就需要跟着重写,然而黑盒测试可以继续用来检测代码修改后,所产生的结果是否与原先一致。

因此,我们认为自动化测试中,测试范围只要包括类的公有成员就够了,毕竟,类的内部修改比它接口修改要频繁得多。

回归测试

特别是在游戏开发领域,大多数情况下,把测试结果和用例编写者提供的数据手工作比较是不太现实的。例如,检测与复杂的几何体碰撞的交点,人工提供相关测试数据几乎不可能。相反,将测试结果与早期代码产生的结果数据相比较,被称为“回归测试”。用例编写者可以评审参考数据,例如,使用简化图形的碰撞物体,如果被证实是正确的,它就可以一直用于测试。这样,自动化测试可以帮助你确认新代码产生的结果与原先的一致。

代码功能测试会生成非常复杂的输出数据,比如游戏的图形渲染引擎,回归测试是唯一可行的自动化测试。以图形渲染引擎为例,所有图形测试以输出最终平台相关的图形文件为结果。一旦自动化测试开始运行,渲染出来的图形文件与样本图形文件逐一像素的进行比较,如果有差异,那么测试失败。为了减少样本图形文件的存占用,你可以使用图形快照来进行测试。

图形回归测试的优势在于即使是肉眼难以发现的微小差异也不会被漏掉。除非人们对这个场景非常熟悉,否则很难会有人注意到场景中缺失的一个阴影或一个物体或者某个光源的R值与B值被错换了。而回归测试就不会放过任何一个这样的错误。

必须注意到,任何情况下,回归测试的样本数据都是自动生成的。样本数据也许是平台相关,特别涉及到渲染输出的时候,因此,它也许要被生成多次,即使是这样,当渲染通道发生变化导致生成的图形文件有所改变,样本数据也要重新生成。为了不打击开发者编写回归测试的积极性,要做到只需点击框架用户界面上一个按钮就可以重新生成新的参考数据。

如何把所有的整合在一起

包括游戏在内的所有应用,完整的测试集合包括单元测试和回归测试。单元测试适合于测试底层功能性、基础库文件和平台类库。上层的各种功能特征集成测试可以使用回归测试。根据结果,你可以有选择的重构或优化你的逻辑或引擎代码,回归测试一旦失败,你会马上发现出问题的地方,单元测试失败可以让你精确的定位出错之处。

知道代码被你编写的自动化测试覆盖得范围是非常有好处的,你可以使用代码覆盖率调查工具(BullseyeCoverage/AQtime)。代码覆盖率分析会告诉你,你的代码哪些被调用,也可以提示你测试集合中的疏漏之处。测试覆盖率应该是多少,无法精确定量,尽管它取决于被测试的代码。细小的方法无需测试,调试用的函数也不必测试。并且,几乎所有的项目都会包括一些“死”代码,也就是不会被调用到的代码,那么,这些代码自然也不用测试。总而言之,现实中,我们见过的使用自动化测试的游戏和中间件项目中测试覆盖率大致是55%到70%。

编写友好的测试代码

必须承认,并不是所有的代码都能使用自动化测试。以单元测试为例,严格的面向对象,良好的类和函数模块化封装设计可以大大提高它的测试效率。类的接口越多,为它编写的单元测试就越多。同样,过多的使用C++的友元也会增加编写的难度,甚至无法为该类编写(黑盒)单元测试用例。

在写代码的时候,要时刻牢记保持良好的测试性。在开发过程中,就会变成可行但是单调乏味的工作,有时候它需要很好的结构性。要在游戏开发中使用,以下几点必须牢记:

*所有的回归测试都取决于明确的行为。比如,使用随计算法的寻径系统可以提供一个初始化随机种子的公共方法使得角色的行动决策更复杂多变。这个方法在随后的测试中可以被用来确保角色始终选取同样的路径。

*同样,回归测试中要避免与帧数相关的情况;否则,有真实物理特性的物体或渲染输出也许会和以前的数据不同,特别是当结果来自不同的机器或者不同的编译条件(debug和release)。在测试时,使用恒定的虚拟帧数就可以避免这样的问题。

*严重依赖于用户输入的软件很难测试,比如游戏内置的编辑系统或者游戏工具。这样的话,把UI和逻辑代码严格的区分开会有所帮助。在我们的游戏工具里,UI界面里每个用户动作会执行一条或多条简单的脚本指令。每条脚本指令可以很明确的重现用户的原意。这样,测试用例可以简单的执行这些指令并且与样本数据作比较就可以(比如导出地形文件)。

也可以使用GUI捕捉工具来测试UI,但我们发现这并不是个好办法。UI会经常改变,哪怕一个按钮仅仅移动几个像素也会使捕捉软件失效,GUI捕捉工具也许会帮倒忙。

关于测试的疑问:我们真的可以节省时间么?

多数情况下,一个开发团队想要在开发过程中使用自动化测试,大多数成员都会对它抱以质疑的态度。毕竟,与其花这点时间写测试用例,还不如去写逻辑和引擎的代码。根据我们在游戏和其他领域的工作中使用自动化测试的经验来看,编写测试代码会额外增加30%工作量。初看,在时间和资金上这也许是很大的开销,然而,你要意识到这样做,省去了人工测试所花费的时间。

自动化测试可以看作在开发前期投入,在开发过程中赢利。大多数的代码修改,包括

Bug修改,都可能会引入更多问题导致程序宕机。所以,理论上说,一旦代码有所改变,就必须测试所有可能被影响的代码。自动化测试无需人工干预就可以完成,它们缩短了开发过程。而且由于自动化测试可以简单快速的发现修改的代码是否能有效地运行,因此也就鼓励开发者优化和改进现有的代码。

对我们来说,自动化测试帮助开发者编写更稳定和可靠的代码。哪怕是一开始对它抱有怀疑态度的开发成员也欣赏它所提供早期反馈的特性,在开发过程中,它也可以更早的发现Bug。开发者的工作压力和负荷随着项目的开展日益加大,尽早的发现和解决Bug也可以避免给开发关键时期带来额外的压力。

在开发Vision引擎的时候,我们收集了一些数据来研究为提高代码稳定性而实施自动化测试的有效性。2001年早期,全部依靠人工测试的引擎第一个release版本开发完成,尽管我们已经进行了很全面的测试,但是每个月,我们的在线技术支持数据库依然会收到上百个来自客户的Bug报告。2001年9月,我们对已有的引擎功能和新增的特征实施自动化测试。这样,即使我们现在的工作量很大,开发进展也很正常,每月Bug报告的数量锐减(现在大概是5到10个)。

必须强调,这些图表只是反映了单元测试用例数量和每月Bug数量两者之间的相互关系,不能将它理解为必然的因果关系。当然,从2001年到2004年,我们在如何编写健壮的代码上学到了很多,在这段时间内,开发团队的人数变动频频,但是,这些明显的差异足以说明稳定性的提升部分归功于使用了自动化测试。

游戏中自动化测试的局限性

尽管使用自动化测试对于游戏开发来说获益匪浅,但是也有其局限之处。显然,很难用它来测试游戏的平衡性,也不太可能用它来测试游戏性和画面的美观性。在这几年里,我们总结了一些编写自动化测试的要点,重点如下:

*测试最重要的模块(比如,最复杂和最常用的)。对那些最有可能出问题或者不会破坏原先设计的重构任务进行自动化测试,性价比最高。

*当上层功能性测试难以进行的时候,把精力集中在不同的子系统上。例如,你也许不能通过自动化测试来验证AI系统是否正常工作,但你可以测试当一个怪兽的体力低于一定数值的时候,它是否会“投降”。

*用压力测试来验证你的代码的强壮性。如果你的游戏在极端条件下运行的很好,比如,每秒有2000个怪兽出生和死亡,一个场景中同时放入500个有真实物理特性的物体,一幅地图轮流载入200次,那么玩家作一些异常操作时,宕机的可能性就会小很多。

*在修改Bug前,也为它编写测试用例。这样的话,可以确保这些Bug在今后的版本中不会重现。

*回归测试。例如,图像或状态比较的话,使用指定的测试场景要比使用产品地图更容易维护。如果你认为测试用产品数据可能会经常变动,那么你最好使用小的测试场景。否则,

不断的生成新的参考数据会使得开发团队产生疲倦和厌烦的情绪。

*测试用例越简单越好,不要奢望有非常大的覆盖面。搭建一个易维护和可扩展的自动化测试是一个长期的任务。一般来说,“底层”代码,例如算术、碰撞检测和渲染,更容易进行自动化测试,对于游戏性和完整的游戏测试来说,还是需要经过QA人员亲自测试。当然,QA部门的注意力也要从技术转移到与游戏性相关的问题上去。“到A房间后,因为通风口前面的箱子太高了,所以出不去”这样的报告就会取代“当我的角色转动的时候,屏幕上出现了很多扭曲的三角面”。

持续集成

在一个复杂的软件项目中引入自动化测试,你会发觉运行它也需要一定的时间,我们看到的一些项目甚至需要几个小时。如果让开发者在他们的开发用机上运行的话,测试会完全占用他们的机器,影响工作,那么结果就是他们不去运行测试用例,很显然,没有被运行的用例是没有任何价值的。

解决方法就是搭建一台或多台专用的自动化测试机。它同时还运行版本管理软件(Subversion/CVS/Perforce),一旦发现提交了新代码,那么代码就会被Check out并编译,测试用例也会自动运行。最后,系统会将测试结果报告以email的形式自动发送给最近提交代码的开发者。

完全自动化、重复的build和测试过程,这种过程每天运行多次,在极限编程中,我们把它称为:持续集成。为了更好的实行持续集成,像Cruise Control或者Anthill这样的开源代码工具可以将版本管理软件和自动build工具,例如ANT,整合起来。使用这样的工具,可以很轻松的搭建适合自己的持续集成系统。

我们发现搭建专用持续集成服务器使得开发过程变得更顺畅,开发者可以更专注于自己的工作。与此同时,测试可以被很好的运行,一旦提交了错误的代码,持续集成系统会自动通知开发者和项目经理,因此开发者也可不必为此分心。自动化,自动化!

自动化测试和持续集成的使用为我们在游戏和工具的开发上带来了极大的收益。例如,持续集成服务器根据Wiki中的变化,每天自动生成CHF(Windows帮助文件)文件。而且,使用ANT和CruiseControl来制作软件自动分发包会非常容易。这样一来,用最新的代码(或最新的tag)创建一个完整的分发包就是举手之劳。

自动化过程中的自动化测试执行,例如测试框架中的常规单元和回归测试,他们不是用来检查错误,而是用在相同环境下得到测试结果来衡量和比较引擎的性能(系统配置的结果以XML文件格式存放在版本管理软件系统上)。如果当前的结果比参考结果差很多,那么测试失败,反之,它就成为了新的参考结果。

性能测试是一种特殊的回归测试。当引擎代码被重构,我们通过它来确保修改不会降低引擎原有的性能。这样,就迫使我们时刻关注代码的运行效率和对代码的优化工作,可以避免遇到在实际运行中,速度突然变慢的现象发生。

结论

根据我们的经验,使用自动化测试和持续集成可以使开发团队工作更有效而开发出更好、稳定、简单的软件。而且,减少人工测试也可以减少开发团队的压力和工作负荷,可以在开发过程中尽早的发现Bug。

当然,自动化测试不会使你的游戏想当然成为畅销品。但毋庸置疑,它会使各类开发人员甚至玩家活得更自在。

本文由西安白癜风医院(https://www.360docs.net/doc/f114402834.html,/)网站负责人阿牧整理分享,转载请注明!

接口自动化测试方案

接口自动化测试方案 2018年4月9日 文档编号:(V1.0) 目录 目录 1测试需求及范围 (2) 1.1测试目的 (2) 1.2测试需求 (2) 2测试方法 (3) 3测试工具及框架拓扑图 (3) 3.1测试工具 (3) 3.2自动化测试拓扑图 (3) 4流程示例 (3) 5测试环境 (5)

2.1硬件配置 (5) 2.2软件配置 (5) 6测试思路 (6) 6.1通用测试场景 (6) 6.2逻辑场景 (7) 6.3断言检查 (7) 1测试需求及范围 1.1测试目的 随着公司项目的不断增大,接口的服务随之增多,回归的任务量越来越大,需要对接口进行定时回归测试来保证系统的稳定性。 1.在开发提交新的接口前进行冒烟测试,以保证系统是能够正常开展测试的 2.功能测试完成/bug回归完成后进行回归测试,保证bug修改完成后没有引入新的问题1.2测试需求 1、目前提供的接口多为Rest 规范的接口,需要使用JMeter进行自动化接口测试,核对接口入参及返回报文格式、内容的正确性,最终通过Jenkins持续集成生成测试报告。 2、对开发人员的需求 接口文档的规范,如:输入输出模板,输出类型是否全面 2测试方法 根据开发人员提供的接口访问地址、入参格式、请求格式,进行接口请求数据拼接,并查看返回结果及返回报文、响应时间,检查返回Json内容是否符合接口定义规范,是否符合预期的返回结果。

3测试工具及框架拓扑图 3.1测试工具 Jemeter+Jenkins 3.2自动化测试拓扑图 4流程示例 测试数据从csv或者txt文件里读取,包含入参、出参、预期结果/断言 用例通过jemter维护

智能运维:浅谈持续集成( 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)和集成反馈来驱动。只有这样,才能为质量持续改进奠定一个良好的基础。

持续集成测试

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

自动化测试完整案例

Appium环境搭建 随着人类消费观念转变,企业巨头间的无硝烟战场从互联网转移到移动端,为了抢占移动端用户,企业们更是绞尽脑汁,想方设法提高产品质量和增强用户体验,赢得此场战役的关键是产品质量,高质量产品更能捕获用户的芳心。但高质量产品保证的根源是高质量的测试,因此测试时关键。移动应用自动化测试是一个新的领域,移动端平台多样化(Andriod、Ios、FirefoxOS)为自动化测试带来了挑战与困难,随着Appium框架的推出,移动自动化测试进入一个崭新的阶段,自动化入门容易、上手快,轻轻松松测试多个移动平台。因Appium,移动自动化测试更加容易,现在让我为大家揭开Appium神秘面纱吧。 Appium is an open source test automation framework for use with native and hybrid mobile apps. It drives iOS and Android apps using the WebDriver JSON wire protocol. 摘自http://appium.io/ 从上面那句话我们可以窥探出Appium整个轮廓。Appium是一个开源、免费的移动端自动化测试框架,可以用来测试原生和混合移动应用,同时支持测试多种平台(Ios、Android、FirefoxOS)下应用,底层是采用WebDriver JSON Wire协议去实现的。 Appium测试环境搭建步骤: ?下载、安装JDK&配置Java环境变量 ?下载、安装SDK、ADT&配置Android环境变量 ?下载、安装AppiumForWindow ?创建安卓模拟器 ?在线安装Testng、SVN、Maven等插件 ?Appium简单案例 1、下载、安装JDK&配置Java环境变量 JDK(Java Development Kit)即Java开发工具集,一堆Java开发基本工具比如Javac.exe、Jar.exe、Javadoc.exe etc.同时JDK包含了JRE(Java Runtime Environment)即Java运行环境,因此要进行使用Java编写Appium脚本,前提是安装JDK。 Java语言以前是Sun公司推出,之前可以在Sun主页中下载JDK,但现在Sun公司被Oracle收购了,因此现在想下载JDK最好去Oracle官网下载。 JDK下载地址:https://www.360docs.net/doc/f114402834.html,/technetwork/java/javase/downloads/index.html 安装(略),傻瓜式安装,关键是Java_Home 配置环境变量: 1、右键我的电脑--属性--高级--环境变量 2、新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0 变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 3.、选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。 变量名:Path 变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 验证配置是否成功:重新打开控制台输入:java -verison,如果显示Java版本信息表示安装成功。 2、下载、安装ADT&配置Android环境变量 ADT(Android Development Kit,即安卓开发工具包)属于SDK(Software Development Kit, 即软件开发工具包)

持续集成与测试自动化

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

自动化测试复习题

一0+、单项选择题 1、下列术语中,( B )是ISTQB术语表中缺陷(Defect)的同义词。 A、Incident B、Bug C、Mistake D、Error 2、软件测试目的可以是(B )。 a.发现缺陷 b.确认软件能够正常运行 c.预防缺陷 d.直接提高产品的售价 e.减少整个产品开发周期时间 A、a,b B、a,b,c C、a,b,c,d D、所有选项 3、下列方式可以提高和改善测试人员和开发人员关系的是( B )。 A、理解项目经理工作的重要性 B、对所发现的可能的缺陷以一种中立的方式进行沟通 C、单元测试、集成测试和系统测试都由同一批测试人员来完成 D、测试人员参加代码调试 4、基本的测试过程主要由( D )活动组成。 a.计划和控制 b.分析和设计 c.实现和执行

d.评估出口准则和测试报告 e.测试结束活动 A、a, b 和c B、a, b, c 和d C、除e 以外所有选项 D、所有选项 5、以下关于测试原则的描述,正确的是( B )。 A、所有的软件测试不需要追溯到用户需求; B、完全测试是不可能的; C、测试可以显示软件潜在的缺陷; D、程序员不需要避免检查自己的程序。 6、软件测试工作应该开始于( B )。 A、Coding之后; B、需求分析阶段; C、概要设计阶段; D、详细设计阶段。 7、下面(C )是一个好的测试的特点。 a.每个开发活动都有相对应的测试行为 b.每个测试级别都有其特有的测试目标 c.对于每个测试级别,需要在相应的开发活动过程中进行相应的测试分析和设计 d.软件测试的工作重点应该集中在系统测试上 A、c,d B、a,b C、a,b,c D、a,b,c,d

构建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/f114402834.html,/download-70.cgi 3.安装ant https://www.360docs.net/doc/f114402834.html,/bindownload.cgi 4.安装jenkins https://www.360docs.net/doc/f114402834.html,/ 下载war包,放于tomcat的webapps目录下,启动tomcat将自动部署 5.安装Android SDK

https://www.360docs.net/doc/f114402834.html,/sdk/index.html 搭建android开发环境,包括eclipse,ADT等 6.下载TMTS架构中的athena-1.1.jar、ddmlib.jar包 https://www.360docs.net/doc/f114402834.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新建任务时,填入任务名称,选择“构建一个自由风格的软件项目”,以后新建类似任务时则可以选择“复制现有任务”

持续集成:自动化测试篇

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

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

自动化测试基本环境的搭建

1安装p y t h o n程序 下一步->下一步->Finish 2 配置环境变量

把python的安装路径添加到系统环境变量path中: Python安装成功 3 安装setuptools(直接装框架selenium的话容易出错,所以我下载了个工具辅助安装) 下载安装setuptools,解压setuptools压缩包后,用命令提示符转到安装包中所在的位置,执 行 install,进行安装 4 安装 pip(保持电脑联网) 打开cmd命令行,将目录切换到C:\Python27\Scripts下,输入命令“easy_install pip“安装pip;pip指令安装成功 5 安装 selenium(保持电脑联网) 进入所在路径(还是在C:\Python27\Scripts),运行命令行:pip install -U selenium。 成功安装selenium 注意!安装编译器有两种,eclipse或者pycharm,我推荐使用pycharm,安装pycharm的请转到单独的“安装并激活pycharm

教程.docx”文档。(下面的第6第7步是针对eclipse的安装配置) 6 安装eclipse 直接解压我的 找到文件夹下的运行即可使用(运行前请安装jdk) 安装和配置jdk请前往“WINDOWS 7 JDK 开发环境配置.doc”(这里装的是最新的jdk8,不然后面的PyDev无法正常安装) 7 安装pydev 使用eclipse添加Python解释器插件pydev。看我下面的安装截图步骤: Name:PyDev Location: OK之后等一下,正在联网查找......(大概1-2分钟) 选择PyDev,然后一路Next,进入安装路径选择界面,使用默认设置,然后 Finish。 Eclipse将下载 PyDev,可以从 Eclipse任务栏中看到下载的进度(时间比较久大约10分钟可以 去喝杯温水暖暖胃什么的) PyDev安装好后,需要重启Eclipse。 注意:安装过程可能警报 警告:你正在安装一个拥有未注册内容的软件。它的真实性和有效性(不能得到保证) 如果能确定软件的,这个可以不用管,OK继续安装 再次OK,相信此安装证书。 PyDev安装好之后,需要配置解释器。在 Eclipse 菜单栏中,选择Window > Preferences > Pydev > Python Interpreter ,在此配置 Python。首先需要添加已安装的解释器。 点击OK后跳出一个有很多复选框的窗口,最好全选,点击Ok。 到此PyDev就已经完成了配置,可以使用Eclipse开始编写Python。 在 Eclipse 菜单栏中,选择File > New >Project... Python的工程项目是这样子的;

持续集成是什么

持续集成是什么 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(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 测试(第二轮) 构建完成,就要进行第二轮测试。如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然,这时构建步骤也要移到第一轮测试前面。 第二轮是全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试。所有测

基于TestNG 与Selenium 的自动化测试设计与实施

基于TestNG 与Selenium 的自动化测试设计与实施 作者:congqing2011 来源:51testing 发布于2015-12-10 何软件产品在正式发布之前都必须经过严格的测试。随着计算机技术的迅速发展,软件的结构越来越复杂,同业竞争越来越激烈。为了保证软件产 重。每次例行包发布前都需要对软件现有功能进行回归验证,确保无误以后才能发给各地现场,大家都知道电信业是个发展较快的行业,需求变更也随着耐心的减退而力不从心。为了避免这种情况,对于原有功能的自动化测试显得尤为重要。 的东西不一定适合你,我们在组合自动化测试工具时,根据自己的实际情况选择了 Selenium + TestNG + DBUnit组合,我先介绍一下这几种工具 线性脚本进行回放从而达到自动化测试的目的。其优点是简单,通过录制就可以得到所需脚本。类似于录制/回放测试工具有很多,我之所以选择Linux上的 Internet Explorer、Mozilla和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台,更重要的是Selenium支持多种语言、JA

图1 本可以任意移植到多个平台,可以继承Selenium API来扩展一些我们自己的测试类,甚至可以在此基础上开发出一套属于我们自己的自动化测试平档和参考资料也相当丰富,但这些工具的局限性太大,一旦使用这些工具,你就会越来越依赖人家的东西,从而无法沉淀出自己的技术,这是我选 据驱动测试),它是Selenium IDE和Selenium RC的引擎。 行多个测试任务,极大地加快Web应用的功能测试。 um IDE录制脚本,通过Firebug辅助定位页面元素,然后通过Selenium RC来完善测试脚本。Selenium IDE是Firefox的一个插件,是可以进行依赖Firefox浏览器,如果你的程序不支持Firefox浏览器,就只能通过手工编码来完成自动化测试脚本,对于初学者来讲,如果没有这两个工具的没那么重要了。 只对JUnit比较熟悉,JUnit是 Java 语言单元测试当前的一站式解决方案。这个框架值得称赞,因为它把测试驱动的开发思想介绍给 Java开发测试已经变成一个越来越困难的任务,即 JUnit必须与其他一些补充性测试框架集成起来。而 TestNG是一个测试 Java应用程序的新框架。我选

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

浅谈持续集成构建在互联网软件测试项目中应用与分析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应用日益增加,互联网的软件规模不断扩大,复杂性增加,操作易用性降低,面对互联网的用户也越来越多,因此软件的质量越来越成为人们共同关注的问题,作为保证软件质量和可靠性的重要手段,软件测试已成为互联网软件项目开发过程的重要环节。 在整个软件生命周期中每个环节都存在软件测试的活动,软件测试伴随着软件开发,以检验每一个阶段性的成果是否符合质量要求和达到预先定义的目标,尽可能早的发现问题并

自动化测试基本环境搭建

1 安装python程序 下一步->下一步->Finish 2 配置环境变量

把python的安装路径添加到系统环境变量path中: Python安装成功 3 安装setuptools(直接装框架selenium的话容易出错,所以我下载了个工具辅助安装)

下载安装setuptools,解压setuptools压缩包后,用命令提示符转到安装包中setup.py所在的位置,执行setup.py install,进行安装 4 安装 pip(保持电脑联网)

打开cmd命令行,将目录切换到C:\Python27\Scripts下,输入命令“easy_install pip “安装pip; pip指令安装成功 5 安装 selenium(保持电脑联网)

进入pip.exe所在路径(还是在C:\Python27\Scripts),运行命令行:pip install -U selenium。 成功安装selenium 注意!安装编译器有两种,eclipse或者pycharm,我推荐使用pycharm,安装pycharm的请转到单独的“安装并激活

pycharm教程.docx”文档。(下面的第6第7步是针对eclipse的安装配置) 6 安装eclipse 直接解压我的eclipse-java-mars-R-win64.zip 找到文件夹下的eclipse.exe运行即可使用(运行前请安装jdk) 安装和配置jdk请前往“WINDOWS 7 JDK 开发环境配置.doc”(这里装的是最新的jdk8,不然后面的PyDev无法正常安装) 7 安装pydev 使用eclipse添加Python解释器插件pydev。看我下面的安装截图步骤:

持续集成(第二版)

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

自动化测试ROI分析及实践

自动化测试ROI实践 自动化测试是一项“一旦开始,就需要持续投入”的工作,所以它一直是测试领域的一块鸡肋。不做吧,好像手工测试重复得让人有些厌倦,而且手工测试时间也缩短不了。做吧,害怕投入的比回报要多。 没实施自动化的团队有各种各样的困扰。有的说:“项目有太多的老代码需要补充自动化测试脚本,补不起!”有的说:“太紧张,如果同时还要自动化,等不起!”还有的说:“自动化测试工具太贵了!买不起!”确实,各种各样的“伤不起”使得大量的组织在“要不要自动化”这个问题上总在了解和观望,踌躇不前。 我们阅读了一些关于自动化测试ROI的文章,发现大多都是介绍各种不同的计算方法,但来自实际的分享比较少。所以,2011年当我们组织想推行自动化测试的时候,为了打消大家(尤其是管理层)对于自动化测试的投入和产出方面的疑虑,计算我们自己的自动化测试投资回报率ROI(Return on Investment)成了我们启动时就考虑的问题。本文将分为四部分介绍我们的实践方法和结果。 第一部分:业界计算自动化测试ROI的方法 简言之,ROI = 收益/投入。但收益如何计算,投入包括哪些,众说纷纭,并没有一个定论。 在Dion Johnson的“test automation ROI”中给出了三种计算自动化测试ROI的方法。第一种方法“简单ROI”着重从“钱”的方面去看。它考虑了

工具、培训、机器等各种费用,并把测试时间的投入通过单位时间的工资转化成为钱。第二种方法“效率ROI”与第一种方法不同的是从测试效率的角度,只考虑了时间投入所产生的收益,而没有考虑其它如购买工具方面的投入。这个方法比较适合测试人员计算收益。第三种方法“降低风险ROI”着重计算自动化测试与手工测试相比在降低风险方面的收益。它会假设不做某种自动化测试,相关的风险一旦成为事实所带来的损失,从而计算ROI。这个方法比较适合管理人员从整体考量自动化的收益。 那么,目前我们的团队期望自动化测试能带来哪些收益,尤其是哪些收益是目前不能奢望的?我们的经理愿意提供多少投入自动化测试呢?带着这些问题,我们开始了自己对自动化测试ROI的定义和度量。 第二部分:我们计算自动化测试ROI的方法 在度量自动化测试的收益方面,角度很多。我们选择的是从“多、快、好、省”四个方面去看。 更多 鉴于我们处于自动化测试的初级阶段,我们打算暂时先不去追求“更多”。即我们不奢望一年之内整个项目组在一个版本里做更多的工作,因为在自动化投入初期难以提高团队的生产力。我们也不奢望测试人员马上能有更多时间去做更有价值的工作(相对于一次测试的多次重复执行)。因为测试人员通过自动化测试从测试执行上节约出来的时间需要投入到自动化工具和技能的学习上去。

持续集成之“自动化部署”

持续集成之“自动化部署” 在前文《依赖管理》中,我们讨论了如何在代码变得庞大,组件增多的情况下,做好外部库和内部组件依赖管理,从而提高构建效率。可以应用的实践包括:一次生成,多次复用;建立统一制品库,外部依赖库可以使用像Maven或Ivy这样的工具进行统一管理;对架构进行调整,使一个大的代码库分成多个组件;每个组件有自己的持续集成体系;对多个组件做持续集成。然而,解决一个问题后,总会有另一个问题等在那里,需要你来解决。这次Joe的团队遇到了部署问题。 星期一早上,Alice一进办公室,就看到一脸倦意的Joe坐在椅子上,喝着咖啡。 “今天怎么来得这么早?看样子,你没睡好啊?”Alice问道。 “当然啦,昨天晚上我就来了。”Joe无精打采地回答道。 “怎么啦?” “还不是因为新版本上线出了点儿问题”,Joe说道。“看来我们要把部署这件事好好讨论一下,再这样下去,不只我要来,你们也要和我一样啦!呵呵!” 当天下午,Joe邀请了运维团队的主要负责人Tom和Steven,召开了一个关于部署问题的讨论会。 Joe说道:“先请运维部门的Tom介绍一下上周末的新版本上线过程和发现的问题吧。” Tom描述了上线部署全过程。 不可重复且不可靠、易出错的手工部署过程 1.当新版本开发测试完成后,由开发团队的成员在浏览器上登录运维平台,填写上线 申请单。申请单的内容包括新版本的上线部署步骤。 2.测试人员为了保证能够升级部署成功,首先要复制生产环境中的程序和数据到本地 的测试环境中,然后根据上线申请单中所描述的上线部署步骤进行操作,对上线步骤进行验证。 3.运维人员登录到运维平台,收到上线申请单后,确认“已收到”。 4.运维人员发现上线部署步骤有问题,生产环境的路径与上线部署步骤中描述的不一 致。于是与开发人员进行沟通,让开发人员修改上线部署步骤。 5.开发人员修改后,再次通知测试人员和运维人员查看并确认。 6.确认无误后,运维人员根据部署计划,登录到生产环境中,依照上线部署步骤,手 工操作完成。

相关文档
最新文档