[关闭]
@EdwinTang 2016-03-15T23:48:33.000000Z 字数 3489 阅读 874

TESTNG入门

TESTNG 入门


TESTNG涵盖范围

TestNG设计涵盖所有类型的测试:单元,功能,端到端,集成等


JUNIT缺点

  1. 静态编程模型
  2. 不适合管理复杂项目测试
  3. 不能依赖测试
  4. 侵入性(强制扩展类)
  5. 初衷只用于单元测试

TESTNG目的和特点

  1. 开源测试框架
  2. 支持依赖测试方法,并行测试,负载测试,局部故障
  3. 灵活的插件API
  4. 支持多线程测试
  5. 灵活的运行时配置

ECLIPSE插件

在Eclipse市场搜索TESTNG安装
Selection_021.png-85.2kB

在Eclipse中创建TESTNG
Selection_022.png-28.8kB
Selection_024.png-36kB


TESTNG注释

注解 描述
@BeforeSuite 注解的方法将只运行一次,此套件所有测试运行之前。
@AfterSuite 注解的方法将只运行一次,所套件所有测试运行之后。
@BeforeClass 注解的方法将只运行一次,在当前类方法调用之前。
@AfterClass 注解的方法将只运行一次,在当前类方法调用之后。
@BeforeTest 注解的方法将在所有的测试方法被运行之前执行。
@AfterTest 注解的方法将在所有的测试方法被运行之后执行。
@BeforeMethod 注解的方法将在每个测试方法之前运行。
@AfterMethod 注解的方法将在每个测试方法之后运行。
@DataProvider 提供数据的一个测试方法。必须返回一个Object[][]
@Parameters 介绍如何将参数传递给@Test。
@Test 标记一个测试。

执行时序:

以一个拥有两个测试用例的测试套为例,执行顺序如下:

Created with Raphaël 2.1.2@beforeSuite()--第一层@beforeTest()--第二层@beforeClass()--第三层@beforeMethod()@Test1afterMethod()@beforeMethod()@Test2@afterMethod()@afterClass()--第三层@afterTest()--第二层@afterSuite()--第一层

1.忽略测试
@Test(enabled=false)

  1. @Test(enabled = false)
  2. public void testEnabledTest() {
  3. System.out.println("testEnabledTest()");
  4. status = "false";
  5. Assert.assertEquals(status, testNG.enabledTest());
  6. }

此测试将不被执行
2.组测试
可能根据用例功能进行分析,以方便进行各种形式的测试组织
如可以为某一用例进行冒烟测试,回归测试,正常功能测试分组,以保证在不同的测试中进行调用;当然也可能根据功能模块为测试用例进行标识,以方便功能块的组织验证。

  1. @Test(groups = { "mocking testing","regression testing",})
  2. public void testGroupsTestNG() {
  3. System.out.println("GroupsTestNG()");
  4. result = "testgroup" + ".com";
  5. Assert.assertEquals(result, groupsTestNG.groups());
  6. }

xml执行脚本

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  3. <suite name="SuiteGroup">
  4. <test name="test1">
  5. <groups>
  6. <run>
  7. <include name="mocking testing" />
  8. </run>
  9. </groups>
  10. </test>
  11. </suite>

对于需要排除个别标识可以使用exclude name="标识名"进行剔出如冒烟测试时排除登陆测试:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  3. <suite name="SuiteGroup">
  4. <test name="test1">
  5. <groups>
  6. <run>
  7. <include name="mocking testing" />
  8. <exclude name="login model" />
  9. </run>
  10. </groups>
  11. </test>
  12. </suite>

3.异常测试
异常测试与JUNIT类似,具体注释方法如下:

  1. @Test(expectedExceptions = ArithmeticException.class)
  2. public void testPrintMessage() {
  3. System.out.println("expectedExceptions()");
  4. expectedExceptions.status();
  5. }

4.依赖测试
依赖测试是有别于JUNIT的测试,也是TESTNG的一大特征之一,依赖测试给测试工作带来了非常大的方便。如删除操作,通常依赖新增操作如:

  1. @Test(dependsOnMethods = { "addTest" })
  2. public void testDelete() {
  3. System.out.println("Delete()");
  4. delete.status();
  5. }
  6. @Test
  7. public void addTest() {
  8. System.out.println("add()");
  9. add.status();
  10. }

4.参数化测试
参数化测试例子如下:

  1. public class ParamTest {
  2. @Test
  3. @Parameters("userName")
  4. public void parameterTest(String userName) {
  5. System.out.println("Parameterized value : " + userName);
  6. }
  7. }

执行程序如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  3. <suite name="SuiteParam">
  4. <test name="test1">
  5. <parameter name="userName" value="Edwin"/>
  6. <classes>
  7. <class name="ParamTest" />
  8. </classes>
  9. </test>
  10. </suite>

或者通过程序自己完成

  1. @DataProvider(name = "username")
  2. public static Object[][] primeNumbers() {
  3. return new Object[][] {{ Edwin, true }, { Tony, false }};
  4. }
  5. @Test(dataProvider = "username")
  6. public void testUserName(String userName,
  7. Boolean expectedResult) {
  8. System.out.println(userName + " " + expectedResult);
  9. Assert.assertEquals(expectedResult,
  10. userName.validate(userName));
  11. }

通过XML创建执行

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  3. <suite name="Suite-Testing">
  4. <test name="Test1">
  5. <classes>
  6. <class name="TestNG"/>
  7. </classes>
  8. </test>
  9. </suite>

TESTNG测试套suite

属性 描述
name 套件的名称。这是一个强制性的属性。
verbose 这个运行级别
parallel 由TestNG 运行不同的线程来运行此套件。
thread-count 使用的线程数,如果启用并行模式(忽略其他方式)。
annotations 在测试中使用注释的类型。
time-out 默认的超时时间。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注