了解一项技术的有效途径是阅读官网文献,TestNG是应用非常广泛的自动化测试框架,稍有基础的同学都能够很容易上手TestNG。但在简单实用的背后,TestNG蕴藏着更为强大的功能和设计技巧。本系列通过对官网文献的阅读和大家一同探秘TestNG。
使用TestNG很长时间了,相比JUnit,TestNG上手更容易,配置更灵活,功能更强大。出于项目的需要,使用的时候功利性太强,总是遇到拿起来就用,遇到问题再各种查资料解决,缺少系统的总结。现在通过TestNG官网文章的阅读进行系统的学习,主要是对TestNG官网文章的翻译,对其中有奥秘的地方增加自己的见解和实例验证。
TestNG是能够满足复杂测试需求的测试框架,从单元测试到集成测试都能轻松满足。其中单元测试是指:将一个类与其他类隔离进行测试;集成测试是指:测试由多个类、多个包、多个外部框架组成的系统,比如应用用服务器。
使用TestNG编写测试通常分为如下三个过程:
(1) 编写测试的业务逻辑,并在代码中加入TestNG注解(TestNG annotation)。
(2) 在TestNG配置文件testng.xml(以下简称testng.xml)或Ant构建文件build.xml中添加该测试的信息,包括类名、本次测试哪些组等等。
(3) 运行测试。
在TestNG官网的欢迎界面上有一个快速例子,能够帮助我们更好的理解TestNG。
TestNG中测试的组织包括如下概念,也是testng.xml中标签的定义:
(1) 测试套件(suite):一个testng.xml表示的为一个套件,包含一个或多个测试(test),testng.xml中以<suite>标签定义。
(2)测试(test):一个测试可以包含一个或多个测试类(class),testng.xml中以<test>标签定义。
(3)测试类(class):TestNG测试类实际就是一个Java类,该类需要包括至少一个TestNG注解。一个测试类可以包含一个或多个测试方法(method),testng.xml中以<class>定义。
(4)测试方法(method):TestNG测试方法是一个Java方法,在代码中以@Test进行注解,testng.xml中以<method>定义。
TestNG的测试组织包含着深刻的测试理论含义,在其中可以找到与测试设计对应的思路。一个实际的例子为,将一个测试场景定义为一个suite,可以是某个版本的验收测试,也可以是某个竞赛的对外测试;其中的每个模块作为一个个test,可以是资源管理,性能采集等等;每个模块的需求特性作为class,如果是单元测试,可以直接将测试类与待测试类进行关联和分解;特性的每个用例作为method管理,其中的验证点就是代码中assert的部分。
TestNG测试支持@Beforexxx和@Afterxxx注解,其中xxx包括为上述介绍的概念,这些注解作用是允许我们在这个点之前或之后执行指定的Java逻辑。
本系列的其余部分将介绍如下内容:
(1)TestNG支持的全部注解以及简要说明,这样我们可以了解TestNG提供的功能,但如果想要对每个注解的有更深的认识,需要查看该注解的介绍章节。
(2)描述testng.xml,介绍其中的语法和我们可以自定义的内容。
(3)TestNG提供的各种特性的详细介绍,包括如何结合注解和testng.xml来使用。
敬请期待下一章节:TestNG注解。