TestNG官方文档中文版1-介绍.docx

上传人:李司机 文档编号:6768550 上传时间:2024-01-29 格式:DOCX 页数:22 大小:93.93KB
返回 下载 相关 举报
TestNG官方文档中文版1-介绍.docx_第1页
第1页 / 共22页
TestNG官方文档中文版1-介绍.docx_第2页
第2页 / 共22页
TestNG官方文档中文版1-介绍.docx_第3页
第3页 / 共22页
TestNG官方文档中文版1-介绍.docx_第4页
第4页 / 共22页
TestNG官方文档中文版1-介绍.docx_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《TestNG官方文档中文版1-介绍.docx》由会员分享,可在线阅读,更多相关《TestNG官方文档中文版1-介绍.docx(22页珍藏版)》请在三一办公上搜索。

1、最近决定开始使用TestNG来替代junit,作为未来的单元测试基础组件。google了一下没有找到好的详细的文档,最后发现官网上的文档其实挺全的,决定翻译一下。TestNG的官方文档请见:1 .介绍TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器)。编写一个测试的过程有三个典型步骤:* 编写测试的业务逻辑并在代码中插入TeSINGannotation* 将测试信息添加到文件或者中* 运行TeStNG在欢迎页面上可以找到快速入门示例。下面是这篇文档使用的概念:* suite由xml

2、文件描述。它包含一个或多个测试并被定义为suite标签* test由test描述并包含一个或者多个TCStNG类* TestNG类是包含至少一个TeStNGannotation的java类,由class标签描述并包含一个或多个测试方法* 测试方法是源文件中带有TCStd注释的java方法TeStNG测试可以被QBeforeXXX和AfterXXXannOtatiOnS配置,容许在特定点的前后执行一些java逻辑,这些点上面已经列出。这份手册的剩余部分将讲述以下内容:* 所有的annotation列表并带有简短说明,为TeStNG的多种功能性提供参考,你可能需要参考为每个annotation提供

3、的代码片段来学习细节。*文件描述,它的语法和如果指定它。*多个特性的详细列表和怎样结合annotation和来使用它们注:上面的内容很简短,但是请注意其中的一些细节。1 .TeStNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试到集成测试这个是TeStNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。设计目标的不同,对比junit的只适合用于单元测试,TeStNG无疑走的更远。可以用于集成测试,这个特性是我选择TeStNG的最重要的原因。2 .测试的过程的三个典型步骤,注意和junit(4.0)相比,多了一个将测试信息添加到文件或者测试信息尤其是测试数据不再写死在测试代码中,

4、好处就是修改测试数据时不需要修改代码/编译了,从而有助于将测试人员引入单元测试/集成测试。3 .基本概念,相比junit的TestCaseZTestSuite,TestNG有suite/test/testmethod三个级别,即将test/testmethod明确区分开了。junit中的TestCase将IeStteslmethod混合,比较容易让人概念不清晰,尤其是新手。TeStNG官方文档中文版(2)-annotationTeStNG的官方文档的中文翻译版第二章,原文请见2-Annotation这里是TestNG中用到的annotation的快速预览,还有它们的属性。QBeforeSuit

5、e: eAfterSuite: BeforeTest: QAfterTest: BeforeGroups:被注释的方法将在所有测试运行前运行被注释的方法将在所有测试运行后运行被注释的方法将在测试运行前运行被注释的方法将在测试运行后运行被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用前立即执行。eAfterGroups:被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调用后立即执行。BefOreClass:AfterClass:QBeforeMethod:AfterMethod:属性:alwaysRun被注释的方法将在当前

6、类的第一个测试方法调用前运行。被注释的方法将在当前类的所有测试方法调用后运行。被注释的方法将在每一个测试方法调用前运行。被注释的方法将在每一个测试方法调用后运行。对于每个bufore方法(beforeSuite,beforeTest,beforeTestClass和beforeTestMethod,但是不包括beforeGroups):如果设置为true,被配置的方法将总是运行而不管它属于哪个组。对于after方法(afterSuite,afterClass,.):如果设置为true,被配置的方法甚至在个或多个先调用的方法失败或被忽略时也将运行。dependsOnGroups dependsO

7、nMcthods enabledgroupsinherItGroups annotation指定的组这个方法依赖的组列表这个方法依赖的方法列表这个类的方法是否激活这个类或方法所属的分组列表如果设置为true,这个方法被属于在类级别被TeSttaProvider标记一个方法用于为测试方法提供数据。被注释的方法必须返回ObjCCt口口,其中每个ObjeCt可以指派为这个测试方法的参数列表。从这个DataPrOVider接收数据TeSt方法需要使用一个和当前注释相同名称的(JataProvider名称name这个DataProvider的名称FaCtory标记方法作为一个返回对象的工厂,这些对象将被

8、TeStNG用于作为测试类。这个方法必须返回ObjectParametersvalue描述如何传递参数给TeSt方法用于填充这个方法的参数的变量列表TeSt标记一个类或方法作为测试的一部分alwaysRun如果设置为true,这个测试方法将总是运行,甚至当它依赖的方法失败时。dataProvider这个测试方法的dataprovider的名称dataProviderClass用于查找dataprovider的类。如果不指定,将在当前测试方法所在的类或者它的基类上查找dataprovidero如果这个属性被指定,则dataprovider方法需要是指定类的static方法。dependsOnGr

9、oups当前方法依赖的组列表dependsOnMethods当前方法依赖的方法列表description当前方法的描述enabled当前类的方法/方法是否被激活expectedExceptions测试方法期望抛出的异常列表。如果没有异常或者抛出的不是列表中的任何一个,当前方法都将标记为失败.groups当前类/方法所属的组列表invocationCount当前方法被调用的次数SuccessPercentage当前方法期望的成功率sequential如果设置为true,当前测试类上的所有方法保证按照顺序运行。甚至测试们在ParaIIel=true的情况下.这个属性只能用于类级别,如果用于方法级别

10、将被忽略。timeut当前方法容许花费的最大时间,单位毫秒。threadPoolSize当前方法的线程池大小。方法将被多线程调用,次数由InvocationCount参数指定注意:如果invocationCounl没有指定则这个属性将被忽略注:上面是TestNG中用到的annotation列表,从中我们可以看到TestNG提供的一些特性1. before方法和after方法带来了足够丰富的测试生命周期控制2. dependsOnGroups/dependsOnMethods提供了依赖检查机制,并可以严格控制执行顺序3. DataProvider使得对同一个方法的测试覆盖变的非常轻松,非常适合进

11、行边界测试,只要给出多种测试数据就可以针对一个测试方法进行覆盖4. expectedExceptions使得异常测试变的非常轻松5. invocationCount/threadPoolSize终于可以简单的直接进行多线程测试了,这个绝对是junit的超级弱项,回想junit中那个万恶的(0).6. timeut终于不用死等然后手工强行关闭测试,TeStNG想的太周到了TeStNG官方文档中文版(3)TeStNG的官方文档的中文翻译版第3章,原文请见3-调用TestNG由几种不同方法:* 使用文件* 使用ant* 从命令行这节描述的格式(文档的后面会讲到anl和命令行)。当前的DTD文件可以从

12、官方找到:。(为了方便使用,你可能更喜欢浏览HTML版本).下面是文件的一个例子:!DOCTYPEsuiteSYSTEM你可以指定包名替代类名:在这个例子中,TeStNG将在包e中查找所有的类,并只保留带有TeStNGannOtatiOn的类。你同样可以指定包含或不包含的组和方法:你同样可以在中定义新的组,指定属性的额外详细情况,比如是否并行运行测试,使用多少线程,是否运行junit测试,等等.请查看DTD文件了解完整的特性列表。TeStNG官方文档中文版(4)-运行TeStNG4-运行TeStNGTestNG可以以不同的方式调用:* Commandline* ant* Eclipse* In

13、telliJ,sIDEA1)命令行假设你已经将TeSING加入到CIaSSpath,调用TeSlNG最简单的方法事下面的:javag.TestNG.必须指定最少一个描述你试图测试的TeStNGSUite的Xnll文件。另外,下面的命令行参数可以使用:命令行参数列表选项参数文档说明-d一个目录生成报告的目录(test-OUtPUI)-sourcedir分号隔开的目录列表带有javadoc注释的测试源文件目录.这个选项只在使用javadoc类型的annotation时才有效.(例如src/test”orz,srctestorgtestngeclipse-plugin;srctest/Orgtest

14、ngtestng).-testclass可以在classpath路径中找到的逗号分隔的类列表。逗号分隔的类文件列表(例如Testi,.test2z,).-groups逗号分隔的组列表要运行的组列表(例如“windows,linux,regression*).-excludegroups逗号分隔的组列表不想包含在这次运行中的组列表-testrunfactory可以在classpath中找到的java类指定测试的runner.这个类需要实现接口g.TTestRunnerFactory.-listener可以在classpath路径中找到的逗号分隔的类列表。指定测试的listener.这个类需要实现

