TestNG簡介

TestNG是一套開源測試框架,是從Junit繼承而來,testng意爲test next generation,主要有如下特性:html

 

  •  annotations  註釋,如 @test @BeforeMethod 
  • 支持多線程執行case
  • 支持數據驅動 dataProvider
  • 支持參參數
  • 可以做爲eclipse的插件
  • 可以(配合reportng)生產客觀的測試報告
  • 可經過testng.xml管理執行case和suite

那麼好的測試框架,怎麼使用?多線程

這裏咱們使用eclipse插件方式 安裝詳見:http://testng.org/doc/eclipse.html框架


testng使用


首先了解一下testng 的annotations
eclipse

常見的有如下:ide

@BeforeClass: 該annotation在class激活以前執行測試

@BeforeMethod: 該annotation會在每一個執行的方法以前執行ui

@Test ,該annotation 是你要執行測試的方法this

@AfterMethod,該annotation在每一個測試方法執行以後運行spa

@AfterClass 該annotation會在全部測試方法以後運行插件

具體生命週期以下圖:

這裏是全部的annotation

@BeforeSuite
@AfterSuite
@BeforeTest
@AfterTest
@BeforeGroups
@AfterGroups
@BeforeClass
@AfterClass
@BeforeMethod
@AfterMethod
Configuration information for a TestNG class: 

@BeforeSuite: The annotated method will be run before all tests in this suite have run. 
@AfterSuite: The annotated method will be run after all tests in this suite have run. 
@BeforeTest: The annotated method will be run before any test method belonging to the classes inside the <test> tag is run. 
@AfterTest: The annotated method will be run after all the test methods belonging to the classes inside the <test> tag have run. 
@BeforeGroups: The list of groups that this configuration method will run before. This method is guaranteed to run shortly before the first test method that belongs to any of these groups is invoked. 
@AfterGroups: The list of groups that this configuration method will run after. This method is guaranteed to run shortly after the last test method that belongs to any of these groups is invoked. 
@BeforeClass: The annotated method will be run before the first test method in the current class is invoked. 
@AfterClass: The annotated method will be run after all the test methods in the current class have been run. 
@BeforeMethod: The annotated method will be run before each test method. 
@AfterMethod: The annotated method will be run after each test method.

實例:咱們驗證一下testng annotation 執行順序,這個case裏有兩個 測試  ,執行順序爲 beforeClass->beforeMethod->test1->afterMethod->beforeMethod->

test2->afterMethod->afterClass.

複製代碼
package com.dbyl.tests; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * This is to verify testng annotation execute * @author Young * */ public class TestngExample { private int a; @BeforeMethod(alwaysRun=true) public void beforeMethod() { a = 2; System.out.println("This is beforeMethod method. The Value of a is: " + a); } @BeforeClass public void beforeClass() { a = 1; System.out.println("This is beforeClass method .The Value of a is: " + a); } @Test(groups = "TestngExample") public void testExample1() { a = 3; System.out.println("This is Test method1 .The Value of a is: " + a); } @Test(groups = "TestngExample") public void testExample2() { a = 4; System.out.println("This is Test method2 .The Value of a is: " + a); } @AfterClass public void afterClass() { a = 5; System.out.println("This is AfterClass Method .The Value of a is: " + a); } @AfterMethod public void afterMethod() { a = 6; System.out.println("This is AfterMethod Method .The Value of a is: " + a); } }
複製代碼

 

 因此執行結果爲:

 

1
2
3
4
5
6
7
8
9
10
This is beforeClass method .The Value of a is: 1
This is beforeMethod method. The Value of a is: 2
This is Test method1 .The Value of a is: 3
This is AfterMethod Method .The Value of a is: 6
This is beforeMethod method. The Value of a is: 2
This is Test method2 .The Value of a is: 4
This is AfterMethod Method .The Value of a is: 6
This is AfterClass Method .The Value of a is: 5
PASSED: testExample1
PASSED: testExample2

  固然,還有BeforeSuite 等,再也不作深刻研究.

annotation後面能夠加一些參數,好比alwaysRun=true/false,dependsOnMethods=""

alwaysRun控制是否每次都執行,dependsOnMethods是一種依賴,依賴某個方法執行

以前有提到testng數據驅動,使用dataProvider,dataProvider能夠導入text ,excel等數據,

執行case時會從DataProvider依次拿出數據執行,同一個測試方法,會被執行相應的次數

複製代碼
package com.dbyl.tests; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class Case1 { @DataProvider public Object[][] testData1() { return new Object[][] { { 1, 2, 3 }, { 1, 2, 4 }, { 1, 3, 4 }, { -1, 3, 2 } }; } @DataProvider public Object[][] testData2() { return new Object[][] { { 5, 2, 3 }, { 1, 2, 4 }, { 1, -3, 4 }, { 6, 3, 2 } }; } public static int add(int a, int b) { return a + b; } public static int minus(int a, int b) { return a - b; } @BeforeClass public void beforeClass() { System.out.println("This is Before Class"); } @Test(groups = { "add" }, dataProvider = "testData1") public void addTest(int a, int b, int c) { System.out.println("This is test add method. "+a+" + "+ b+" = "+c); Assert.assertEquals(add(a, b), c); } @Test(groups = { "minus" }, dataProvider = "testData2") public void minusTest(int a, int b, int c) { System.out.println("This is test minus method. "+a+" - "+ b+" = "+c); Assert.assertEquals(minus(a, b), c); } @BeforeMethod public void beforeMethod() { System.out.println("This is Before Method"); } @AfterMethod public void afterMethod() { System.out.println("This is After Method"); } @AfterClass public void afterClass() { System.out.println("This is After Class"); } }
複製代碼

 

執行結果以下: 

        

View Code
相關文章
相關標籤/搜索