TestNG 如何在Java中使用TestNG注解
TestNG是一个功能强大的测试框架,是JUnit的增强版,TestNG在存在很长一段时间之前。NG代表”Next Generation”。
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 注释的方法将在属于 |
6 | @AfterTest 注释的方法将在属于 |
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 将一个类或方法标记为测试的一部分。 |
让我们分析如何在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
===============================================