15、接口g.ITestListener-parallelmethodstests如果指定,设置运行测试时如何使用并发线程的默认机制.如果不设置,默认机制是完全不使用并发线程。这个设置可以被suite定义覆J11L.-threadcount并发测试运行时默认使用的线程数用于设置并发测试时默认的线程数.只在并发模式被选择时才生效(例如,打开-ParaIIel选项).这个设置可以被SUite定义覆盖-suitename测试套件使用的默认名称.指定在命令行上定义的测试套件的名称。如果文件或源代码指定了另外一个不同的套件名称,这个选项将被忽略。可以创建带空格的套件名称,如果在名称前后加双引号如Iikethi

16、s.-testname测试使用的默认名称.指定在命令行上定义的测试的名称。如果文件或源代码指定了另外一个不同的测试名称,这个选项将被忽略。可以创建带空格的测试名称,如果在名称前后加双引号如likethis.-reporter扩展配置用于自定义报告Iistenner.类似TiStener选项,除了容许reporter示例上由javabean形式的配置.例如:-reporter.MyReporter:methodFi1ter=*insert*,enableFi1tering=true可以通过不带任何参数宜接调用TestNFG来获得这个文档。可以将命令行开关写到txt文件中,例如c:,然后告诉TCS

17、tNG使用这个文件类找到参数:C:morec:-dtest-outputC:javag.TestNGc:另外,可以通过jvm的命令行来传递参数给TCStNG,例如java.classpath-z,c:/build;c:/java/classes;,g.TestNGTestNG能够理解的参数属性类型文档.classpath分号分隔的包含测试类的一系列目录如果这个属性被设置,TestNG将使用它替代从CIaSSpath来查找测试类.如果你正在使用在xml文件里面的包标签并且在classpath路径中由很多类而大部分都不是测试类的时候比较方便举例:javag.TestNG-groupswindows

18、,Iinux-testclass.MyTest注意ant任务和容许用更多的参数来启动TestNG(包含的方法,指定的参数,等等),因此可以认为命令行适用于学习TestNG并且想快速入门。2)Ant可以这样定义TestNG的ant任务:taskdefresource=*testngtasks*classpath=/)这个任务运行TeStNG测试,并且通常是在单独的jvm中。接受下面的属性:属性名描述是否必须annotations字符串JDK或者JaVadoc.定义测试适用的注释类型.如果使用Javadoc”,则需要同时指定sourcedir.果适用jdkl. 4则默认为Javadoc”不是必须.

