testng单元测试实例,java+selenium+testNG的测试用例

  testng单元测试实例,java+selenium+testNG的测试用例

  在每个现代软件包的构建阶段,测试都扮演着核心角色。您首先编写代码,然后在有时间时测试它(或者根本不测试它)的日子已经一去不复返了,因为大多数

  现在,几个开发人员意识到有必要采用编码和测试交织的软件方法论,以便尽早发现bug,并在开发过程的开始阶段识别主要风险。

  JUnit超越了其他测试框架,促进开发人员理解测试的目的,尤其是单元测试。JUnit凭借着相当简单、实用、严谨的架构,已经能够“感染”一大批开发者。(有关“通过测试感染”的更多信息,请参见

  参考资料。)JUnit用户已经了解了一些单元测试的基本规则:

  每一段代码都必须经过测试。只要有可能,代码测试必须独立进行(例如,使用类似

  模拟等技术)。

  软件必须易于测试也就是说,

  写的时候,想想测试。

  然而,随着开发人员对测试的信任增加,JUnit的简单性和严格性将他们分成了两个对立的派别。一方面,一些人坚信JUnit的简单性是必不可少的,以不断提醒程序员软件也必须保持简单(这被称为KISS原则,代表

  保持简单,傻逼);另一方面,有些人认为JUnit不简单而是简化了,所以他们希望从测试框架中获得新的高级功能、更大的灵活性和更强的能力。JUnit的一些特殊特性是为了回应这个群体的一些具体批评而引入的:

  由于Java语言的单一继承性,必须对其进行扩展。

  TestCase类非常有限。

  不能将参数传递给JUnit的测试方法,也不能将参数传递给

  设置()和

  tearDown()方法传递参数。

  执行模型有点奇怪:每次执行一个测试方法,测试类都要重新实例化。在一个复杂的项目中管理不同的测试套件是非常复杂的。

  TestNG,TestNG的创造者

  的创建者是Cedric Beust,他在Java编程领域非常有名,是EJB 3专家组的成员,其他流行的开源项目(如

  EJBGen和Doclipse的创造者)。TestNG是根据Apache软件许可条款发布的,可以从它的网站上下载(参见参考资料中该网站和Cedric网站的链接)。

  测试

  的新测试框架是为应用程序编写单元测试。TestNG受JUnit启发,同时尽量保持后者的简洁;但是,TestNG

  旧框架的大部分限制都被消除了,因此开发人员可以编写更加灵活和强大的测试。因为TestNG借用了Java注释(以及JDK)

  5.0简介;有关这个新特性的更多信息,请参阅参考资料),因此本文也可以向您展示如何在真实的生产环境中使用Java语言的这个新特性。

  关于代码

  为了演示TestNG的用法,我将为这个广泛使用的开源库Jakarta Common Lang(包含一些用于处理和操作字符串、数字和Java对象的有用类)编写一些单元测试。潜在的

  在参考资料部分,您可以找到TestNG和Jakarta公共语言库的链接;如果你想在你自己的机器上练习这篇文章,这两篇文章都需要下载。

  能

  在两个不同的包中获取TestNG:一个包需要JDK 5.0,另一个包与Java语言1.4相关。

  版本兼容性。在测试时,它们使用稍微不同的语法:前者使用JDK 5.0符号,而后者使用旧的Javadoc风格符号。本文使用

  5.0版,所以在继续阅读本文之前,需要对标记有一个基本的了解;您可以在参考资料中找到关于这个主题的developerWorks参考资料的链接。但是,你应该知道

  仅在编译和运行测试时

  只需要JDK 5.0,所以你仍然可以用你喜欢的编译器来构建应用程序。实际上,您将使用从Jakarata项目的网站上下载的同一个。

  JAR文件来测试Jakarta公共语言库。关于使用Java平台TestNG版的更多细节可以在

  TestNG的网站。

  最后,点击本文顶部或底部。

  代码图标,下载

  J-TestNG-sample.zip文件,其中包含一些示例,并演示了如何使用TestNG作为Jakarta Commons Lang

  编写单元测试。在里面,你可以找到这里给出的大部分代码,以及一些其他的例子。阅读本文不需要这段代码,但它可以帮助您更深入地理解这里介绍的概念。

  返回页首测试开始得很快。

  NG的TestNG类是一个普通的老Java对象;您不需要扩展任何特殊的类,也不需要使用任何测试方法的命名约定:您只需要使用注释。

  @Test通知这个类的框架的方式是测试。清单1展示了实用程序类。

  StringUtils最简单的测试之一。它测试

  StringUtils的两种方法:

  IsEmpty()方法检测

  字符串为空;

  Trim()方法来自

  删除字符串两端的控制字符。注意,使用了Java指令。

  断言以检测错误条件。

  清单1。StringUtils类的测试用例

  包装测试;

  导入com . beust . TestNG . annotations . *;

  导入org . Apache . commons . lang . string utils;

  公共类StringUtilsTest

  {

  @测试

  public void是Empty()

  {

  断言string utils . is blank(null);

  断言string utils . is blank(“”);

  }

  @测试

  公共空修剪()

  {

  断言“foo”。equals(string utils . trim( foo );

  }

  }

  但是,在运行测试之前,您必须用一个特殊的XML文件配置TestNG,这个文件通常被命名为testng.xml。这个文件的语法非常简单,如清单2所示。这个文件首先定义了测试套件。

  我的测试套件,这个套件只包含一个测试。

  首先,该测试由以下人员进行

  StringUtilsTest类已完成。

  清单2。TestNG的配置文件

  !DOCTYPE suite系统 http://beust . com/TestNG/TestNG-1.0 . dtd

  套件名称=我的测试套件

  测试名称=首次测试

  班

  class name=tests。StringUtilsTest /

  /类别

  /测试

  /suite如果这个示例testng.xml文件看起来没有用(只有一个测试类),那么好消息是:这实际上是你定义测试套件的时候。

  唯一需要写的文件。还记得朱尼特的旧时光吗?那时,套件的定义可能分布在多个文件中:JUnit的

  TestSuite、属性文件,当然还有不可或缺的Ant构建文件。使用TestNG,所有必需的数据都集中在testng.xml文件中。不需要额外的。

  测试套件和构建文件。

  若要运行测试,请使用

  c编译该类,然后用下面的命令调用TestNG:

  java -ea -classpath。testng.jarcommons-lang-2.0 . jarcom . beust . TestNG . TestNG . XML此处,选项

  -ea告诉JVM处理断言(断言失败时抛出异常);运行这个例子只需要两个库,testng.jar和commons-lang-2.0.jar

  Com.beust.TestNG.TestNG是TestNG的主类。对于所有那些已经很高兴忘记的人。

  和java

  对于javac神秘语法的开发者来说,它还提供了一个有用的Ant任务。作为一个例子,清单3展示了本文中发布的示例应用程序的Ant构建文件。请注意听课

  Com.beust.testng.TestNGAntTask

  测试任务的定义及其在

  测试目标中一个相当简单的用法。

  清单3。带有TestNG任务的Ant构建文件

  项目名称= sample default= test basedir=,

  !-编译测试-

  路径id=cpath

  path element location= TestNG . jar /

  path element location= commons-lang-2.0 . jar /

  /路径

  目标名称=编译

  echo message=编译测试/

  mkdir dir=classes/

  javac debug=true

  source= 1.5 classpathref= cpath

  srcdir=src destdir=classes/

  /目标

  !-运行测试-

  taskdef name=testng

   com.beust.testng.TestNGAntTask

  classpathref=cpath/

  路径id=runpath

  path refid=cpath/

  pathelement location=classes/

  /路径

  目标名称=测试依赖=编译

  echo message=正在运行测试/

  TestNG fork= yes classpathref= runpath output dir= test-output

  文件集目录=src 包含=testng.xml/

  jvmarg值=-ea /

  /testng

  /目标

  /项目,例如

  如果一切正常,那么您应该在控制台中看到测试结果。此外,TestNG会在当前目录中自动创建一个测试输出。

  文件夹,并在其中创建了一个非常好的HTML报表。如果您打开报告并加载index.html,您可以看到类似于图1的页面。

  回到顶部来定义测试组

  TestNG的另一个有趣的特性是它定义测试组的能力。每个测试方法可以与一个或多个组相关联,但是您可以选择只运行一个测试组。要向测试组添加测试,只需将组指定为

  @使用以下语法测试标记的参数:

  @Test(groups={tests.string})在这个特定的示例中,您声明标记的方法属于

  Tests.string组。因为参数

  Groups是一个数组,所以可以指定多个组,组名用逗号分隔。例如,在示例应用程序中,您可以设置

  String、Number和boolean创建不同的测试,然后如清单4所示配置TestNG来有选择地运行它们。

  清单4。不同组的配置文件

  !DOCTYPE suite系统 http://beust . com/TestNG/TestNG-1.0 . dtd

  套件名称=我的套件

  测试名称=简单示例

  组

  奔跑

  include name=tests.string /

  include name=tests.math /

  exclude name=tests.boolean/

  /运行

  /组

  班

  .在此列出课程.

  /类别

  /测试

  /套件

  显然,当运行不同的测试组时,HTML报告可以在单个列表中显示所有的测试,或者在独立的列表中显示每个组的测试,这样可以立即了解问题的来源。

  返回顶部配置方法

  使用TestNG,不仅可以指定测试方法,还可以使用特殊的注释。

  @Configuration指定了类中的其他特定方法。这些方法被称为

  配置方法。有四种类型的配置:

  清单5展示了一些配置方法的例子。请注意,如果您使用组,那么配置方法也必须属于某个组。此外,这四种类型的配置方法并不相互排斥,因此可以将方法定义为同时属于一种或多种类型的配置方法。(有关示例,请参见

  AroundTestMethods()方法)。

  清单5。配置方法示例

  @ Configuration(beforestclass=true,groups={tests.workflow})

  公共void设置()

  {

  System.out.println(正在初始化.);

  }

  @ Configuration(after test method=true,beforeTestMethod=true,groups={tests.workflow})

  围绕TestMethods()的公共void

  {

  system . out . println(" Around Test ");

  }TestNG中的配置方法是JUnit的。

  设置()和

  tearDown()方法的增强版;它们的主要目的是为测试创建正确的执行上下文,并在测试用例执行后刷新数据。

  返回页首异常检测

  使用TestNG,您可以非常简单和容易地检测异常的发生。显然,您可以用JUnit做到这一点,但是正如您在清单6的例子中看到的,使用TestNG的

  @ExpectedExceptions注释可以让代码编写变得异常简单。

  @ExpectedExceptions批注表明框架可以容忍抛出的

  NumberFormatException是异常的,所以不应该视为故障。要查看一行代码中是否抛出了异常,可以直接将其添加到这行代码之后。

  断言虚假陈述。这意味着

  只有当在指定的行中抛出特定类型的异常时,您才能通过测试。

  清单6。使用TestNG进行异常检测

  公共类别数字测试

  {

  @Test(groups={tests.math})

  @ expected exceptions(numberformatexception . class)

  公共无效测试()

  {

  numberutils . create double( 12 . 23 . 45 );

  断言假;//不应该被调用

  }

  }

  页面顶部的结束语

  在本文中,我提供了TestNG的快速实用的介绍,目的是展示如何开始编写单元测试。然而,它不是一个完整的参考手册。TestNG还有许多其他非常有用的有趣特性:

  您可以将参数传递给测试方法和配置方法,并且可以用批注或在XML配置文件中声明参数。

  您可以在TestNG下的“兼容模式”中运行过去运行良好的Junit测试。

  您可以在测试组之间建立依赖关系,并确定它们的执行顺序。

  为了理解这个框架的所有潜力,有必要参考TestNG的文档(参见

  参考)。

  所有这些特性,加上用于定义测试的Java注释,使得整个测试过程更加简单和灵活。编写测试时必须遵循的规则很少;另外,你完全可以自由选择自己喜欢的测试策略。

  使用TestNG时最明显的是,这个模板已经是编写单元测试的好选择。而且它与其他库和工具的集成在设计上非常简单,所以它未来的发展会给开发者带来一些有趣的新东西。

  返回页首下载

  名称大小下载方法j-testng-sample.zip

  关于下载方法的HTTP信息资源

  您可以参考developerWorks全球网站上的这篇文章。

  英文原文。

  请在本文的顶部或底部列出

  Code图标下载j-testng-sample.zip,其中包含本文讨论的代码。

  在项目中

  网站下载TestNG。

  运行本文的代码需要下载。

  雅加达公共图书馆。

  如果您不熟悉Java注释,请阅读Brett McLaughlin于2004年9月在developerWorks上发表的两部分系列文章:

  在JUnit.org下载JUnit。

  马尔科姆戴维斯写的"

  用Ant和JUnit进行增量开发”(developerWorks,2000年11月)是一篇很好的文章,解释了如何将JUnit集成到项目中。

  埃里克艾伦罗伊米勒在各自的专栏里

  Java诊断代码和

  编程中经常提到单元测试。

  test-driven是一个关于测试驱动开发的文章和资源的综合集合。

  了解更多关于各种

  开源测试工具。

  了解更多关于"

  用模拟对象进行单元测试”,Alexander Day Chaffee和William Pietri (developerWorks,2002年11月)。

  中记录了许多关于JUnit、单元测试和TestNG的想法

  塞德里克贝斯特的博客。

  你是否

  测试感染?理解这个术语的意思。

  请访问。

  开发者书店,获取完整的技术书籍列表,包括上百种。

  Java相关主题的书籍。

  关于作者

  Filippo Diotalevi是IBM意大利公司驻米兰的IT专家。他主要是一名J2EE应用程序开发人员。他的兴趣主要是模式、面向方面编程和敏捷方法论。他就是IBM红皮书。

  模式:企业内部和企业之间的直接联系的合著者,以及在网站和杂志上发表的一些技术文章的作者,或者

  Java集团米兰创始人。是的。

  联系filippo.diotalevi@it.ibm.com的菲利普。

  来自:IBM开发人员社区

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: