如何在Java中使用TestNG註解?
TestNG是一個強大的測試框架,是JUnit的增強版,JUnit在TestNG出現之前就已經使用了很長時間。NG代表“下一代”。
TestNG框架提供以下功能:
註解幫助我們輕鬆地組織測試。
靈活的測試配置。
測試用例可以更容易地分組。
可以使用TestNG實現測試的並行化。
支援資料驅動測試。
內建報告。
Java 1.5或更高版本允許與TestNG互動。要僅在Java中執行任何測試或程式碼,我們必須使用Java main方法。TestNG為我們提供了一個無需使用Java main方法即可執行Java程式碼的框架。除此之外,更好的程式碼可維護性、報告、靈活的測試配置是使用TestNG與Selenium一起的其他優勢。
Java中的TestNG註解
註解在JDK 5中正式新增到Java語言中,TestNG選擇使用註解來註釋測試類。以下是使用註解的一些好處。更多關於TestNG的資訊可以在這裡找到
TestNG透過查詢註解來識別它感興趣的方法。因此,方法名稱不受任何模式或格式的限制。
我們可以向註解傳遞額外的引數。
註解是強型別的,因此編譯器會立即標記任何錯誤。
測試類不再需要擴充套件任何內容(例如JUnit 3的TestCase)。
使用者可以在selenium中使用所有可用的TestNG註解。其中一些如下所示
序號 |
註解及描述 |
---|---|
1 |
@BeforeSuite 此註解的方法將僅在該套件中的所有測試執行之前執行一次。 |
2 |
@AfterSuite 此註解的方法將僅在該套件中的所有測試執行之後執行一次。 |
3 |
@BeforeClass 此註解的方法將僅在呼叫當前類中的第一個測試方法之前執行一次。 |
4 |
@AfterClass 此註解的方法將僅在當前類中的所有測試方法執行之後執行一次。 |
5 |
@BeforeTest 此註解的方法將在執行<test>標籤內類的任何測試方法之前執行。 |
6 |
@AfterTest 此註解的方法將在執行<test>標籤內類的所有測試方法之後執行。 |
7 |
@BeforeGroups 此配置方法將在其之前執行的組列表。保證此方法將在呼叫屬於這些組中的任何一個的第一個測試方法之前不久執行。 |
8 |
@AfterGroups 此配置方法將在其之後執行的組列表。保證此方法將在呼叫屬於這些組中的任何一個的最後一個測試方法之後不久執行。 |
9 |
@BeforeMethod 此註解的方法將在每個測試方法之前執行。 |
10 |
@AfterMethod 此註解的方法將在每個測試方法之後執行。 |
11 |
@DataProvider 將方法標記為為測試方法提供資料。此註解的方法必須返回一個Object[ ][ ],其中每個Object[ ] 可以分配給測試方法的引數列表。想要從此DataProvider接收資料的@Test方法需要使用一個dataProvider名稱,該名稱等於此註解的名稱。 |
12 |
@Factory 將方法標記為工廠,該工廠返回將由TestNG用作測試類的物件。該方法必須返回Object[ ]。 |
13 |
@Listeners 在測試類上定義偵聽器。 |
14 |
@Parameters 描述如何將引數傳遞給@Test方法。 |
15 |
@Test 將類或方法標記為測試的一部分。 |
讓我們分析如何在Selenium中使用TestNG註解。
解決此問題的方法/演算法
步驟1:確保Selenium、TestNG和Firefox驅動程式的初始設定已正確設定在系統中。
步驟2:建立一個TestNG類,並按程式程式碼中提到的編寫selenium程式碼。
步驟3:執行TestNGClass檔案。
示例
以下程式碼用於建立包含Selenium程式碼的TestNG類
import java.util.concurrent.TimeUnit; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; public class TestNGClass { WebDriver driver = new FirefoxDriver(); @BeforeTest public void launchApp() { // Puts an Implicit wait, Will wait for 10 seconds before throwing exception driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // Launch website driver.navigate().to("http://www.calculator.net"); driver.manage().window().maximize(); } @Test public void calculatePercent() { // Click on Math Calculators driver.findElement(By.xpath(".//*[@id='menu']/div[3]/a")).click(); // Click on Percent Calculators driver.findElement(By.xpath(".//*[@id='menu']/div[4]/div[3]/a")).click(); // Enter value 10 in the first number of the percent Calculator driver.findElement(By.id("cpar1")).sendKeys("10"); // Enter value 50 in the second number of the percent Calculator driver.findElement(By.id("cpar2")).sendKeys("50"); // Click Calculate Button driver.findElement(By.xpath(".//*[@id='content']/table/tbody/tr/td[2]/input")).click(); // Get the Result Text based on its xpath String result = driver.findElement(By.xpath(".//*[@id='content']/p[2]/span/font/b")).getText(); // Print a Log In message to the screen System.out.println(" The Result is " + result); if(result.equals("5")) { System.out.println(" The Result is Pass"); } else { System.out.println(" The Result is Fail"); } } @AfterTest public void terminatetest() { driver.close(); } }
輸出
[TestNG] Running: C://Users/************** The Result is 5 The Result is Pass PASSED: calulatePercent =============================================== Suite1 Total tests run: 1, Passes: 1, Failures: 0, Skips: 0 ===============================================