19、如果适用jkd5则默认为“JDK”,如Classfilesetref classpath Classpathref dumpCommand enableAssert faiIureProperty有效. 不是必须.Haltonfailure 默认false Haltonskipped 必须,默认false groups excludedgroups jvm listeners要运行的测试类的FileSet结构的引用.要运行的测试的PATHTike结构.要运行的测试的PATHTike结构的引用.打印TestNG启动命令.不是必须,默认false开启JDK1.4的断言.不是必须,默认true失败发

20、生时要设置的属性的名称.只有Haltonfailure没有设置时才如果测试运行期间发生失败,停止构造过程.不是必须,如果发生至少一次测试跳过,停止构造过程.不是要运行的组列表,空格或逗号分隔排除在外的组列表,空格或逗号分隔使用的jvm,将被()运行java逗号或空格分隔的全路径类列表,需要实现g.ITestListener或g.!Reporter不是必须不是必须,默认输出到Outputdir报告输出目录test-output.SkippcdProperty 没有设置时才使用 sourcedir annotations)当发生测试被跳过时设置的property的名称.只有当Haltonskipp

21、ed不是必须用于jdkl.4测试的PATH-Iike结构(使用JavaDOC形式的Sourcedirref用于jdkl.4测试的PATH-Iike结构的引用(使用JavaDoc形式的annotations)SuiteRunncrClassTeStNG启动器的全路径名称不是必须.默认使用g.TestNGparallel运行测试时使用的并行模式-methods或者tests不是必须-如果没有指定,并行模式不被选择threadCount运行时使用的线程数量。如果并行模式被同时指定否则忽略。默认1testjar包含测试和套件定义的jar包路径timeut所有测试必须运行完成的最大超时时间,单位亳秒Us

22、eDefaultListeners WorkingDir Xmlfilesetref suitename是否使用默认监听器和报告器.默认true.运行TestNG前ant任务应该转移到的目录。用于要测试的套件定义的FileSet结构的引用设置测试套件的默认名称如果在suite的XmI文件或者源代码中都没有被定义。不是必须,默认设置为“Antsuite”testname设置测试的默认名称如果在suite的xml文件或者源代码中都没有被定义。不是必须,默认设置为Anttest”属性classpath,Classpathref或者内嵌的classpath必须设置一个,用于提供测试的classpath

23、属性XmIfiIeSetref,Classfilesetref或者内嵌的xmlfileset,分别的classfileset必须使用用来提供测试注意:如果使用jdkl.4,属性attributessourcedir,Sourcedirref或者内嵌的sourcedir必须提供.注意:使用classfileset并不自动按添加测试类到CIaSSPath:需要报告这些在ClaSSPalh中的任务要工作的类内嵌元素classpathtestng任务支持一个内嵌的classpath元素来提供PATHTike的结构.bootclasspathbootstrap类文件的位置可以用这个PATH形式的结构指定

24、-如果fork没有设置则被忽略xmlfileset套餐定义O可以通过一个FiItSet结构传递给任务classfilesetTeStNG可以直接在类上运行,同样支持FiItSet结构sourcedirPATH形式的结构,用于jdkl.4的测试,使用javadocannotationjvmarg通过内嵌的jvmarg元素将额外的参数传递给新的虚拟机,例如:testngjvmargValUe=Ier=NONE”/sysproperty使用内嵌的元素来指定类需要的系统属性。在测试的执行期间虚拟机可以获取这些属性。这个元素的属性和环境变量相同。将运行测试并且使得测试可以访问basedir属性repor

25、ter内部的元素是一个可选的方式,用于注入自定义的报告监听器,容许用户为调整运行时的报告期行为而这个元素强制要求设置CIaSSname属性,指示自定义监听器的类。为了设置报告期属性,元素可以包含多个内嵌的property)元素来提供name和value属性,如下所示:propertyname=ICthOdFiIterValUC=insert*/propertyname=*enabIeFilteringz,ValUe=true/publicclassMyReporterpublicStringgetMethodEilter().publicvoidSetMethodFiIter(Stringme

26、thodFilter).publicbooleanIsEnableFilteringOpublicvoidSetEnableFiItering(booleanenableFiltering).)请注意这里仅仅支持有限的属性类型:String,int,boolean,byte,char,double,float,long,short.env可以通过内嵌的cnv元素给TeStNG的单独的虚拟机传递指定的环境变量。要查阅env元素属性的详细描述,请查看ant的exec任务的描述。举例:SuitexmltestngClasspathref=*OUtPUtDir=$t.dirWSoUrCedir=$.d

