TestNG是一個(gè)功能強(qiáng)大的測(cè)試框架,是Junit的一個(gè)增強(qiáng)版本,Junit在使用多年之前,TestNG才生效存在。NG 代表“下一代”。
TestNG框架提供了以下功能和解答我們的問題:“為什么我們需要TestNG”?
注釋可以幫助我們來組織使測(cè)試更容易。
靈活的測(cè)試配置。
測(cè)試?yán)梢愿菀椎剡M(jìn)行分組
可以使用TestNG實(shí)現(xiàn)測(cè)試并行
支持?jǐn)?shù)據(jù)驅(qū)動(dòng)測(cè)試
內(nèi)置的報(bào)告
第1步:啟動(dòng)Eclipse,選擇“Install New Software”。
第2步:輸入網(wǎng)址為“http://beust.com/eclipse”,然后單擊“Add”。
第3步:打開添加存儲(chǔ)庫對(duì)話框輸入名稱為“TestNG”,然后點(diǎn)擊“OK”
第4步:點(diǎn)擊“全Select All”和“TestNG”將被選擇,如圖所示。
第5步:點(diǎn)擊“Next”繼續(xù)。
第6步:檢查被選中項(xiàng)目,然后單擊“Next”。
第7步:“Accept the License Agreement”,然后單擊“Finish”。
步驟8:TestNG開始安裝并且將示出進(jìn)度如下。
第9步:安全警告彈出的軟件的有效性不能成立。單擊“Ok”。
第10步:安裝程序彈出的重啟。單擊“Yes”。
注釋被正式添加到Java語言中JDK5和TestNG作出的選擇使用注解來注解測(cè)試類。以下是一些使用注釋的優(yōu)點(diǎn)。更多關(guān)于TestNG可以在這里找到 www.yiibai.com/testng/index.html
TestNG識(shí)別是通過查找注釋感興趣的方法。因此,方法的名稱不局限于任何模式或格式。
我們可以通過額外的參數(shù)來說明。
注釋是強(qiáng)類型,所以編譯器會(huì)標(biāo)志任何錯(cuò)誤。
測(cè)試類不再需要擴(kuò)展什么(如測(cè)試用例,選擇JUnit3)。
| Annotation | 描述 |
|---|---|
| @BeforeSuite | 被注釋的方法將只在這個(gè)套件中的所有測(cè)試運(yùn)行之前運(yùn)行一次。 |
| @AfterSuite | 被注釋的方法將只在這個(gè)套件中的所有測(cè)試都運(yùn)行后,運(yùn)行一次。 |
| @BeforeClass | 帶注釋的方法將只調(diào)用在當(dāng)前類中的第一測(cè)試方法之前運(yùn)行一次。 |
| @AfterClass | 帶注釋的方法將僅在當(dāng)前類中的所有的測(cè)試方法已經(jīng)被執(zhí)行之后運(yùn)行一次。 |
| @BeforeTest | 屬于類<測(cè)試>中的任何測(cè)試方法標(biāo)記運(yùn)行之前被注釋的方法將被運(yùn)行。 |
| @AfterTest | 被注釋的方法都將屬于該類別的<測(cè)試>標(biāo)簽內(nèi)的測(cè)試方法運(yùn)行后運(yùn)行。 |
| @BeforeGroups | 這種配置方法,將之前運(yùn)行的組的列表。此方法是保證屬于任何這些基團(tuán)的被調(diào)用的第一測(cè)試方法之前短暫運(yùn)行。 |
| @AfterGroups | 這種配置方法,將后運(yùn)行的組的列表。這個(gè)方法保證了屬于任何這些基團(tuán)的被調(diào)用的最后一個(gè)測(cè)試方法之后不久運(yùn)行。 |
| @BeforeMethod | 被注釋的方法將每個(gè)測(cè)試方法之前運(yùn)行。 |
| @AfterMethod | 被注釋的方法將每個(gè)測(cè)試方法之后運(yùn)行。 |
| @DataProvider | 標(biāo)記的方法為測(cè)試方法提供數(shù)據(jù)。被注釋的方法必須返回一個(gè)Object[] [],其中每個(gè)Object []對(duì)象可以分配的測(cè)試方法的參數(shù)列表。想從這個(gè)DataProvider接收數(shù)據(jù)的@Test方法需要使用dataProvider名稱等于這個(gè)注解的名字。 |
| @Factory | 將方法標(biāo)記為一個(gè)工廠,返回將使用了TestNG作為測(cè)試類的對(duì)象。該方法必須返回一個(gè)Object[]。 |
| @Listeners | 定義了一個(gè)測(cè)試類監(jiān)聽器。 |
| @Parameters | 介紹了如何將參數(shù)傳遞到一個(gè)方法@Test。 |
| @Test | 標(biāo)志著一個(gè)類或方法作為測(cè)試的一部分。 |
第1步:?jiǎn)?dòng)Eclipse,并創(chuàng)建一個(gè)“New Java Project”,如下圖所示。
第2步:輸入項(xiàng)目名稱,然后單擊“Next”。
第3步:找到“Libraries”選項(xiàng)卡,并單擊添加Selenium遠(yuǎn)程控制服務(wù)器的JAR文件“Add External JAR's”,如圖所示。
第4步:添加JAR文件,如下圖所示,然后單擊“Add Library”。
第5步:“Add Library”對(duì)話框打開。選擇“TestNG”,然后點(diǎn)擊“Next”在“Add Library”對(duì)話框。
第6步:添加“TestNG”類庫加入如下圖所示它顯示出來。
步驟7:當(dāng)創(chuàng)建項(xiàng)目的結(jié)構(gòu)將在下面所示的項(xiàng)目。
第8步:右鍵點(diǎn)擊“src”文件夾并選擇“New”和“other”。
第9步:選擇“TestNG”,然后點(diǎn)擊“Next”。
第10步:選擇“Source Folder”名稱,并單擊“Ok”。
第11步:選擇“Package name”,類名,然后單擊“Finish”。
步驟12:在Package Explorer和創(chuàng)建的類將可以顯示出來給用戶。
現(xiàn)在讓我們使用TestNG啟動(dòng)腳本。為我們理解webdriver使用相同的示例腳本。我們將利用演示應(yīng)用程序,www.calculator.net并執(zhí)行%的計(jì)算器。
在下面的測(cè)試,你會(huì)發(fā)現(xiàn),沒有main方法,如TestNG將驅(qū)動(dòng)程序的執(zhí)行流程。初始化驅(qū)動(dòng)程序后,它將執(zhí)行“@BeforeTest'方法,其次是”@Test',然后'@AfterTest“。請(qǐng)注意,可以在一個(gè)類中的任何數(shù)量“@Test”注解,但是“@BeforeTest'和'@AfterTest”只能出現(xiàn)一次。
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();
}
}
通過在創(chuàng)建的XML執(zhí)行右鍵單擊并選擇 "Run As" >> "TestNG Suite"進(jìn)行測(cè)試執(zhí)行
輸出被丟到了控制臺(tái),它會(huì)出現(xiàn)如下圖所示??刂婆_(tái)輸出也有執(zhí)行摘要。
TestNG的結(jié)果也可以看出在不同的標(biāo)簽。點(diǎn)擊“HTML Report View”按鈕,如下圖所示。
如下所示的HTML結(jié)果將被顯示。