TestNG是一个功能强大的测试框架,是JUnit的增强版本,在TestNG出现之前已经使用了很长时间. NG代表'下一代'.
TestNG框架提供以下功能 :
注释可以帮助我们轻松地组织测试.
灵活的测试配置.
可以更轻松地对测试用例进行分组.
使用TestNG可以实现测试的并行化.
支持数据驱动测试.
内置报告.
为Eclipse安装TestNG
第1步 : 启动Eclipse并选择"安装新软件".
第2步 : 输入网址为"http://beust.com/eclipse",然后点击"添加".
第3步 : 将打开"添加存储库"对话框.输入名称'TestNG'并单击'确定'
第4步 : 单击"全选",将选择"TestNG",如图所示.
第5步 : 点击"下一步"继续.
第6步 : 检查所选项目,然后单击"下一步".
第7步 : "接受许可协议"并单击"完成".
第8步 : TestNG开始安装,进度如下所示.
第9步 : 弹出安全警告,因为无法建立软件的有效性.点击"确定".
步骤10 : 安装程序提示重新启动Eclipse以使更改生效.单击"是".
TestNG中的注释
注释在JDK 5中正式添加到Java语言中,TestNG选择使用注释来注释测试类.以下是使用注释的一些好处.
TestNG通过查找注释来识别它感兴趣的方法.因此,方法名称不限于任何模式或格式.
我们可以将其他参数传递给注释.
注释是强类型的,因此编译器会立即标记任何错误.
测试类不再需要扩展任何内容(如作为TestCase,用于JUnit 3).
Sr.No. | Annotation&说明 |
---|---|
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用作Test类的对象的工厂.该方法必须返回Object []. |
13 | @Listeners 在测试类上定义侦听器. |
14 | @Parameters 描述如何将参数传递给@Test方法. |
15 | @Test 将类或方法标记为测试的一部分. |
TestNG-Eclipse设置
第1步 : 启动Eclipse并创建一个'New Java Project',如下所示.
第2步 : 输入项目名称,然后单击"下一步".
第3步 : 导航到"Libraries"选项卡并单击"Add External JAR"添加Selenium远程控制服务器JAR文件,如下所示.
第4步 : 添加的JAR文件显示在此处.点击"添加图书馆".
第5步 : 将打开"添加库"对话框.选择"TestNG"并在"添加库"对话框中单击"下一步".
第6步 : 添加的"TestNG"库已添加,如下所示:
第7步 : 在创建项目时,项目的结构如下所示.
第8步 : 右键单击"src"文件夹,然后选择"新建">>其他.
第9步 : 选择"TestNG"并点击"下一步".
第10步 : 选择"源文件夹"名称并单击"确定".
步骤11 : 选择"包名称","类名",然后单击"完成".
第12步 : 将显示包浏览器和创建的类.
TestNG中的首次测试
现在让我们使用TestNG开始编写脚本.让我们编写用于理解WebDriver的相同示例的脚本.我们将使用演示应用程序 www.calculator.net ,并执行百分比计算器.
在下面的测试中,您会注意到没有主要方法,因为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 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(); }}
执行
要执行,请右键单击创建的XML并执行选择"运行方式">> "TestNG Suite"
结果分析
输出被抛出到控制台,它将如下所示.控制台输出也有一个执行摘要.
TestNG的结果也可以在不同的选项卡中看到.点击"HTML报告视图"按钮,如下所示.
HTML结果将显示如下.