Selenium TestNG
什麼是TestNG
TestNG是一個功能強大的測試框架,是Junit的一個增強版本,Junit在使用多年之前,TestNG才生效存在。NG 代表「下一代」。
TestNG框架提供了以下功能和解答我們的問題:「爲什麼我們需要TestNG」?
註釋可以幫助我們來組織使測試更容易。
靈活的測試配置。
測試例可以更容易地進行分組
可以使用TestNG實現測試並行
支持數據驅動測試
內置的報告
Eclipse安裝TestNG
第1步:啓動Eclipse,選擇「Install New Software」。
第2步:輸入網址爲「http://beust.com/eclipse」,然後單擊「Add」。
第3步:打開添加存儲庫對話框輸入名稱爲「TestNG」,然後點擊「OK」
第4步:點擊「全Select All」和「TestNG」將被選擇,如圖所示。
第5步:點擊「Next」繼續。
第6步:檢查被選中項目,然後單擊「Next」。
第7步:「Accept the License Agreement」,然後單擊「Finish」。
步驟8:TestNG開始安裝並且將示出進度如下。
第9步:安全警告彈出的軟件的有效性不能成立。單擊「Ok」。
第10步:安裝程序彈出的重啓。單擊「Yes」。
TestNG的註解
註釋被正式添加到Java語言中JDK5和TestNG作出的選擇使用註解來註解測試類。以下是一些使用註釋的優點。更多關於TestNG可以在這裏找到 www.yiibai.com/testng/index.html
TestNG識別是通過查找註釋感興趣的方法。因此,方法的名稱不侷限於任何模式或格式。
我們可以通過額外的參數來說明。
註釋是強類型,所以編譯器會標誌任何錯誤。
測試類不再需要擴展什麼(如測試用例,選擇JUnit3)。
Annotation
描述
@BeforeSuite
被註釋的方法將只在這個套件中的所有測試運行之前運行一次。
@AfterSuite
被註釋的方法將只在這個套件中的所有測試都運行後,運行一次。
@BeforeClass
帶註釋的方法將只調用在當前類中的第一測試方法之前運行一次。
@AfterClass
帶註釋的方法將僅在當前類中的所有的測試方法已經被執行之後運行一次。
@BeforeTest
屬於類<測試>中的任何測試方法標記運行之前被註釋的方法將被運行。
@AfterTest
被註釋的方法都將屬於該類別的<測試>標籤內的測試方法運行後運行。
@BeforeGroups
這種配置方法,將之前運行的組的列表。此方法是保證屬於任何這些基團的被調用的第一測試方法之前短暫運行。
@AfterGroups
這種配置方法,將後運行的組的列表。這個方法保證了屬於任何這些基團的被調用的最後一個測試方法之後不久運行。
@BeforeMethod
被註釋的方法將每個測試方法之前運行。
@AfterMethod
被註釋的方法將每個測試方法之後運行。
@DataProvider
標記的方法爲測試方法提供數據。被註釋的方法必須返回一個Object[] [],其中每個Object []對象可以分配的測試方法的參數列表。想從這個DataProvider接收數據的@Test方法需要使用dataProvider名稱等於這個註解的名字。
@Factory
將方法標記爲一個工廠,返回將使用了TestNG作爲測試類的對象。該方法必須返回一個Object[]。
@Listeners
定義了一個測試類監聽器。
@Parameters
介紹瞭如何將參數傳遞到一個方法@Test。
@Test
標誌着一個類或方法作爲測試的一部分。
Eclipse安裝TestNG
第1步:啓動Eclipse,並創建一個「New Java Project」,如下圖所示。
第2步:輸入項目名稱,然後單擊「Next」。
第3步:找到「Libraries」選項卡,並單擊添加Selenium遠程控制服務器的JAR文件「Add External JAR's」,如圖所示。
第4步:添加JAR文件,如下圖所示,然後單擊「Add Library」。
第5步:「Add Library」對話框打開。選擇「TestNG」,然後點擊「Next」在「Add Library」對話框。
第6步:添加「TestNG」類庫加入如下圖所示它顯示出來。
步驟7:當創建項目的結構將在下面所示的項目。
第8步:右鍵點擊「src」文件夾並選擇「New」和「other」。
第9步:選擇「TestNG」,然後點擊「Next」。
第10步:選擇「Source Folder」名稱,並單擊「Ok」。
第11步:選擇「Package name」,類名,然後單擊「Finish」。
步驟12:在Package Explorer和創建的類將可以顯示出來給用戶。
在TestNG的第一個測試
現在讓我們使用TestNG啓動腳本。爲我們理解webdriver使用相同的示例腳本。我們將利用演示應用程序,www.calculator.net並執行%的計算器。
在下面的測試,你會發現,沒有main方法,如TestNG將驅動程序的執行流程。初始化驅動程序後,它將執行「@BeforeTest'方法,其次是」@Test',然後'@AfterTest「。請注意,可以在一個類中的任何數量「@Test」註解,但是「@BeforeTest'和'@AfterTest」只能出現一次。
package TestNG;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
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 a 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();
}
}
執行
通過在創建的XML執行右鍵單擊並選擇 "Run As" >> "TestNG Suite"進行測試執行
結果分析
輸出被丟到了控制檯,它會出現如下圖所示。控制檯輸出也有執行摘要。
TestNG的結果也可以看出在不同的標籤。點擊「HTML Report View」按鈕,如下圖所示。
如下所示的HTML結果將被顯示。