版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第18章测试策略模模式18.1 记录录测试(也称为为记录与与回放测测试、机机器人用用户测试、捕获获/回放测测试)如何准备软软件的自自动化测测试?通过记录与与应用程程序的交交互并使使用测试试工具回回放它们们来自动动化测试试。图18-11 记记录测试试示意图图自动化测试试有几个个目的。在在回归测测试软件件更改之之后,它们可可以用于于这些软软件。它它们有助助于归档档软件的的行为。在在写软件件之前,它它们可以以指定其其行为。如如何准备备自动化化测试脚脚本,对对可以将将它们用用于什么么目的、它它们对SSUT中中的变更更有多健健壮以及及准备它它们需要要多少技技能与努努力等产产生影响响。记录测试使使得能够够
2、在构建建SUTT之后、改改变它之之前迅速速创建回回归测试试。18.1.1 运行原原理我们使用一一种工具具,它会监监控我们们与SUUT的交交互。这这种工具具记录大大多数SSUT对对我们的的通信以以及我们们对SUUT的响响应。录录音会话话完成之之后,可可以将它它保存在在文件里里以便稍稍后回放放。准备备运行测测试时,可可以从工工具的“回放”部分开开始,并并让它指指向录音音会话。它它启动SSUT,并并给它提提供响应应SUTT输出的的记录输输入。在在录音会会话内,它也可可以比较较SUTT的输出出及其响响应。错错误匹配配可能导导致测试试失败。有些记录测测试工具具允许调调整录音音会话内内SUTT表现与与回放
3、过过程中SSUT表表现之间间比较的的敏感性性。大多多数记录录测试工工具通过过用户界界面与SSUT交交互。18.1.2 使用时时机如果应用程程序正在在运行,但不希希望对它它进行太太多变更更,就可以以使用记记录测试试进行回回归测试试。现有有应用程程序需要要重构(预计修修改功能能性)而而没有可可用的脚脚本测试试用作回回归测试试时,也也可以使使用记录录测试。通通常,生生成一组组记录测测试比准准备具有有相同功功能性的的脚本测测试更快快。在理理论上,任任何知道道如何运运行应用用程序的的人都可可以完成成测试记记录,几几乎不需需要专业业技术。实实际上,许许多商业业工具都都值得深深入学习习。同时时,需要要一些专
4、专业技术术来添加加“检查点点”,以便便调整回回放工具具的敏感感性,或或者调整整测试脚脚本(如如果记录录工具记记录了错错误信息息)。大多数记录录测试工工具通过过用户界界面与SSUT交交互。如如果SUUT的用用户界面面不断发发展,这这种方法法特别容容易让它它们变得得脆弱(接口敏敏感性,参参见“脆弱测测试”)。甚甚至是小小的变更更(例如如改变按按钮或字字段的内内部名称称)也足足以让回回放工具具产生错错误。这这些工具具也倾向向于在低低级别详详细记录录信息,这这样会让让测试难难以理解解(参见见“模糊测测试”)。因因此,如如果对SSUT的的变更中中止了这这些工具具,也很很难手动动修复它它们。所所以,如如果
5、SUUT不断断发展,就就要准备备有规律律地再记记录测试试。如果要使用用作为文文档的测测试或者者要使用用这些测测试驱动动新的开开发,就应该该考虑使使用脚本本测试。使使用商业业记录测测试工具具难以实实现这些些目标,因因为大多多数工具具不允许许定义用用于测试试记录的的高级语语言。将将记录测测试性能能构建到到应用程程序本身身之中或或者使用用重构的的记录测测试可以以解决这这个问题题。变体:重构构的记录录测试这两种策略略的混合合是,使使用“记录、重重构、回回放”1 名称“记录、重构、回放”是Adam Geras提出来的。顺序从从最新记记录测试试中提取取一组“动作组组件”或“动词”,然后通通过测试试用例来来
6、调用这这些“动作组组件”(而不是是使用详详细的内内联代码码)。大大多数商商业捕获获/回放工工具提供供将字面面值转换换为参数数的方法法,主要要的测试试用例可可以将这这些参数数传递到到“动作组组件”。屏幕幕改变时时,只需需再记录录“动作组组件”,所有有测试用用例自动动使用新新的“动作组组件”定义继继续运行行。这种种策略在在效能上上与使用用测试实实用程序序方法与与单元测测试中的的SUTT交互相相同。它它允许使使用重构构的记录录测试组组件作为为脚本测测试中的的高级语语言。像像Merrcurry IInteeracctivve的BPTT2 BPT是“业务进程测试(Business Process Tes
7、ting)”的缩写。这样的的工具以以自顶向向下的方方法将这这一范式式用于脚脚本测试试。开发发完高级级脚本并并指定了了测试步步骤所需需的组件1 名称“记录、重构、回放”是Adam Geras提出来的。2 BPT是“业务进程测试(Business Process Testing)”的缩写。18.1.3 实现方方式说明明使用记录测测试策略略时,有两种种基本选选择:可可以获得得第三方方工具,它它记录与与应用程程序交互互时发生生的通信信;可以以将“记录与与回放”机制内内置于应应用程序序。1. 变体体:外部测测试记录录在商业上有有许多测测试记录录工具可可用,每种工工具都有有自身的的优缺点点。最好好的选择择
8、取决于于应用程程序用户户接口的的性质、预预算、要要验证的的功能性性的复杂杂性以及及其他可可能的因因素。如果要使用用测试来来驱动开开发,就需要要挑选使使用测试试记录文文件格式式的工具具,这种格格式可以以手动编编辑且易易于理解解。需要要手动编编写内容容,如果果使用“记录与与回放”工具来来执行测测试,这这种情况况也还是是脚本测测试的示示例。2. 变体体:内置测测试记录录也可以将记记录测试试性能内内置于SSUT。在在那种情情况下,可可以用相相当高的的级别定定义测试试脚本“语言”,级别别足够高高,就可可以在构构建系统统之前手手动编写写测试。实实际上,有有报告说说Miccrossoftt Exxcell电
9、子数数据表的的VBA宏宏性能是是Exccel自自动化测测试机制制的开端端。18.1.4 示例:内置测测试记录录从表面上看看,提供记记录测试试的代码码样本没没有意义义,因为这这种模式式处理生生成测试试的方法法,而不是是表示它它的方法法。回放放测试时时,实际际上就是是数据驱驱动测试试。同样样,通常常不重构构到记录录测试,因因为它经经常是项项目尝试试的第一一种测试试自动化化策略。而而且,如如果发现现有过多多遗漏的的测试,还还可以在在尝试脚脚本测试试之后引引入记录录测试,因因为手动动自动化化的成本本太高。在在那种情情况下,不不应该试试图将现现有脚本本测试转转换为记记录测试试,应该该记录新新测试。下面是
10、应用用程序本本身记录录的测试试的示例例。该测测试用来来回归测测试安全全关键的的应用程程序,并并且在它它从OSS2上的的C移植到到Winndowws上的的C+之后。请请注意,记记录的信信息如何何形成用用户易于于理解的的域专用用高级语语言。 55566 SOOUTHH SSOUTTH NNORTTH SSOUTTH NNORTTH 该样本表示示回放测测试的输输出。内内置回放放机制插插入了aactuual元元素。sstattus属属性表示示这些元元素是否否匹配eexpeecteed值。将样样式表应应用于这这些文件件来格式式化它们们,就像像具有彩彩色编码码结果的的Fitt测试一一样。然然后项目目的商业
11、业用户可可以进行行记录、回回放和结结果分析析。在软件的表表示层插插入挂钩钩可以记记录用户户和用户户响应提提供的选选项列表表。其中中一个挂挂钩的示示例如下下所示:if (pplayybacck_iis_oon() choicce = geet_cchoiice_forr_pllaybbackk(diialoog_iid, chooicees_llistt); elsse choicce = diispllay_diaalogg(chhoicces_lisst, roww, ccol, tiitlee, kkey); if (rrecoordiing_is_on() recorrd_cchoiic
12、e(diaalogg_idd, cchoiicess_liist, chhoicce, keyy); 方法gett_chhoicce_ffor_plaaybaack检检索ussed-vallue元元素的内内容,而不是是要求用用户从选选项列表表中选取取。方法法reccordd_chhoicce生成成acttuall元素并并“断言”exppectted元元素,记录各各元素sstattus属属性的结结果。注注意,当处于于回放模模式时,recording_is_on()返回true以便记录测试结果。18.1.5 示例:商业记记录与回回放测试试工具几乎有所商商业测试试工具都都使用“记录与与回放”隐喻。每
13、每种工具具都定义义自己的的记录测测试文件件格式,其其中大多多数都非非常冗长长。下面面是使用用Merrcurry IInteeracctivve的QuiickTTestt Prrofeessiionaal QTPP工具具记录的的测试的的“简短”摘要。它它显示于于“专家视视图”中,该视图图表示真真正记录录的内容容:VbSScriipt程程序!该该示例包包括手动动插入的的注释(前缀为为)来说明明测试在在做什么么,如果改改变导致致测试不不再运行行的应用用程序之之后记录录测试,那么就就会丢失失这些注注释。 GooToPPageeMaiintaainTTaxoonommy()Browsser(Innf).
14、Paage(Innf).WeebBuuttoon(Loggin).CClicckBrowsser(Innf).Paage(Innf_22).Cheeck CheeckPPoinnt(Inff_2)Browsser(Innf).Paage(Innf_22).Liink(TAAXONNOMYY LIINKIING).CClicckBrowsser(Innf).Paage(Innf_33).Cheeck CheeckPPoinnt(Inff_3)Browsser(Innf).Paage(Innf_33).Linnk(MAIINTAAIN TAXXONOOMY).CClicckBrowsser(Inn
15、f).Paage(Innf_44).Cheeck CheeckPPoinnt(Inff_4) AdddTeerm(A,TTop Levvel, Topp Leevell Deefinnitiion)Browsser(Innf).Paage(Innf_44).Linnk(Addd).Cliickwait 4Browsser(Innf_22).Pagge(Inff).Cheeck CheeckPPoinnt(Inff_5)Browsser(Innf_22).Pagge(Inff).WebbEdiit(chiildCCodeeSufffi x).Seet ABrowsser(Innf_22).Pag
16、ge(Inff).WebEddit(taaxonnomyyDtoo.deescrriptt).Sett TTop Levvel Browsser(Innf_22).Pagge(Inff).WebEddit(taaxonnomyyDtoo.deefinnitii).Sett TTop Levvel Deffiniitioon Browsser(Innf_22).Pagge(Inff).WebbButttonn(SSavee).Cliick wait 4Browsser(Innf).Paage(Innf_55).Cheeck CheeckPPoinnt(Inff_5_2) SeelecctTeer
17、m(AA-TTop Levvel) Browsser(Innf).Paage(Innf_55).WebLiist(seeleccteddTaxxonoomyCCodee).Sellectt A-Topp Leevell AdddTeerm(B,SSecoond Topp Leevell, Seeconnd TTop Levvel Deffiniitioon)Browsser(Innf).Paage(Innf_55).Linnk(Addd).Cliick wait 4 Browsser(Innf_22).Pagge(Inff_2).CChecck CChecckPoointt(IInf_2_22
18、)infoffi lle_;_Innforrm_AAlbeertaa_211.innf_;_hiighttligght id_; _Browwserr(IInf_2).Paage(Innf_22)_;_ annd iit ggoess onn, aand on, annd oon 注意,测试试依据应应用程序序用户界界面描述述所有输输入和输输出的方方法。这这样主要要会产生生两个问问题:模模糊测试试(由记记录信息息的具体体性质所所导致)和接口口敏感性性(导致致脆弱测测试)。18.1.6 重构说说明让该测试作作为文档档可以使使之更有有用,能能够降低低或避免免高测试试维护成成本,支持使使用一系系列提取
19、取方法Fowwlerr重构构组成使使用高级级语言的的其他测测试。18.1.7 示例:重构的的商业记记录测试试下面的示例例显示重重构来交交流意图图的相同同测试:GoToPPagee_MaainttainnTaxxonoomy()AddTeerm(A,TTop Levvel, Topp Leevell Deefi nittionn)SelecctTeerm(AA-TTop Levvel)AddTeerm(B,SSecoond Topp Leevell, Seeconnd TTop Levvel Deffi nnitiion)注意,该测测试的意意图变得得非常明明显。提提取的测测试实用用程序方方法如下
20、下所示:Methood GGoTooPagge_MMainntaiinTaaxonnomyy()Browsser(Innf).Paage(Innf).WeebBuuttoon(Loggin).CClicck Browsser(Innf).Paage(Innf_22).Cheeck CheeckPPoinnt(Inff_2) Browsser(Innf).Paage(Innf_22).Linnk(TAXXONOOMY LINNKINNG).Cllickk Browsser(Innf).Paage(Innf_33).Cheeck CheeckPPoinnt(Inff_3) Browsser(Inn
21、f).Paage(Innf_33).Linnk(MAIINTAAIN TAXXONOOMY).CClicck Browsser(Innf).Paage(Innf_44).Cheeck CheeckPPoinnt(Inff_4)EndMethood AAddTTermm( ccodee, nnamee, ddesccripptioon)Browsser(Innf).Paage(Innf_44).Linnk(Addd).Cliickwait 4Browsser(Innf_22).Pagge(Inff).Cheeck CheeckPPoinnt(Inff_5)Browsser(Innf_22).Pa
22、gge(Inff).WebEddit(chhilddCoddeSuuffii x).SSet codde Browsser(Innf_22).Pagge(Inff).WebEddit(taaxonnomyyDtoo.deescrriptt).Sett naame Browsser(Innf_22).Pagge(Inff).WebEddit(taaxonnomyyDtoo.deefi nitti).Seet ddesccripptioon Browsser(Innf_22).Pagge(Inff).WebbButttonn(SSavee).Cliick wait 4Browsser(Innf).
23、Paage(Innf_55).Cheeck CheeckPPoinnt(Inff_5_2) endMethood SSeleectTTermm( ppathh )Browsser(Innf).Paage(Innf_55).WebLiist(seeleccteddTaxxonoomyCCodee).Sellectt paathBrowsser(Innf).Paage(Innf_55).Linnk(Addd).Cliickwait 4 end我将这个示示例编在在一起是是为了说说明与xxUniit中做做法的类类似之处处。不要要随便运运行该示示例,因因为在语语句构成成上它可可能不正正确。18.1.8
24、高级阅阅读论文“Aggilee Reegreessiion Tesstinng UUsinng RRecoord andd PllayBBackk”ARRTRPP介绍绍了将记记录测试试机制内内置于应应用程序序以利于于将它导导出到其其他平台台的经验验。18.2 脚本本测试(也称为为手写测测试、手手动编码码测试、程程序测试、自动动化单元元测试)如何准备软软件的自自动化测测试?通过手动写写测试程程序来自自动化测测试。图18-22 脚脚本测试试示意图图自动化测试试有几个个目的。在在回归测测试软件件更改之之后,它们可可以用于于这些软软件。它它们有助助于归档档软件的的行为。在在写软件件之前,它它们可以以指
25、定其其行为。如如何准备备自动化化测试脚脚本,这这将影响响可以将将它们用用于什么么目的、它它们对SSUT中中的变更更有多健健壮以及及准备它它们需要要多少技技能与努努力。脚本测试允允许在开开发软件件之前准准备测试试,以便它它们有助助于驱动动设计。18.2.1 运行原原理通过写测试试程序来来自动化化测试,这些测测试程序序为了执执行其功功能性而而与SUUT交互互。和记记录测试试不一样样,这些些测试可可以是客客户测试试或单元元测试。这这些测试试程序通通常称为为“测试脚脚本”,以便便与它们们测试的的产品代代码区分分开来。18.2.2 使用时时机准备软件的的单元测测试时,通常使使用脚本本测试。因因为它更更容
26、易从从用相同同编程语语言写的的软件中中直接访访问单个个单元。它它也允许许执行所所有代码码路径,包包括“不合理理的”。客户测试稍稍微有些些复杂。当使用用自动化化故事测测试来驱驱动软件件开发时时,应该使使用脚本本测试。记记录测试试不能很很好满足足这种需需要,因因为没有有用来记记录它们们的应用用程序时时它难以以记录测测试。准准备脚本本测试可可以使用用编程经经验以及及测试方方法中的的经验。项项目上的的大多数数业务用用户不可可能对学学习如何何准备脚脚本测试试感兴趣趣。在编编程语言言中进行行脚本测测试的方方法之一一是,定定义测试试SUTT的高级级语言,然然后作为为数据驱驱动测试试解释程程序GGOF实现该该
27、语言。一一种定义义数据驱驱动测试试的开源源架构是是Fitt及FittNessse。Cannoo WebbTesst是支支持这种种类型测测试的另另一种工工具。在现有遗留留应用程程序3 在测试驱动程序中,遗留应用程序是缺乏自动化测试安全网的系统。中,可以考考虑使用用记录测测试作为为快速创创建一组组回归测测试的方方法,这些回回归测试试在重构构代码引引入易测测性时可可以起到到保护作作用。随随后可以以准备可可测试应应用程序3 在测试驱动程序中,遗留应用程序是缺乏自动化测试安全网的系统。18.2.3 实现方方式说明明传统上脚本本测试写写作“测试程程序”,通常使使用特定定的测试试脚本语语言。现现在,我我们更
28、喜喜欢使用用测试自自动化架架构来写写脚本测测试,例例如,用用与SUUT相同同的语言言写的xxUniit。在在这种情情况下,通通常以测测试用例例类上测测试方法法的形式式捕获各各测试程程序。要要最小化化手动干干预,各各测试方方法应该该实现自自检测试试(也就就是可重重复的测测试)。18.2.4 示例:脚本测测试下面是用JJUniit写的的脚本测测试的示示例:publiic vvoidd teestAAddLLineeIteem_qquanntittyOnne()finall BiigDeecimmal BASSE_PPRICCE = UNNIT_PRIICE;finall BiigDeecimmal
29、 EXTTENDDED_PRIICE = BBASEE_PRRICEE;/ SSet Up FixxturreCustoomerr cuustoomerr = creeateeACuustoomerr(NOO_CUUST_DISSCOUUNT);Invoiice invvoicce = crreatteInnvoiice(cusstommer);/ EExerrcisse SSUTinvoiice.adddIteemQuuanttityy(PRRODUUCT, QUUAN_ONEE);/ Veeriffy OOutccomeeLineIItemm exxpecctedd =creatteLii
30、neIItemm( QQUANN_ONNE, NO_CUSST_DDISCCOUNNT,EXTENNDEDD_PRRICEE, PPRODDUCTT, iinvooicee);asserrtCoontaainssExaactllyOnneLiineIItemm( iinvooicee, eexpeecteed );publiic vvoidd teestCChanngeQQuanntitty_sseveerallQuaantiity()finall innt OORIGGINAAL_QQUANNTITTY = 3;finall innt NNEW_QUAANTIITY = 55;finall
31、BiigDeecimmal BASSE_PPRICCE =UNIT_PRIICE.mulltipply( nnew BiggDeccimaal(NNEW_QUAANTIITY);finall BiigDeecimmal EXTTENDDED_PRIICE =BASE_PRIICE.subbtraact(BASSE_PPRICCE.mmulttiplly(CUST_DISSCOUUNT_PC.movvePoointtLefft(22);/ SSet Up FixxturreCustoomerr cuustoomerr = creeateeACuustoomerr(CUUST_DISSCOUUNT
32、_PC);Invoiice invvoicce = crreatteInnvoiice(cusstommer);Produuct prooducct = crreatteAPProdductt( UUNITT_PRRICEE);invoiice.adddIteemQuuanttityy(prroduuct, ORRIGIINALL_QUUANTTITYY);/ Exxerccisee SUUTinvoiice.chaangeeQuaantiityFForPProdductt(prroduuct, NEEW_QQUANNTITTY);/ Veeriffy OOutccomeeLineIItemm
33、 exxpecctedd = creeateeLinneIttem( NEEW_QQUANNTITTY,CUST_DISSCOUUNT_PC, EXXTENNDEDD_PRRICEE, PPRODDUCTT, iinvooicee);asserrtCoontaainssExaactllyOnneLiineIItemm( iinvooicee, eexpeecteed ); 18.2.5 关于名名称自动化测试试程序通通常称为为“测试脚脚本”,可能是是因为继继承了这这些测试试程序,这这些程序序最初在在解释性性测试脚脚本语言言(例如Tccl)中实现现。称它它们为脚脚本测试试的不利利之处是是,该术术语
34、容易易将手动动测试过过程中应应遵循的的脚本与与不用脚脚本的测测试(例例如探测测测试)相混淆淆。18.2.6 高级阅阅读介写测及它动T的最以T-或TDDD-AAPG开始。18.3 数据据驱动测测试如何准备软软件的自自动化测测试?如何减减少测试试码复制制?将各测试所所需的信信息存储储在数据据文件里里,并写阅阅读文件件和执行行测试的的解释程程序。图18-33 数数据驱动动测试示示意图测试可能有有很多重重复,不仅因因为必须须多次运运行相同同测试,而且因因为许多多测试只只是略有有不同。例例如,要要运行本本质上相相同但系系统输入入略有不不同的测测试,并并验证实实际输出出是不是是具有相相应改变变。每个个测试
35、都都由相同同的步骤骤组成。拥拥有这么么多测试试是确保保完好功功能性覆覆盖率的的好方法法,但对对于测试试可维护护性而言言它却不不是好方方法,因因为对某某个测试试算法的的变更一一定会传传播给所所有类似似测试。数据驱动测测试可以以获得好好的覆盖盖率同时时又能最最小化需需要编写写和维护护的测试试码的数数量。18.3.1 运行原原理写数据驱动动测试解解释程序序,它包含含测试的的所有公公共逻辑辑。可以以将随着着测试改改变而改改变的数数据放置置到数据据驱动测测试文件件中,解解释程序序读取该该文件来来执行测测试。对对于每个个测试而而言,它它实现相相同系列列的动作作来实现现四阶段段测试。第第一阶段段,解释程程序
36、检索索文件中中的测试试数据,然后使使用文件件中的数数据建立立测试夹夹具。第第二阶段段,它执执行具有有文件指指定参数数的SUUT。第第三阶段段,它比比较SUUT生成成的实际际结果(例如返返回值、测测试后状状态)与与文件的的预期结结果。如如果结果果不匹配配,它将将测试标标记为失失败;如如果SUUT抛出出异常,它它捕获异异常并相相应地标标记测试试然后继继续。第第四阶段段,解释释程序进进行必要要的夹具具拆卸,然然后继续续执行文文件中的的下一个个测试。需要一系列列复杂步步骤的测测试可以以简化为为数据驱驱动测试试文件中中的一行行数据。Fit是写数据驱动测试架构的普遍示例。18.3.2 使用时时机数据驱动测
37、测试是记记录测试试和脚本本测试的的可选策策略。然然而,它它也可以以用作脚脚本测试试策略的的一部分分。实际际上,回回放记录录测试时时,它们们就是数数据驱动动测试。数数据驱动动测试是是让业务务人员写写自动化化测试的的理想策策略。保保持数据据文件格格式简单单,就可可能让业业务人员员用数据据填充文文件并执执行测试试,而无无需要求求技术人人员写各各种测试试的测试试码。当有许多不不同的数数据值,同时又又希望使使用这些些值来执执行SUUT(其中每每个数据据值都要要执行相相同系列列的步骤骤)时,可以考考虑使用用数据驱驱动测试试作为脚脚本测试试的一部部分。通通常会发发现这种种相似性性会随着着时间的的推移而而变化
38、,因因此要先先重构到到参数化化测试,然然后重构构到数据据驱动测测试。也也可能在在具有不不同数据据值的不不同序列列中安排排一组标标准步骤骤,和在在递增的的表格测测试(参参见“参数化化测试”)中一一样。这这种方法法具有最最好的覆覆盖率,同同时需要要维护的的测试码码数量也也最少,如如果需要要,还可可以很方方便地添添加更多多测试。决定是否使使用数据据驱动测测试的另另一个因因素,是是配置数数据是不不是硬编编码或驱驱动要测测试的行行为。如如果使用用脚本测测试自动动化用于于数据驱驱动行为为的测试试,当配配置数据据改变时时,就必必须更新新测试程程序。这种行行为很不不正常,因因为它表表示,当当改变配配置数据据库
39、中的的数据时时,必须须将变更更提交给给源代码码库SSCM4 当然,也应该管理在版本控制库里的测试数据,但这个主题在另一本书中讨论,详情请参见RDb。让测测试变成成数据驱驱动,对对配置数数据或元元对象的的变更就就由对数数据驱动动测试的的变更驱驱动,这这是一4 当然,也应该管理在版本控制库里的测试数据,但这个主题在另一本书中讨论,详情请参见RDb。18.3.3 实现方方式说明明实现方式选选择取决决于是否否使用数数据驱动动测试作作为不同同的测试试策略或或作为基基于xUUnitt策略的的一部分分。使用用数据驱驱动测试试作为独独立的测测试策略略通常使使用开源源工具(例如FFit)或商业业记录测测试工具具
40、(例如如QTPP)。使使用数据据驱动测测试作为为脚本测测试策略略的一部部分可能能要实现现xUnnit内内的数据据驱动测测试解释释程序。不管选择哪哪种策略略,如果可可能,都应该该使用相相应的测测试自动动化架构构。这样样做可以以有效地地将测试试转换为为两个部部分:数数据驱动动测试解解释程序序和数据据驱动测测试文件件。这两两个部分分都应该该保持在在版本控控制之下下,以便便可以知知道它们们随着时时间推移移如何演演变,同同时还允允许收回回所有错错误的变变更。将将数据驱驱动测试试文件存存储在某某种类型型的库中中至关重重要,虽虽然这种种概念与与业务用用户不相相关。给给用户提提供数据据驱动测测试文件件授权工工
41、具(例例如FiitNeessee)可以以让这种种操作透透明,或或者可以以建立“用户友友好”库,例例如刚好好支持版版本控制制的文档档管理系系统。作为持续集集成过程程的一部部分运行行这些测测试,以便确确定曾经经通过的的测试没没有突然然失败,这样至至关重要要。没有有这样做做可能导导致缺陷陷进入未未检测到到的软件件,一旦旦检测到到缺陷,就就要付出出更多努努力来检检修。在在持续集集成过程程中包含含客户测测试要求求能够记记录通过过的客户户测试,因因为提交交所有代代码之前前不能确确保所有有客户测测试都通通过。一一种选择择是保持持两组输输入文件件,将通通过的测测试从“仍是红红色”文件迁迁移到“都是绿绿色”文件
42、中中,该文文件作为为自动构构建过程程一部分分用于回回归测试试。1. 变体体:数据驱驱动测试试架构(Fitt)使用数据驱驱动测试试作为测测试策略略时,应该考考虑使用用预制数数据驱动动测试架架构。WWardd Cuunniinghham最最初将FFit这这种架构构作为在在自动化化测试中中包含业业务用户户的方法法。虽然然Fitt通常用用于自动动化客户户测试,但但如果测测试数量量授权构构建必需需的夹具具,它也也可用于于单元测测试。FFit由由两部分分组成:架构和和用户创创建的夹夹具。FFit架架构是通通用数据据驱动测测试解释释程序,该解释释程序读读取输入入文件并并找出其其中的所所有表。它它在每个个表的
43、左左上单元元查找夹夹具类名名,然后后搜索该该类的可可执行测测试。当当它找到到类并读读取该表表的行和和列时,它它会创建建该类的的实例并并将控件件传递给给该实例例。可以以重写架架构定义义的方法法来指定定表中各各单元出出现的情情况。因因此,FFit夹夹具是适适配器,Fit调用它来解释数据表并调用SUT上的方法。Fit表也也可以包包含SUUT的预预期结果果。Fiit将指指定的值值与SUUT返回回的实际际值进行行比较。然而,与xUnit中的断言方法不一样,Fit在遇到第一个不匹配预期值的值时不会终止测试。相反,它给表中的各个单元涂上颜色,绿色单元表示与预期值相匹配的实际值,红色单元表示错误的或意料之外的
44、值。使用Fitt有几个个好处:与构建自己己的测试试解释程程序GGOF相比,要要写的代代码更少少。输出对业务务人员也也有意义义,而不不只是对对技术人人员有意意义。测试不会在在遇到第第一个失失败的断断言时停停止。FFit可可以用一一种能够够很容易易看出失失败模式式的方法法传达多多种失败败/错误。照现在的样样子,有有大量夹夹具类型型可以用用来子类类化或使使用。那么,为什什么不在在所有单单元测试试中都使使用Fiit取代代xUnnit呢呢?使用用Fitt的主要要不足如如下所述述:在构建Fiit夹具具之前,测测试场景景必须非非常易于于理解。因此需要将各种测试逻辑转换为表格表示法,这不太合适,特别是对习惯于
45、从过程思考的开发人员而言尤其如此。它适合拥有可以为客户测试写Fit夹具的测试者的情况,但这种方法不适合于真正的单元测试,除非测试者与开发人员的比例为11。这些测试在在每个测测试中都都要采用用相同的的SUTT交互逻逻辑5 表格数据必须在夹具建立或执行SUT阶段注入SUT,或者在结果验证阶段从SUT中检索。要要运行几几种不同同类型的的测试,很很可能就就必须为为每种类类型的测测试构建建一个或或多个不不同的夹夹具。构构建新的的夹具通通常比写写一些测测试方法法更复杂杂。虽然然现在有有许多不不同夹具具类型可可以用来来子类化化或使用用,但这种种使用方方法与要要求开发发人员学学习以便便完成任任务的方方法不同同
46、。尽管管这样,也也不是所所有单元元测试都都要使用用Fi5 表格数据必须在夹具建立或执行SUT阶段注入SUT,或者在结果验证阶段从SUT中检索。Fit测试试通常没没有集成成到开发发人员通通过xUUnitt运行的的回归测测试中。相反,这些测试必须单独运行,这样每次检入时它们有可能不运行。有些团队将Fit测试作为其持续集成构建过程的一部分,以部分解决这个问题。有的团队报告已经拥有辅助“客户”构建服务或运行所有客户测试的服务器。当然,这些些问题都都是可以以克服的的。总的的来说,xUnnit架架构比FFit架架构更适适合于单单元测试试;Fitt架构比比xUnnit架架构更适适合于客客户测试试。2. 变体
47、体:天真xUUnitt测试解解释程序序当需要作为为基于xxUniit的脚脚本测试试策略的的一部分分运行的的数据驱驱动测试试的数量量较小时时,最简单单的实现现方式是是写包含含循环的的测试方方法,该循环环从文件件读取一一组输入入数据值值以及预预期结果果。这与与将单个个参数化化测试及及其所有有调用者者转换为为表格测测试(参参见“参数化化测试”)具有有相同意意义。和和表格测测试一样样,这种种构建数数据驱动动测试解解释程序序的方法法会产生生具有许许多断言言的单个个测试用用例对象象。它有有以下几几种结果果:整组数据驱驱动测试试将计算算为单个个测试。因因此,将将一组参参数化测测试转换换为单个个数据驱驱动测试
48、试会减少少执行的的测试数数量。当遇到第一一个失败败或错误误时会停停止执行行数据驱驱动测试试。因此此,遗漏漏了许多多缺陷定定位。有有些xUUnitt变体允允许指定定失败的的断言不不中止测测试方法法的执行行。需要确保出出现失败败时,断言失失败能说说出正在在执行哪哪个子测测试。在循环中包包含trry/ccatcch语句句,同时包包含测试试逻辑然然后继续续代码执执行,这样可可以解决决最后两两个问题题。然而而,仍然然需要能能够以一一种有意意义的方方法报告告测试结结果(例例如,“失败子子测试11、3和6以及”)。要更方便地地扩充数数据驱动动测试解解释程序序来处理理相同数数据文件件中几种种不同类类型的测测试
49、,可以包包含“动词”或“动作单单词”作为数数据文件件中各条条目的一一部分。解解释程序序可以依依据动作作单词分分派给不不同的参参数化测测试。3. 变体体:测试套套件对象象生成器器让测试套件件工厂(参见“测试枚枚举”)上的suitte方法法伪造与与测试发发现内置置机制相相同的测测试套件件对象结结构,就可以以避免与与天真xxUniit测试试解释程程序相关关的“第一次次失败时时就停止止”这个问问题。要要这样做做,可以以为数据据驱动测测试文件件中的每每个条目目构建测测试用例例对象,然然后用特特定测试试的测试试数据初初始化每每个对象象6 这与xUnit的内置测试方法发现(参见“测试发现”)机制的运行原理类
50、似,但后者接受的是测试数据和测试方法名称。构建建测试套套件时,该该对象知知道如何何执行具具有加载载数据的的参数化化测试。这这样即使使第一个个测试用用例对象象遇到断断言失败败,也可可以确保保数据驱驱动测试试能够继继续执行行。因此此,可以以让测试6 这与xUnit的内置测试方法发现(参见“测试发现”)机制的运行原理类似,但后者接受的是测试数据和测试方法名称。4. 变体体:测试套套件对象象模拟器器构建测试套套件对象象的方法法之一是是创建像像一个对对象那样样运行的的测试用用例对象象。要求求运行时时该对象象会阅读读数据驱驱动测试试文件并并重新执执行所有有测试。它它必须捕捕获参数数化测试试抛出的的所有异异
51、常,然然后继续续执行后后面的测测试。完完成后,测测试用例例对象必必须给测测试运行行器报告告测试、失失败和错错误的准准确数量量。它也也要实现现测试运运行器依依赖的标标准测试试接口上上的其他他方法,例例如返回回“套件”中测试试的数量量、返回回套件中中每个测测试的名名称和状状态(关关于图形形测试树树探测器器,参见见“测试运运行器”)。18.3.4 启发示示例假设有一组组测试如如下所示示:def ttestt_exxtreefsourcceXmml = expeccteddHtmml = abccgenerrateeAnddVerrifyyHtmml(ssourrceXXml,exppecttedHH
52、tmll,)enddef ttestt_teestttermm_noormaalsourcceXmml = expeccteddHtmml = abccgenerrateeAnddVerrifyyHtmml(ssourrceXXml,exppecttedHHtmll,)enddef ttestt_teestttermm_plluraalsourcceXmml = expeccteddHtmml = abccsgenerrateeAnddVerrifyyHtmml(ssourrceXXml,exppecttedHHtmll,)end如下定义参参数化测测试可以以简化这这些测试试:def ggene
53、eratteAnndVeeriffyHttml( soourcceXmml, exppecttedHHtmll,messaage, &bblocck) mockFFilee = MocckFiile.neww sourcceXmml.ddeleete!(t)handdlerr = settupHHanddlerr(soourcceXmml, mocckFiile )blockk.caall unllesss bllockk = niil handdlerr.prrinttBoddyCoonteentss actuaal_hhtmll = mocckFiile.outtputt asserrt_
54、eequaal_hhtmll(exppecttedHHtmll, actuaal_hhtmll, messaage + htmml ooutpput) actuaal_hhtmll end这些测试存存在的主主要问题题是,这些测测试还是是用代码码写的,而而实际上上它们之之间的唯唯一不同同是用作作输入的的数据。18.3.5 重构说说明当然,解决决方案是是将参数数化测试试的公共共逻辑提提取到数数据驱动动测试解解释程序序中,并将所所有参数数集合到到任何人人都可以以编辑的的单个数数据文件件中。需需要写“主”测试,它它知道从从哪个文文件阅读读测试数数据,知知道阅读读和分析析测试文文件的一一些逻辑辑。该逻逻
55、辑可以以调用现现有的参参数化测测试逻辑辑,并让让xUnnit记记录测试试执行统统计。18.3.6 示例:使用XMML数据据文件的的xUnnit数数据驱动动测试本示例中,使用XMML形式式文件。每每个测试试都由ttestt元素组组成,它它有三个个主要部部分:告诉数据驱驱动测试试解释程程序要运运行哪种种测试逻逻辑的动动作(例例如,ccrosssreef)。传递给SUUT的输输入,这这里是ssourrceXXml元元素希望SUTT(在exxpeccteddHtmml元素素中)生生成的HHTMLL这三个部分分包装在在tesstsuuitee元素里里: croossrref aabc croossrre
56、f aabc croossrref aabcss 所有拥有XXML编编辑器的的人都可可以编辑辑这个XXML文文件,而不必必担心引引入测试试逻辑错错误。数数据驱动动测试解解释程序序封装用用来验证证预期结结果的所所有逻辑辑,使用用的方法法与参数数化测试试使用的的方法相相同。出出于查看看的目的的,通过过定义样样式表对对用户隐隐藏了XXML的的结构。另另外,许许多XMML编辑辑器会将将XMLL转换为为基于表表格的输输入以简简化编辑辑。为了避免处处理操作作XMLL的复杂杂性,解释程程序也可可以使用用CSVV文件作作为输入入。18.3.7 示例:使用CSSV输入文文件的xxUniit数据据驱动测测试使用C
57、SVV文件,前面示示例中的的测试则则如下所所示:ID, Acttionn, SSourrceXXml, ExxpeccteddHtmml Extreef,ccrosssreef,abbc TTermm,crrosssreff,aabc TTermms,ccrosssreef,abbcs这个解释程程序相对对简单,并且建建立在为为参数化化测试而而开发的的逻辑之之上。它它阅读CCSV文文件,并并使用RRubyy的spllit函函数分析析各行。def ttestt_crrosssreffexecuuteDDataaDriivennTesst CroossrrefHHanddlerrTesst.ttxt
58、 enddef eexeccuteeDattaDrriveenTeest fillenaame dataFFilee = Fille.oopenn(fiilennamee) dataFFilee.eaach_linne ddo | liine |desc, acctioon, parrt2 = llinee.spplitt(,) sourcceXmml, exppecttedHHtmll, llefttOveer = paart22.spplitt(,) if ccrosssreef=acctioon.sstriipgenerrateeAnddVerrifyyHtmml ssourrceXXm
59、l, exxpeccteddHtmml, desscelse # nnew veerbss ggo bbefoore herre aas eelsiifssreporrt_eerroor( unnknoown acttionn + acctioon.sstriip ) end end end除非将geenerrateeAnddVerrifyyHtmml的实实现方式式改变为为捕获断断言失败败和增加加失败计计数器,这种数数据驱动动测试才才会在遇遇到第一一个失败败断言时时停止执执行。而而回归测测试可以以接受这这种行为为,虽然然它没有有提供很很好的缺缺陷定位位。18.3.8 示例:使用Fiit架构构的
60、数据据驱动测测试如果要进一一步控制制用户的的行为,可以创创建Fiit“列夹具具”,其中有有id、acttionn、souurcee XMML和exppectted Htmml()各列,让用户户编辑HHTMLL Weeb页面面(如表188-1所所示)。表18-11 使用用Fitt架构构构建的数数据驱动动测试Com.xxuniitpaatteens.fitt.CroossrrefHHandleerFiixtuureidactioonsourcce XXMLexpecctedd HttrnllOExtreefcrosssreff?abcc?TestTTermmcrosssreff?abbc?Test
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 孕妇用品售后服务模式创新-洞察分析
- 网络广告伦理问题-洞察分析
- 医疗信息化应用分析-洞察分析
- 移动学习行为分析-洞察分析
- 药品质量控制方法-洞察分析
- 特色农产品冷链技术-洞察分析
- 移动医疗与远程教育-洞察分析
- 虚拟现实在网页设计中的优势-洞察分析
- 循环利用产业链构建-洞察分析
- 云端网络功能虚拟化-洞察分析
- 二年级数学兴趣小组活动记录全记录
- 车辆维修保养服务方案(完整版)
- 中药硬膏管理规定、操作流程及评分标准(共3页)
- 单值移动极差图(空白表格)
- 电镀生产工序
- 塔城地区事业单位专业技术各等级岗位基本任职资格条件指导意见
- 初中语文课外古诗文董仲舒《春秋繁露》原文及翻译
- (完整)(电子商务软件研发及产业化建设项目)监理月报(201202)
- 旅游出行安全告知书
- (完整版)服装生产工艺流程图汇总,推荐文档
- 优秀团支部申报表
评论
0/150
提交评论