测试工程师上车指南(一)--- 再谈TestNG

互联网软件,你不可能不关注质量!

“这Windos系统更新完怎么这么多bug啊,醉了,真难用!” “咦,你看taobao下单挂了,失望,不想买了” “WTF这什么软件怎么又闪退了”...
大家有没有留意过,如今越受大家欢迎的软件,用户会越关注质量,用户潜意识里会对这些软件的质量寄予较高的期望,所以一旦出现bug,可以说是“用户体验极差”了。(当然我厂的考拉海购、云音乐、严选等等产品质量还是杠杠的哦,毕竟我们是有态度的开发测试团队是不是~  哈哈哈脸红.jpg )
因为是“测试工程师上车指南”系列的第一篇文章,这里关于“质量”我会再多讲两句!
互联网软件往往需要快速响应变化,这种需求彻底颠覆了传统软件的开发和测试模式,“敏捷高效”“持续集成”一直都是当前互联网测试行业的热议话题。软件行业刚起步时 先写代码,有时间了再测试,或者根本不测试先上线的时代已经一去不返。如今的产品负责人会很清楚的认识到,一款互联网产品如果上线质量很差,那再好的产品功能设计也有可能功亏一篑,随即带来的便是用户无情的吐槽、甚至卸载弃用。

质量不等于测试
质量不是被测试出来的---这句看似陈词滥调的话里面却包含了一定的道理,相信看过《Google软件测试之道》一书的同学们肯定对下面的概念很熟悉,开发和测试应该是并肩齐驱的,你需要在写完每一段代码后立刻测试这段代码,当完成更多的代码时就要做更多的测试。测试本来就不是独立的活动,它本身就是软件开发过程的一部分。质量不等于测试,当你把开发过程和测试过程放到一起,就像在搅拌机里混合搅拌那样,直到不能区分彼此的时候,你就得到了质量。
聊到这里,那怎么在这个快速迭代的互联网软件时代做好系统质量的保障工作呢? 呐~ 持续集成了解一下,TestNG了解一下。 今天我们主要聊一下TestNG框架,这对于一个想要通过持续集成来保障质量的QA人员来说是应该是最基础的知识。

TestNG是什么
按照官方解释,T estNG是一个开源自动化测试框架,TestNG表示下一代测试技术(NextGeneration 的首字母)。 TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展。它的灵感来源于JUnit,但它已经远远优于JUnit,尤其是在用于测试集成多类,或者包含多个外部框架的集成系统时。
TestNG主要的特点如下:
  • 注解
  • TestNG使用Java和面向对象的功能
  • 支持综合类测试
  • 支持依赖测试方法,并行测试,负载测试,局部故障
  • 灵活的插件API
  • 支持多线程测试
ps.官网介绍: http://testng.org/

TestNG的基本注解 
注解   描述
@BeforeSuite   被注释的方法将在所有测试运行前运行
@AfterSuite 被注释的方法将在所有测试运行后运行
@BeforeClass 被注释的方法将在当前类的第一个测试方法调用前运行
@AfterClass 注释的方法将在当前类的所有测试方法调用后运行
@BeforeTest 被注释的方法将在测试运行前运行
@AfterTest 被注释的方法将在测试运行后运行
@BeforeGroups 被配置的方法将在列表中的gourp前运行,这个方法保证在第一个属于这些组的测试方法调用前立即执行
@AfterGroups 被配置的方法将在列表中的gourp后运行,这个方法保证在最后一个属于这些组的测试方法调用后立即执行
@BeforeMethod 被注释的方法将在每一个测试方法调用前运行
@AfterMethod 被注释的方法将在每一个测试方法调用后运行
@DataProvider
标记一个方法用于为测试方法提供数据;注释的方法必须返回Object[][], 其中每个Object[]可以指派为这个测试方法的参数列表;从这个DataProvider接收数据@Test方法需要使用一个和当前注释相同名称的dataProvider名称
@Factory 标记方法作为一个返回对象的工厂,这些对象将被TestNG用于作为测试类。这个方法必须返回Object[]
@Listeners 定义一个测试类的监听器
@Parameters 描述如何将参数传递给@Test方法
@Test 标记一个类或方法作为测试的一部分

一个简单的http接口测试用例
下面通过一个很简单的接口测试用例来展示一下几个基本注解的使用方法
1、 @BeforeClass :在当前类的 第一个测试方法调用前运行,可以设计登入、登出、清楚数据等操作
2、 @DataProvider: 主要是标记这个方法提供数据给@test测试方法,要注意, 注释的方法必须返回Object[][]
3、 @Test:设计一个的接口测试方法 


通过testng,xml文件执行用例
调用TestNG主要的方法有:
     通过testng.xml文件
     通过ant脚本
     命令行
目前最常用的应该就是testng.xml文件执行了,下面简单介绍一下如何使用testng.xml
testng.xml的DTD文件可以从官方找到: http://testng.org/testng-1.0.dtd
1、通过上面例子可以看出,testng.xml的结构树最上层的元素是suite,在suite里面可以进行参数设置:
(1)thread-count="10"   设置了线程数为10
(2)parallel="tests"   决定是否使用多线程测试
(3)verbose="10"       在控制台中如何输出,这个设置不影响html版本的测试报告
(4)annotations="JDK"  有‘javadoc’的时候寻找,没有的话使用jdk的注释
(5)time-out="1800000" 在终止test (如果parallel="tests")之前设置以毫秒为单位的等待时间
(6)reruntimes="3"     设置了用例失败再执行测试为3 ( reruntimes的使用需要修改testng的源码,后面关于TestNG.xml的文章会详细介绍)
2、suite-files元素的作用是:一个xml文档的列表包含更多的suite描述,如上图中包含了很多子xml路径
3、listenter元素的作用是:设置要传给TestNG的监听列表
4、这段代码是上面 suite-files里设置的路径下的xml文件,里面的test元素包含了参数和classes,而class name就是你的接口测试用例

本文来自网易实践者社区,经作者曹旭涛授权发布。