




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、_软件测测试面试试必备第18章章测试策略略模式18.11 记记录测试试(也称称为记录录与回放放测试、机器人人用户测试、捕捕获/回放测测试)如何准备备软件的的自动化化测试?通过记录录与应用用程序的的交互并并使用测测试工具具回放它它们来自自动化测测试。图18-1 记录测测试示意意图自动化测测试有几几个目的的。在回回归测试试软件更更改之后后,它们可可以用于于这些软软件。它它们有助助于归档档软件的的行为。在写软软件之前前,它们们可以指指定其行行为。如如何准备备自动化化测试脚脚本,对对可以将将它们用用于什么么目的、它们对对SUTT中的变变更有多多健壮以以及准备备它们需需要多少少技能与与努力等等产生影影响
2、。记录测试试使得能能够在构构建SUUT之后后、改变变它之前前迅速创创建回归归测试。18.11.1 运行行原理我们使用用一种工工具,它会监监控我们与SUTT的交互互。这种种工具记记录大多多数SUUT对我我们的通通信以及及我们对对SUTT的响应应。录音音会话完完成之后后,可以以将它保保存在文文件里以以便稍后后回放。准备运运行测试试时,可可以从工工具的“回放”部分开开始,并并让它指指向录音音会话。它启动动SUTT,并给它提提供响应应SUTT输出的的记录输输入。在在录音会会话内,它也可可以比较较SUTT的输出出及其响响应。错错误匹配配可能导导致测试试失败。有些记录录测试工工具允许许调整录录音会话话内S
3、UUT表现现与回放放过程中中SUTT表现之之间比较较的敏感感性。大大多数记记录测试试工具通通过用户户界面与与SUTT交互。18.11.2 使用用时机如果应用用程序正正在运行行,但不希希望对它进行太多多变更,就可以以使用记记录测试试进行回回归测试试。现有有应用程程序需要要重构(预计修修改功能能性)而而没有可可用的脚脚本测试试用作回回归测试试时,也也可以使使用记录录测试。通常,生成一一组记录录测试比比准备具具有相同同功能性性的脚本本测试更更快。在在理论上上,任何何知道如如何运行行应用程程序的人人都可以以完成测测试记录录,几乎乎不需要要专业技技术。实实际上,许多商商业工具具都值得得深入学学习。同同时
4、,需需要一些些专业技技术来添添加“检查点点”,以便便调整回回放工具具的敏感感性,或或者调整整测试脚脚本(如如果记录录工具记记录了错错误信息息)。大多数记记录测试试工具通通过用户户界面与与SUTT交互。如果SSUT的的用户界界面不断断发展,这种方方法特别容易易让它们们变得脆脆弱(接接口敏感感性,参参见“脆弱测测试”)。甚甚至是小小的变更更(例如如改变按按钮或字字段的内内部名称称)也足足以让回回放工具具产生错错误。这这些工具具也倾向向于在低低级别详详细记录录信息,这样会会让测试试难以理理解(参参见“模糊测测试”)。因因此,如如果对SSUT的的变更中中止了这这些工具具,也很很难手动动修复它它们。所所
5、以,如如果SUUT不断断发展,就要准准备有规规律地再再记录测测试。如果要使使用作为为文档的的测试或或者要使使用这些些测试驱驱动新的的开发,就应该该考虑使使用脚本本测试。使用商商业记录录测试工工具难以以实现这这些目标标,因为为大多数数工具不不允许定定义用于于测试记记录的高高级语言言。将记记录测试试性能构构建到应应用程序本本身之中中或者使使用重构构的记录录测试可可以解决决这个问问题。变体:重重构的记记录测试试这两种策策略的混混合是,使用“记录、重构、回放”1 名称“记录、重构、回放”是Adam Geras提出来的。顺序从从最新记记录测试试中提取取一组“动作组组件”或“动词”,然后通通过测试试用例来
6、来调用这这些“动作组组件”(而不是是使用详详细的内内联代码码)。大大多数商商业捕获获/回放工工具提供供将字面面值转换换为参数数的方法法,主要要的测试试用例可可以将这这些参数数传递到到“动作组组件”。屏幕幕改变时时,只需需再记录录“动作组组件”,所有有测试用用例自动动使用新新的“动作组组件”定义继继续运行行。这种种策略在在效能上上与使用用测试实实用程序序方法与与单元测测试中的的SUTT交互相相同。它它允许使使用重构的记录录测试组组件作为为脚本测测试中的的高级语语言。像像Merrcurry IInteeracctivve的BPTT2 BPT是“业务进程测试(Business Process Tes
7、ting)”的缩写。这样的的工具以以自顶向向下的方方法将这这一范式式用于脚脚本测试试。开发发完高级级脚本并并指定了了测试步步骤所需需的组件件之后,更多的的技术人人员就可可以记录录或手动动编码单单个组件件。18.11.3 实现现方式说说明使用记录录测试策策略时,有两种种基本选选择:可可以获得得第三方方工具,它记录录与应用用程序交交互时发发生的通通信;可可以将“记录与与回放”机制内内置于应应用程序序。1. 变变体:外部测测试记录录在商业上上有许多多测试记记录工具具可用,每种工工具都有有自身的的优缺点点。最好好的选择择取决于于应用程程序用户户接口的性质、预算、要验证证的功能能性的复复杂性以以及其他他
8、可能的的因素。如果要使使用测试试来驱动动开发,就需要要挑选使使用测试试记录文文件格式式的工具具,这种格格式可以以手动编编辑且易易于理解解。需要要手动编编写内容容,如果果使用“记录与与回放”工具来来执行测测试,这这种情况况也还是是脚本测测试的示示例。2. 变变体:内置测试试记录也可以将将记录测测试性能能内置于于SUTT。在那那种情况况下,可可以用相相当高的的级别定定义测试试脚本“语言”,级别别足够高高,就可可以在构构建系统统之前手手动编写写测试。实际上上,有报报告说MMicrrosooft Exccel电电子数据据表的VVBA宏宏性能是是Exccel自自动化测测试机制制的开端端。18.11.4
9、示例例:内置测测试记录录从表面上上看,提供记记录测试试的代码码样本没没有意义义,因为这这种模式式处理生生成测试试的方法法,而不是是表示它它的方法法。回放放测试时时,实际际上就是是数据驱驱动测试试。同样样,通常常不重构构到记录录测试,因为它它经常是是项目尝尝试的第第一种测测试自动动化策略略。而且且,如果果发现有有过多遗遗漏的测测试,还还可以在在尝试脚脚本测试试之后引引入记录录测试,因为手手动自动动化的成成本太高高。在那那种情况况下,不不应该试试图将现现有脚本本测试转转换为记记录测试试,应该该记录新新测试。下面是应应用程序序本身记记录的测测试的示示例。该该测试用用来回归归测试安安全关键键的应用用程
10、序,并且在在它从OOS2上上的C移植到到Windowws上的的C+之后。请注意意,记录录的信息息如何形形成用户户易于理理解的域域专用高高级语言言。 555666 SSOUTTH SOUUTH NORRTH SOUUTH NORRTH 该样本表表示回放放测试的的输出。内置回回放机制制插入了了acttuall元素。staatuss属性表表示这些些元素是是否匹配配exppectted值值。将样式式表应用用于这些些文件来来格式化化它们,就像具具有彩色色编码结结果的FFit测测试一样样。然后后项目的的商业用用户可以以进行记记录、回回放和结结果分析析。在软件的的表示层层插入挂挂钩可以以记录用用户和用用户响
11、应应提供的的选项列列表。其其中一个个挂钩的的示例如如下所示示:if (plaaybaack_is_on() choiice = gget_chooicee_foor_pplayybacck(ddiallog_id, chhoicces_lisst); ellse choiice = ddispplayy_diialoog(cchoiicess_liist, roow, coll, ttitlle, keyy); if (reccorddingg_iss_onn() recoord_chooicee(diialoog_iid, chooicees_llistt, cchoiice, keey);
12、 方法geet_cchoiice_forr_pllaybbackk检索ussed-vallue元元素的内内容,而不是是要求用用户从选选项列表表中选取取。方法法reccordd_chhoicce生成成acttuall元素并并“断言”exppectted元元素,记录各各元素sstattus属属性的结结果。注注意,当处于于回放模模式时,reccorddingg_iss_onn()返返回trrue以以便记录录测试结结果。18.11.5 示例例:商业记记录与回回放测试试工具几乎有所所商业测测试工具具都使用用“记录与与回放”隐喻。每种工工具都定定义自己己的记录录测试文文件格式式,其中中大多数数都非常常冗长
13、。下面是是使用MMerccuryy Innterracttivee的QuiickTTestt Prrofeessiionaal QTPP工具具记录的的测试的的“简短”摘要。它显示示于“专家视视图”中,该视图图表示真真正记录录的内容容:VbSScriipt程程序!该该示例包包括手动动插入的的注释(前缀为为)来说明测测试在做做什么,如果改改变导致致测试不不再运行行的应用用程序之之后记录录测试,那么就就会丢失失这些注注释。 GGoTooPaggeMaainttainnTaxxonoomy()Browwserr(IInf).PPagee(IInf).WWebBButtton(Looginn).Clii
14、ckBrowwserr(IInf).PPagee(IInf_2).Chheckk ChheckkPoiint(Innf_22)Browwserr(IInf).PPagee(IInf_2).LLinkk(TTAXOONOMMY LLINKKINGG).CliickBrowwserr(IInf).PPagee(IInf_3).Chheckk ChheckkPoiint(Innf_33)Browwserr(IInf).PPagee(IInf_3).Liink(MAAINTTAINN TAAXONNOMYY).CliickBrowwserr(IInf).PPagee(IInf_4).Chheckk C
15、hheckkPoiint(Innf_44) AAddTTermm(AA,Topp Leevell, Toop LLeveel DDefiinittionn)Browwserr(IInf).PPagee(IInf_4).Liink(Addd).Cllickkwaitt 4Browwserr(IInf_2).Paage(Innf).Chheckk ChheckkPoiint(Innf_55)Browwserr(IInf_2).Paage(Innf).WeebEddit(chhilddCoddeSuuffii x).SSet ABrowwserr(IInf_2).Paage(Innf).WebEEd
16、itt(ttaxoonommyDtto.ddesccrippt).Seet Topp Leevell Browwserr(IInf_2).Paage(Innf).WebEEditt(ttaxoonommyDtto.ddefiinitti).Seet Topp Leevell Deefinnitiion Browwserr(IInf_2).Paage(Innf).WeebBuuttoon(Savve).Cllickk waitt 4Browwserr(IInf).PPagee(IInf_5).Chheckk ChheckkPoiint(Innf_55_2) SSeleectTTermm(A-To
17、pp Leevell) Browwserr(IInf).PPagee(IInf_5).WebLListt(sseleecteedTaaxonnomyyCodde).Seelecct A-Toop LLeveel AAddTTermm(BB,Seccondd Toop LLeveel, SSecoond Topp Leevell Deefinnitiion)Browwserr(IInf).PPagee(IInf_5).Liink(Addd).Cllickk waitt 4 Browwserr(IInf_2).Paage(Innf_22).Cheeck CheeckPPoinnt(Inff_2_2
18、)infoofi le_;_IInfoorm_Albbertta_221.iinf_;_hhighhtliightt idd_; _Broowseer(Inff_2).PPagee(IInf_2)_;_ aand it goees oon, andd onn, aand on 注意,测测试依据据应用程程序用户户界面描描述所有有输入和和输出的的方法。这样主主要会产产生两个个问题:模糊测测试(由由记录信信息的具具体性质质所导致致)和接接口敏感感性(导导致脆弱弱测试)。18.11.6 重构构说明让该测试试作为文文档可以以使之更更有用,能够降降低或避避免高测测试维护护成本,支持使使用一系系列提取取方法
19、Fowwlerr重构构组成使使用高级级语言的的其他测测试。18.11.7 示例例:重构的的商业记记录测试试下面的示示例显示示重构来来交流意意图的相相同测试试:GoTooPagge_MMainntaiinTaaxonnomyy()AddTTermm(AA,Topp Leevell, Toop LLeveel DDefii niitioon)SeleectTTermm(A-Topp Leevell)AddTTermm(BB,Seccondd Toop LLeveel, SSecoond Topp Leevell Deefi nittionn)注意,该该测试的的意图变变得非常常明显。提取的的测试实实
20、用程序序方法如如下所示示:Methhod GoTToPaage_MaiintaainTTaxoonommy()Browwserr(IInf).PPagee(IInf).WWebBButtton(Looginn).Cliick Browwserr(IInf).PPagee(IInf_2).Chheckk ChheckkPoiint(Innf_22) Browwserr(IInf).PPagee(IInf_2).Liink(TAAXONNOMYY LIINKIING).CClicck Browwserr(IInf).PPagee(IInf_3).Chheckk ChheckkPoiint(Innf
21、_33) Browwserr(IInf).PPagee(IInf_3).Liink(MAAINTTAINN TAAXONNOMYY).Cliick Browwserr(IInf).PPagee(IInf_4).Chheckk ChheckkPoiint(Innf_44)EndMethhod AdddTerrm( codde, namme, desscriiptiion)Browwserr(IInf).PPagee(IInf_4).Liink(Addd).Cllickkwaitt 4Browwserr(IInf_2).Paage(Innf).Chheckk ChheckkPoiint(Innf_
22、55)Browwserr(IInf_2).Paage(Innf).WebEEditt(cchilldCoodeSSufffi xx).Sett coode Browwserr(IInf_2).Paage(Innf).WebEEditt(ttaxoonommyDtto.ddesccrippt).Seet nnamee Browwserr(IInf_2).Paage(Innf).WebEEditt(ttaxoonommyDtto.ddefii niiti).SSet desscriiptiion Browwserr(IInf_2).Paage(Innf).WeebBuuttoon(Savve).C
23、llickk waitt 4Browwserr(IInf).PPagee(IInf_5).Chheckk ChheckkPoiint(Innf_55_2) endMethhod SellecttTerrm( patth )Browwserr(IInf).PPagee(IInf_5).WebLListt(sseleecteedTaaxonnomyyCodde).Seelecct ppathhBrowwserr(IInf).PPagee(IInf_5).Liink(Addd).Cllickkwaitt 4 end我将这个个示例编编在一起起是为了了说明与与xUnnit中中做法的的类似之之处。不不要随
24、便便运行该该示例,因为在在语句构构成上它它可能不不正确。18.11.8 高级级阅读论文“AAgille RRegrresssionn Teestiing Usiing Reccordd annd PPlayyBacck”ARRTRPP介绍绍了将记记录测试试机制内内置于应应用程序序以利于于将它导导出到其其他平台台的经验验。18.22 脚脚本测试试(也称称为手写写测试、手动编编码测试试、程序序测试、自自动化单单元测试试)如何准备备软件的的自动化化测试?通过手动动写测试试程序来来自动化化测试。图18-2 脚本测测试示意意图自动化测测试有几几个目的的。在回回归测试试软件更更改之后后,它们可可以用于于这
25、些软软件。它它们有助助于归档档软件的的行为。在写软软件之前前,它们们可以指指定其行行为。如如何准备备自动化化测试脚脚本,这这将影响响可以将将它们用用于什么么目的、它们对对SUTT中的变变更有多多健壮以以及准备备它们需需要多少少技能与与努力。脚本测试试允许在在开发软软件之前前准备测测试,以便它它们有助助于驱动动设计。18.22.1 运行行原理通过写测测试程序序来自动动化测试试,这些测测试程序序为了执执行其功功能性而而与SUUT交互互。和记记录测试试不一样样,这些些测试可可以是客客户测试试或单元元测试。这些测测试程序序通常称称为“测试脚脚本”,以便便与它们们测试的的产品代代码区分分开来。18.22
26、.2 使用用时机准备软件件的单元元测试时时,通常使使用脚本本测试。因为它它更容易易从用相相同编程程语言写写的软件件中直接接访问单单个单元元。它也也允许执执行所有有代码路路径,包包括“不合理理的”。客户测试试稍微有有些复杂杂。当使用用自动化化故事测测试来驱驱动软件件开发时时,应该使使用脚本本测试。记录测测试不能能很好满满足这种种需要,因为没没有用来来记录它它们的应应用程序序时它难难以记录录测试。准备脚脚本测试试可以使使用编程程经验以以及测试试方法中中的经验验。项目目上的大大多数业业务用户户不可能能对学习习如何准准备脚本本测试感感兴趣。在编程程语言中中进行脚脚本测试试的方法法之一是是,定义义测试S
27、SUT的的高级语语言,然然后作为为数据驱驱动测试试解释程程序GGOF实现该该语言。一种定定义数据据驱动测测试的开开源架构构是Fiit及FittNessse。Cannoo WebbTesst是支支持这种种类型测测试的另另一种工工具。在现有遗遗留应用用程序3 在测试驱动程序中,遗留应用程序是缺乏自动化测试安全网的系统。中中,可以考考虑使用用记录测测试作为为快速创创建一组组回归测测试的方方法,这些回回归测试试在重构构代码引引入易测测性时可可以起到到保护作作用。随随后可以以准备可可测试应应用程序序的脚本本测试。18.22.3 实现现方式说说明传统上脚脚本测试试写作“测试程程序”,通常使使用特定定的测试
28、试脚本语语言。现现在,我我们更喜喜欢使用用测试自自动化架架构来写写脚本测测试,例例如,用用与SUUT相同同的语言言写的xxUniit。在在这种情情况下,通常以以测试用用例类上上测试方方法的形形式捕获获各测试试程序。要最小小化手动动干预,各测试试方法应应该实现现自检测测试(也也就是可可重复的的测试)。18.22.4 示例例:脚本本测试下面是用用JUnnit写写的脚本本测试的的示例:publlic voiid ttesttAdddLinneIttem_quaantiityOOne()finaal BBigDDeciimall BAASE_PRIICE = UUNITT_PRRICEE;finaal
29、 BBigDDeciimall EXXTENNDEDD_PRRICEE = BASSE_PPRICCE;/ Sett Upp FiixtuureCusttomeer ccusttomeer = crreatteACCusttomeer(NNO_CCUSTT_DIISCOOUNTT);Invooicee innvoiice = ccreaateIInvooicee(cuustoomerr);/ Exeerciise SUTTinvooicee.adddIttemQQuanntitty(PPRODDUCTT, QQUANN_ONNE);/ VVeriify OuttcommeLineeIteem
30、eexpeecteed =creaateLLineeIteem( QUAAN_OONE, NOO_CUUST_DISSCOUUNT,EXTEENDEED_PPRICCE, PROODUCCT, invvoicce);asseertCConttainnsExxacttlyOOneLLineeIteem( invvoicce, exppectted );publlic voiid ttesttChaangeeQuaantiity_sevveraalQuuanttityy()finaal iint ORIIGINNAL_QUAANTIITY = 33;finaal iint NEWW_QUUANTT
31、ITYY = 5;finaal BBigDDeciimall BAASE_PRIICE =UNITT_PRRICEE.muultiiplyy( neww BiigDeecimmal(NEWW_QUUANTTITYY);finaal BBigDDeciimall EXXTENNDEDD_PRRICEE =BASEE_PRRICEE.suubtrractt(BAASE_PRIICE.mulltipply(CUSTT_DIISCOOUNTT_PCC.moovePPoinntLeeft(2);/ Sett Upp FiixtuureCusttomeer ccusttomeer = crreatteAC
32、Custtomeer(CCUSTT_DIISCOOUNTT_PCC);Invooicee innvoiice = ccreaateIInvooicee(cuustoomerr);Prodductt prroduuct = ccreaateAAProoducct( UNIIT_PPRICCE);invooicee.adddIttemQQuanntitty(pprodductt, OORIGGINAAL_QQUANNTITTY);/ EExerrcisse SSUTinvooicee.chhanggeQuuanttityyForrProoducct(pprodductt, NNEW_QUAANTI
33、ITY);/ VVeriify OuttcommeLineeIteem eexpeecteed = crreatteLiineIItemm( NNEW_QUAANTIITY,CUSTT_DIISCOOUNTT_PCC, EEXTEENDEED_PPRICCE, PROODUCCT, invvoicce);asseertCConttainnsExxacttlyOOneLLineeIteem( invvoicce, exppectted ); 18.22.5 关于于名称自动化测测试程序序通常称称为“测试脚脚本”,可能是是因为继继承了这这些测试试程序,这些程程序最初初在解释释性测试试脚本语语言(例如
34、Tccl)中实现现。称它它们为脚脚本测试试的不利利之处是是,该术术语容易易将手动动测试过过程中应应遵循的的脚本与与不用脚脚本的测测试(例例如探测测测试)相混淆淆。18.22.6 高级级阅读许多书籍籍介绍了了写脚本本测试以以及使用用它们驱驱动SUUT设计计的过程程。最好好可以从从TDDD-BBE或或TDDD-AAPG开始。18.33 数数据驱动动测试如何准备备软件的的自动化化测试?如何减减少测试试码复制制?将各测试试所需的的信息存存储在数数据文件件里,并写阅阅读文件件和执行行测试的的解释程程序。图18-3 数据驱驱动测试试示意图图测试可能能有很多多重复,不仅因因为必须须多次运运行相同同测试,而且
35、因因为许多多测试只只是略有有不同。例如,要运行行本质上上相同但但系统输输入略有有不同的的测试,并验证证实际输输出是不不是具有有相应改改变。每每个测试试都由相相同的步步骤组成成。拥有有这么多多测试是是确保完完好功能能性覆盖盖率的好好方法,但对于于测试可可维护性性而言它它却不是是好方法法,因为为对某个个测试算算法的变变更一定定会传播播给所有有类似测测试。数据驱动动测试可可以获得得好的覆覆盖率同同时又能能最小化化需要编编写和维维护的测测试码的的数量。18.33.1 运行行原理写数据驱驱动测试试解释程程序,它包含含测试的的所有公公共逻辑辑。可以以将随着着测试改改变而改改变的数数据放置置到数据据驱动测测
36、试文件件中,解解释程序序读取该该文件来来执行测测试。对对于每个个测试而而言,它它实现相相同系列列的动作作来实现现四阶段段测试。第一阶阶段,解释程程序检索索文件中中的测试试数据,然后使使用文件件中的数数据建立立测试夹夹具。第第二阶段段,它执执行具有有文件指指定参数数的SUUT。第第三阶段段,它比比较SUUT生成成的实际际结果(例如返返回值、测试后后状态)与文件件的预期期结果。如果结结果不匹匹配,它它将测试试标记为为失败;如果SSUT抛抛出异常常,它捕捕获异常常并相应应地标记记测试然然后继续续。第四四阶段,解释程程序进行行必要的的夹具拆拆卸,然然后继续续执行文文件中的的下一个个测试。需要一系系列复
37、杂杂步骤的的测试可可以简化化为数据据驱动测测试文件件中的一一行数据据。Fiit是写写数据驱驱动测试试架构的的普遍示示例。18.33.2 使用用时机数据驱动动测试是是记录测测试和脚脚本测试试的可选选策略。然而,它也可可以用作作脚本测测试策略略的一部部分。实实际上,回放记记录测试试时,它它们就是是数据驱驱动测试试。数据据驱动测测试是让让业务人人员写自自动化测测试的理理想策略略。保持持数据文文件格式式简单,就可能能让业务务人员用用数据填填充文件件并执行行测试,而无需需要求技技术人员员写各种种测试的的测试码码。当有许多多不同的的数据值值,同时又又希望使使用这些些值来执执行SUUT(其中每每个数据据值都
38、要要执行相相同系列列的步骤骤)时,可以考考虑使用用数据驱驱动测试试作为脚脚本测试试的一部部分。通通常会发发现这种种相似性性会随着着时间的的推移而而变化,因此要要先重构构到参数数化测试试,然后后重构到到数据驱驱动测试试。也可可能在具具有不同同数据值值的不同同序列中中安排一一组标准准步骤,和在递递增的表表格测试试(参见见“参数化化测试”)中一一样。这这种方法法具有最最好的覆覆盖率,同时需需要维护护的测试试码数量量也最少少,如果果需要,还可以以很方便便地添加加更多测测试。决定是否否使用数数据驱动动测试的的另一个个因素,是配置置数据是是不是硬硬编码或或驱动要要测试的的行为。如果使使用脚本本测试自自动化
39、用用于数据据驱动行行为的测测试,当当配置数数据改变变时,就就必须更更新测试试程序。这种行行为很不不正常,因为它它表示,当改变变配置数数据库中中的数据据时,必必须将变变更提交交给源代代码库SCMM4 当然,也应该管理在版本控制库里的测试数据,但这个主题在另一本书中讨论,详情请参见RDb。让让测试变变成数据据驱动,对配置置数据或或元对象象的变更更就由对对数据驱驱动测试试的变更更驱动,这是一一种更正正常的关关系。18.33.3 实现现方式说说明实现方式式选择取取决于是是否使用用数据驱驱动测试试作为不不同的测测试策略略或作为为基于xxUniit策略略的一部部分。使使用数据据驱动测测试作为为独立的的测试
40、策策略通常常使用开开源工具具(例如如Fitt)或商商业记录录测试工工具(例例如QTTP)。使用数数据驱动动测试作作为脚本本测试策策略的一一部分可可能要实实现xUUnitt内的数数据驱动动测试解解释程序序。不管选择择哪种策策略,如果可可能,都应该该使用相相应的测测试自动动化架构构。这样样做可以以有效地地将测试试转换为为两个部部分:数数据驱动动测试解解释程序序和数据据驱动测测试文件件。这两两个部分分都应该该保持在在版本控控制之下下,以便便可以知知道它们们随着时时间推移移如何演演变,同同时还允允许收回回所有错错误的变变更。将将数据驱驱动测试试文件存存储在某某种类型型的库中中至关重重要,虽虽然这种种概
41、念与与业务用用户不相相关。给给用户提提供数据据驱动测测试文件件授权工工具(例例如FiitNeessee)可以以让这种种操作透透明,或或者可以以建立“用户友友好”库,例例如刚好好支持版版本控制制的文档档管理系系统。作为持续续集成过过程的一一部分运运行这些些测试,以便确确定曾经经通过的的测试没没有突然然失败,这样至至关重要要。没有有这样做做可能导导致缺陷陷进入未未检测到到的软件件,一旦旦检测到到缺陷,就要付付出更多多努力来来检修。在持续续集成过过程中包包含客户户测试要要求能够够记录通通过的客客户测试试,因为为提交所所有代码码之前不不能确保保所有客客户测试试都通过过。一种种选择是是保持两两组输入入文
42、件,将通过过的测试试从“仍是红红色”文件迁迁移到“都是绿绿色”文件中中,该文文件作为为自动构构建过程程一部分分用于回回归测试试。1. 变变体:数据驱驱动测试试架构(Fitt)使用数据据驱动测测试作为为测试策策略时,应该考考虑使用用预制数数据驱动动测试架架构。WWardd Cuunniinghham最最初将FFit这这种架构构作为在在自动化化测试中中包含业业务用户户的方法法。虽然然Fitt通常用用于自动动化客户户测试,但如果果测试数数量授权权构建必必需的夹夹具,它它也可用用于单元元测试。Fitt由两部部分组成成:架构构和用户户创建的的夹具。Fitt架构是是通用数数据驱动动测试解解释程序序,该解释
43、释程序读读取输入入文件并并找出其其中的所所有表。它在每每个表的的左上单单元查找找夹具类类名,然然后搜索索该类的的可执行行测试。当它找找到类并并读取该该表的行行和列时时,它会会创建该该类的实实例并将将控件传传递给该该实例。可以重重写架构构定义的的方法来来指定表表中各单单元出现现的情况况。因此此,Fiit夹具具是适配配器,FFit调调用它来来解释数数据表并并调用SSUT上上的方法法。Fit表表也可以以包含SSUT的的预期结结果。FFit将将指定的的值与SSUT返返回的实实际值进进行比较较。然而而,与xxUniit中的的断言方方法不一一样,FFit在在遇到第第一个不不匹配预预期值的的值时不不会终止止
44、测试。相反,它给表表中的各各个单元元涂上颜颜色,绿绿色单元元表示与与预期值值相匹配配的实际际值,红红色单元元表示错错误的或或意料之之外的值值。使用Fiit有几几个好处处:与构建自自己的测测试解释释程序GOFF相比比,要写写的代码码更少。输出对业业务人员员也有意意义,而而不只是是对技术术人员有有意义。测试不会会在遇到到第一个个失败的的断言时时停止。Fitt可以用用一种能能够很容容易看出出失败模模式的方方法传达达多种失失败/错误。照现在的的样子,有大量量夹具类类型可以以用来子子类化或或使用。那么,为为什么不不在所有有单元测测试中都都使用FFit取取代xUUnitt呢?使使用Fiit的主主要不足足如
45、下所所述:在构建FFit夹夹具之前前,测试试场景必必须非常常易于理理解。因因此需要要将各种种测试逻逻辑转换换为表格格表示法法,这不不太合适适,特别别是对习习惯于从从过程思思考的开开发人员员而言尤尤其如此此。它适适合拥有有可以为为客户测测试写FFit夹夹具的测测试者的的情况,但这种种方法不不适合于于真正的的单元测测试,除除非测试试者与开开发人员员的比例例为11。这些测试试在每个个测试中中都要采采用相同同的SUUT交互互逻辑5 表格数据必须在夹具建立或执行SUT阶段注入SUT,或者在结果验证阶段从SUT中检索。要运行行几种不不同类型型的测试试,很可可能就必必须为每每种类型型的测试试构建一一个或多多
46、个不同同的夹具具。构建建新的夹夹具通常常比写一一些测试试方法更更复杂。虽然现现在有许许多不同同夹具类类型可以以用来子子类化或或使用,但这种种使用方方法与要要求开发发人员学学习以便便完成任任务的方方法不同同。尽管管这样,也不是是所有单单元测试试都要使使用Fiit来进进行自动动化。Fit测测试通常常没有集集成到开开发人员员通过xxUniit运行行的回归归测试中中。相反反,这些测测试必须须单独运运行,这样每每次检入入时它们们有可能能不运行行。有些些团队将将Fitt测试作作为其持持续集成成构建过过程的一一部分,以部分分解决这这个问题题。有的的团队报报告已经经拥有辅辅助“客户”构建服服务或运运行所有有客
47、户测测试的服服务器。当然,这这些问题题都是可可以克服服的。总总的来说说,xUnnit架架构比FFit架架构更适适合于单单元测试试;Fitt架构比比xUnnit架架构更适适合于客客户测试试。2. 变变体:天真xUUnitt测试解解释程序序当需要作作为基于于xUnnit的的脚本测测试策略略的一部部分运行行的数据据驱动测测试的数数量较小小时,最简单单的实现现方式是是写包含含循环的的测试方方法,该循环环从文件件读取一一组输入入数据值值以及预预期结果果。这与与将单个个参数化化测试及及其所有有调用者者转换为为表格测测试(参参见“参数化化测试”)具有有相同意意义。和和表格测测试一样样,这种种构建数数据驱动动
48、测试解解释程序序的方法法会产生生具有许许多断言言的单个个测试用用例对象象。它有有以下几几种结果果:整组数据据驱动测测试将计计算为单单个测试试。因此此,将一一组参数数化测试试转换为为单个数数据驱动动测试会会减少执执行的测测试数量量。当遇到第第一个失失败或错错误时会会停止执执行数据据驱动测测试。因因此,遗遗漏了许许多缺陷陷定位。有些xxUniit变体体允许指指定失败败的断言言不中止止测试方方法的执执行。需要确保保出现失失败时,断言失失败能说说出正在在执行哪哪个子测测试。在循环中中包含ttry/cattch语语句,同时包包含测试试逻辑然然后继续续代码执执行,这样可可以解决决最后两两个问题题。然而而,
49、仍然然需要能能够以一一种有意意义的方方法报告告测试结结果(例例如,“失败子子测试11、3和6以及”)。要更方便便地扩充充数据驱驱动测试试解释程程序来处处理相同同数据文文件中几几种不同同类型的的测试,可以包包含“动词”或“动作单单词”作为数数据文件件中各条条目的一一部分。解释程程序可以以依据动动作单词词分派给给不同的的参数化化测试。3. 变变体:测试套套件对象象生成器器让测试套套件工厂厂(参见“测试枚枚举”)上的suuitee方法伪伪造与测测试发现现内置机机制相同同的测试试套件对对象结构构,就可以以避免与与天真xxUniit测试试解释程程序相关关的“第一次次失败时时就停止止”这个问问题。要要这样
50、做做,可以以为数据据驱动测测试文件件中的每每个条目目构建测测试用例例对象,然后用用特定测测试的测测试数据据初始化化每个对对象6 这与xUnit的内置测试方法发现(参见“测试发现”)机制的运行原理类似,但后者接受的是测试数据和测试方法名称。构构建测试试套件时时,该对对象知道道如何执执行具有有加载数数据的参参数化测测试。这这样即使使第一个个测试用用例对象象遇到断断言失败败,也可可以确保保数据驱驱动测试试能够继继续执行行。因此此,可以以让测试试运行器器以正常常方式计计算测试试、错误误及失败败。4. 变变体:测试套套件对象象模拟器器构建测试试套件对对象的方方法之一一是创建建像一个个对象那那样运行行的测
51、试试用例对对象。要要求运行行时该对对象会阅阅读数据据驱动测测试文件件并重新新执行所所有测试试。它必必须捕获获参数化化测试抛抛出的所所有异常常,然后后继续执执行后面面的测试试。完成成后,测测试用例例对象必必须给测测试运行行器报告告测试、失败和和错误的的准确数数量。它它也要实实现测试试运行器器依赖的的标准测测试接口口上的其其他方法法,例如如返回“套件”中测试试的数量量、返回回套件中中每个测测试的名名称和状状态(关关于图形形测试树树探测器器,参见见“测试运运行器”)。18.33.4 启发发示例假设有一一组测试试如下所所示:def tesst_eextrrefsourrceXXml = expeect
52、eedHttml = abbcgeneeratteAnndVeeriffyHttml(souurceeXmll,exxpeccteddHtmml,)enddef tesst_ttesttterrm_nnormmalsourrceXXml = expeecteedHttml = abbcgeneeratteAnndVeeriffyHttml(souurceeXmll,exxpeccteddHtmml,)enddef tesst_ttesttterrm_pplurralsourrceXXml = expeecteedHttml = abbcsgeneeratteAnndVeeriffyHttml(
53、souurceeXmll,exxpeccteddHtmml,)end如下定义义参数化化测试可可以简化化这些测测试:def genneraateAAndVVeriifyHHtmll( ssourrceXXml, exxpeccteddHtmml,messsagee, &bloock) mockkFille = MoockFFilee.neew sourrceXXml.delletee!(t)hanndleer = seetuppHanndleer(ssourrceXXml, moockFFilee )blocck.ccalll unnlesss bblocck = nnil hanndleer.
54、pprinntBoodyCConttentts actuual_htmml = moockFFilee.ouutpuut asseert_equual_htmml(exppecttedHHtmll, actuual_htmml, messsagee + httml outtputt) actuual_htmml end这些测试试存在的的主要问问题是,这些测测试还是是用代码码写的,而实际际上它们们之间的的唯一不不同是用用作输入入的数据据。18.33.5 重构构说明当然,解解决方案案是将参参数化测测试的公公共逻辑辑提取到到数据驱驱动测试试解释程程序中,并将所所有参数数集合到到任何人人都可以以编辑的
55、的单个数数据文件件中。需需要写“主”测试,它知道道从哪个个文件阅阅读测试试数据,知道阅阅读和分分析测试试文件的的一些逻逻辑。该该逻辑可可以调用用现有的的参数化化测试逻逻辑,并并让xUUnitt记录测测试执行行统计。18.33.6 示例例:使用XMML数据据文件的的xUnnit数数据驱动动测试本示例中中,使用XMML形式式文件。每个测测试都由由tesst元素素组成,它有三三个主要要部分:告诉数据据驱动测测试解释释程序要要运行哪哪种测试试逻辑的的动作(例如,croossrref)。传递给SSUT的的输入,这里是是souurceeXmll元素希望SUUT(在在exppecttedHHtmll元素中中
56、)生成成的HTTML这三个部部分包装装在teestssuitte元素素里: crrosssreff abcc crrosssreff abcc crrosssreff abccs 所有拥有有XMLL编辑器器的人都都可以编编辑这个个XMLL文件,而不必必担心引引入测试试逻辑错错误。数数据驱动动测试解解释程序序封装用用来验证证预期结结果的所所有逻辑辑,使用用的方法法与参数数化测试试使用的的方法相相同。出出于查看看的目的的,通过过定义样样式表对对用户隐隐藏了XXML的的结构。另外,许多XXML编编辑器会会将XMML转换换为基于于表格的的输入以以简化编编辑。为了避免免处理操操作XMML的复复杂性,解释
57、程程序也可可以使用用CSVV文件作作为输入入。18.33.7 示例例:使用CSSV输入文文件的xxUniit数据据驱动测测试使用CSSV文件件,前面示示例中的的测试则则如下所所示:ID, Acctioon, SouurceeXmll, EExpeecteedHttml Extrref,croossrref,aabc TTerrm,ccrosssreef,abcc TTerrms,croossrref,aabcss这个解释释程序相相对简单单,并且建建立在为为参数化化测试而而开发的的逻辑之之上。它它阅读CCSV文文件,并并使用RRubyy的spllit函函数分析析各行。def tesst_ccro
58、sssreefexeccuteeDattaDrriveenTeest CrrosssreffHanndleerTeest.txtt enddef exeecutteDaataDDrivvenTTestt fiilennamee dataaFille = Fiile.opeen(ffileenamme) dataaFille.eeachh_liine do | llinee |descc, aactiion, paart22 = linne.sspliit(,) sourrceXXml, exxpeccteddHtmml, lefftOvver = ppartt2.sspliit(,) if c
59、roossrref=aactiion.strripgeneeratteAnndVeeriffyHttml souurceeXmll, eexpeecteedHttml, deescelsee # neww vverbbs go befforee heere as elssifsrepoort_errror( uunknnownn acctioon + aactiion.strrip ) end end end除非将ggeneeratteAnndVeeriffyHttml的的实现方方式改变变为捕获获断言失失败和增增加失败败计数器器,这种数数据驱动动测试才才会在遇遇到第一一个失败败断言时时停止执执
60、行。而而回归测测试可以以接受这这种行为为,虽然然它没有有提供很很好的缺缺陷定位位。18.33.8 示例例:使用Fiit架构构的数据据驱动测测试如果要进进一步控控制用户户的行为为,可以创创建Fiit“列夹具具”,其中有有id、acttionn、souurcee XMML和exppectted Htmml()各列,让用户户编辑HHTMLL Weeb页面面(如表188-1所所示)。表18-1 使使用Fiit架构构构建的的数据驱驱动测试试Com.xunnitppatttenss.fiit.CroossrrefHHandleerFiixtuureidactiionsourrce XMLLexpeecte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030礼品包装行业风险投资发展分析及运作模式与投融资研究报告
- 2025-2030眼镜项目可行性研究报告
- 2025-2030皮箱行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030电热元件产品入市调查研究报告
- 2025-2030电影衍生产品行业市场前景分析及发展趋势与投资风险研究报告
- 2025-2030电子商务系统行业市场发展分析及投资前景研究报告
- 2025-2030生猪行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030玲珑瓷茶具行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030环保建材产业政府战略管理与区域发展战略研究咨询报告
- 2025-2030物流联盟产业政府战略管理与区域发展战略研究咨询报告
- 2025年3月22日山东事业单位统考《行测》真题(含答案)
- 2025年深圳市企业劳动合同模板
- 2025年福建省福州市第十九中学初三3月教学质量检查物理试题含解析
- 中国轮毂电机市场发展状况与投资方向预测报告2024-2030年
- 智慧养老考试题及答案
- 2025广东汕尾市水务集团有限公司招聘人员8人笔试参考题库附带答案详解
- 山东2025年山东科技职业学院招聘33人笔试历年参考题库附带答案详解
- 2024山西云时代技术有限公司社会招聘59人笔试参考题库附带答案详解
- (一模)2025年聊城市高三高考模拟历史试题卷(含答案)
- 中国革命战争的战略问题(全文)
- G322-1钢筋砼过梁
评论
0/150
提交评论