27、irhaltnfaiIUre=truexmlfilesetdir=$includes=/)ClassFileSetTeStNG官方文档中文版(5)-测试方法/类和组5-Testmethods,TestclassesandTestgroups5.1-TestgroupsTeStNG容许执行复杂的测试方法分组。不仅可以申明方法属于组,而且可以指定分组包含其他分组。然后TeStNG可以被调用,并被要求包含某些分组和排除其他的分组。这将提供怎样划分测试的最大弹性,并且如果想运行两个不同的测试装置不需要重新编译。例如,非常普遍的需要至少两个种类的测试*Check-intests.这些测试将在提交新代码之

28、前运行.它们典型的被要求快速而且仅仅确认没有基础功能被破坏。Functionaltests.这些测试将覆盖所有的软件功能,并且必须运行至少1天,尽管理想的是连续运行.代表性的,check-in测试是功能性测试的子集。TeStNG容许用非常直接的方式说明这个。例如:可以这样构造测试,申明完整的测试类属于functest组,另外两个方法属于组“checkintest”:publicclassTestlTest(groups=functest,checkintest)publicvoidtestMethodl()Test(groups=(functest,checkintest)publicvoid

29、testMethod2()Test(groups=functest)publicvoidtestMethod3O)调用TeStNG,使用将运行在类中的所有测试方法,如果使用checkintest调用则将只运行testMethodl。和testMethod20.这里由其他例子,这次使用正则表达式。假设某些测试方法可能无法在LinUX上运行,测试将是类似如此:TeStpublicclassTestlTest(groups=intest)publicvoidIestWindowsOnly()Test(groups=intest)publicvoidtestLinuxOnly()Test(groups

30、=est)publicvoidtestWindowsToo()你可以使用下面的文件只启动Windows方法:注意:TeStNG使用正则表达,而不是WildlnaIs。注意这个差别。Methodgroups同样可以包含或排除个别方法:这在需要使莫个单独的方法失效而不想重新编译时非常方便,但是不建议太多的使用这个机制,因为这将可能破坏你的测试框架如果你开始重构你的java代码(标签中使用的正则表达式可能不再匹配你的方法)5.2-Groupsofgroups“functest“itselfwillcontainthegroupswindowsandlinuxwhile“checkintestwill

31、onlycontain“windows”.Hereishowyouwoulddefinethisinyourpropertyfile:组可以包含其他组。这些组被称为“MetaGroups例如,你可能想定义一个all组,包括checkintest和functest。functest“自身将包含组“windows和linux,而checkintest将包含windows.5.3-ExclusiongroupsTestNG容许包含组也容许排除组.例如,当由因为最近的修改而临时破坏的测试而又没有时间去修复它们时非常有用。无论如何,你想要干净的运行功能性测试,因此你想要是这些测试失效,但是记住它们重新被

32、激活。一个简单的解决这个问题的方法是创建一个称为broken的组并让这些测试方法归属它。例如,在上面的例子中,我知道testMethod2()现在被破坏了,所有我想关闭它:Test(groups=checkintest,broken)publicvoidtestMethod2()现在我所想要做的只是在运行中排除这个组:testname=z,Simpleexample”)用这种方法,我将得到一个干净的测试运行,同时记录了那些被破坏并想要后续修复的测试。注意:你也可以通过使用在TeStandBefOre/Afterannotations上的enabled”属性在个体的层面上关闭测试,5.4-Par

