如何在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 ===============================================