33、tialgroups你可以在类的级别上定义组,然后在方法的层次上添加组:Test(groups=checkin-test”)publicclassAll(Test(groups=func-test)publicvoidmethodi()(.)publicvoidmethod2().)在这个类中,method2()属于组checkin-test,在类的级别定义。而methodl()同时属于“checkin-test和func-test”.TeStNG官方文档中文版(6)一参数5.5-Parameters测试方法不要求是无参数的。你可以在每个测试方法上使用任意数量的参数,并指示testNG传递正确

34、的参数。有两种方式用于设置参数:使用或者编程式。5.5.1-Parametersfrom如果你要为你的参数使用简单值,你可以在你的中明确指定:Parameters(“first-name)TeStpublicvoidCestSingleString(StringfirstName).printIn(zzInvokedtestString+firstName);assertCedric”,equals(firstName);在这个代码中,我们明确指定java方法的参数“firstName”应该接收名为“firstFame”xml参数的值。这个Xnd参数在中定义:suitename=Mysuite

35、”)testnam。=SimPIeexample”)同样的方法可以用于注解Before/After和FaCtory:Parameters(“datasource,jdbcDrivcr)QBeforeMethodpublicvoidbeforeTest(Stringds,Stringdriver)m_dataSource=;/lookupthevalueofdatasourcemjdbcDriver=driver;这次,两个java参数ds和driver将分别接收被设置给属性datasource和jdbc-driver的值。参数可以通过可选注解来声明为可选:Parameters(db)TeStp

36、ublicvoidtestNonExiStentParameter(Optional(z,mysq/)Stringdb)如果在文件中没有找到名为db的参数,测试方法将接受在Optional注解中指定的默认值:mysqlParameters注解可以在下面位置使用:*在任何有Test,BeforeAfter或者QFactory注解的方法上*在测试类的最多一个构造函数上。这种情况下,当TeStNG需要实例化测试类时,他将调用这个特别的带有初始化为中指定的值的参数的构造函数。这个特性可以被用于初始化类内部的值域为将用于测试方法的值。注意:*xml参数被以在注解中出现的相同顺序映射到java参数,如果参

37、数数量不匹配testNG将发生错误。*参数是有范围的。在中,你可以在suite标签或者test标签下声明参数。如果两个参数同名,在test标签下定义的参数优先。非常适用于这样的场合:需要指定一个应用于所有测试的参数,但是又希望在特定测试用覆盖它的值。5. 5.2-ParameterswithDataProviders在中指定参数,对于以下情况是不够的:*不使用*需要传递复杂参数,或者参数需要从java中创建(复杂对象,从属性文件或者数据库中读取的对象)在这种情况下,你可以使用DataProVider来提供你测试需要的数值。DataProvider是类中的一个返回对象数组的数组的方法。这个方法带

38、有DataProVider注解:这个方法将提供数据给任何声明它的DataProvider名为“test/的测试方法DataProvider(name=testl)publicObjectCreateDatalOreturnnewObject“Cedric”,newInteger(36),Anne”,newInteger(37),;)这个方法声明它的数据将由名为“testl的DataProvider提供Test(dataProvider=testl)publicvoidVerifyDatal(Stringnl,Integern2).println(nl+n2);将打印Cedric36Anne37

39、TCSt方法用dataProvider属性来指定它的DataProvider0这个名字必须符合同一个类中用DataProvider(name=.注解的方法,它们要使用同一个匹配的名字。默认,将在当前类或者它的基类中查找dataprovider。如果你想将dataProVider放置到另一个类中,需要将这个dataProVider方法设置为静态方法,并在dataProviderClass属性中指定在哪个类中可以找到这个方法。publicstaticclassStaticProviderQDataProvideNname=create)publicstaticObjectCreateData()returnnewObjectnewObjectnewInteger(42)publicclassMyTestTest(dataProvider=create”,dataProviderClass=)publicvoidtest(Integern)/)DataProvider方

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号