【TestNG常见问题总结】

1)什么是TestNG?

TestNG 代表“测试下一代”。它是由Credric beust开发的用于java编程语言的自动化测试框架,灵感来源于JUnit框架。TestNG 包含 JUnit 框架的所有功能,但还包含一些使 TestNG 更强大的附加功能。


2)TestNG有什么优势?

以下是TestNG的优点是:

  • 它以适当的格式生成报告,其中包括以下信息:
    • 执行的测试用例数。
    • 通过的测试用例数。
    • 失败的测试用例数。
    • 跳过的测试用例数
  • 通过将多个测试用例转换为一个 testng.xml 文件,可以轻松地将多个测试用例分组,您可以在其中设置每个测试用例的优先级,以确定应该首先执行哪个测试用例。
  • 在 TestNG 的帮助下,您可以在多个浏览器上执行多个测试用例,称为跨浏览器测试。
  • TestNG 框架可以很容易地与 Maven 等其他工具集成。詹金斯等
  • TestNG 框架中使用的注解很容易理解,例如@BeforeMethod、@AfterMethod、@BeforeTest、@AfterTest。
  • WebDriver 不生成报告,而 TestNG 以可读格式生成报告。
  • TestNG 简化了测试用例的编码方式。我们不必编写静态 main 方法。动作序列仅由注释维护。
  • TestNG 允许您单独执行测试用例。例如,如果您有六个测试用例,则为每个测试用例编写一个方法。当我们运行程序时,有五个方法执行成功,第六个方法执行失败。要消除错误,我们只需要运行第六种方法,而这只能通过 TestNG 来实现。因为TestNG在测试输出文件夹中生成了testng-failed.xml文件,我们将只运行这个xml文件来执行失败的测试用例。

3) 如何在 TestNG 中运行测试脚本?

您可以在TestNG 中运行测试脚本,方法是右键单击TestNG 类,单击“运行方式”,然后选择“TestNG 测试”。


4) TestNG 中使用了哪些注解?

以下是 TestNG 中使用的注解:

  • 前置条件
    注解前置条件注解在测试方法执行之前执行前置条件注解有@BeforeSuite、@BeforeClass、@BeforeTest、@BeforeMethod。
  • 测试注解
    测试注解是在定义测试方法之前指定的。它被指定为@Test。

  • 置条件注解 后置条件注解在所有测试方法执行后执行。后置条件注解可以是@AfterSuite、@AfterClass、@AfterTest、@AfterMethod。

5)TestNG中所有注解的执行顺序是什么?

TestNG中所有注解的执行顺序如下:

  • @BeforeSuite
  • @BeforeTest
  • @课前
  • @BeforeMethod
  • @测试
  • @AfterSuite
  • @AfterTest
  • @下课以后
  • @AfterMethod

6) 如何在 TestNG 中设置优先级?

如果我们不优先考虑测试方法,则按字母顺序选择测试方法并执行。如果我们希望测试方法按照我们想要的顺序执行,那么我们需要提供优先级以及@Test 注解。

让我们通过一个例子来理解。

package com.zditect;
import org.testng.annotations.Test;
public class Test_methods 
{
@Test(priority=2)
public void test1()
{
System.out.println("Test1");
}
@Test(priority=1)
public void test2()
{
System.out.print("Test2");
}
}

7)在TestNG中定义分组?

该组是 TestNG 中的一个属性,允许您执行多个测试用例。例如,如果我们有 100 个 it_department 的测试用例和 10 个 hr_department 的测试用例,如果你想在一个套件中一起运行 it_department 的所有测试用例,这只能通过分组来实现。

让我们通过一个例子来理解。

package com.zditect;
import org.testng.annotations.Test;
public class Test_methods 
{
@Test(groups="it_department")
public void java()
{
System.out.println("I am a java developer");
}
@Test(groups="it_department")
public void dot_net()
{
System.out.println("I am a .Net developer");
}
@Test(groups="it_department")
public void tester()
{
System.out.println("I am a software tester");
}
@Test (groups="hr")
public void hr()
{
System.out.print("I am hr");
}
}
 

testng.xml

?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="It Company">
<groups>
<run>
<include name="it_department"/>
</run>
</groups>
<classes>
<class name="com.zditect.Test_methods"></class>
</classes>
</test>
</suite> <!-- Suite -->

8) TestNG 中的依赖是什么?

当我们想以特定的顺序运行测试用例时,我们会使用 TestNG 中的依赖概念。

TestNG 中使用的两种依赖属性:

  • dependsOnMethods
    dependsOnMethods 属性告诉TestNG这个测试将依赖哪些方法,以便这些方法将在这个测试方法之前执行。
package com.zditect;
import org.testng.annotations.Test;
public class Login 
{
 @Test
 public void login()
 {
	 System.out.println("Login page");
 }
 @Test(dependsOnMethods="login")
 public void home()
 {
	 System.out.println("Home page");
	 
 }
}
  • dependsOnGroups
    与dependsOnMethods 属性类似。它允许测试方法依赖于测试方法组。它在依赖测试方法之前执行一组测试方法。
package com.zditect;
import org.testng.annotations.Test;
public class Test_cases
{
 @Test(groups="test")
 public void testcase1()
 {
	 System.out.println("testcase1");
 }
 @Test(groups="test")
 public void testcase2()
 {
	 System.out.println("testcase2");
 }
 @Test(dependsOnGroups="test")
 public void testcase3()
 {
	 System.out.println("testcase3");
 }
}

9) TestNG 中的timeOut 是什么?

在运行测试用例时,可能会出现某些测试用例花费的时间比预期多得多的情况。在这种情况下,我们可以使用 timeOut 将测试用例标记为失败的测试用例。

TestNG 中的 TimeOut 允许您配置等待测试完全执行的时间段。它可以配置为两个级别:

  • 在西装级别:它将适用于所有测试方法。
  • 在每个方法级别:它将可用于特定的测试方法。

可以指定 timeOut 属性,如下所示:

@Test( timeOut = 700)

上面的 @Test 注释告诉测试方法将有 700 毫秒的时间来完成它的执行,否则它将被标记为失败的测试用例。


10) TestNG 中的调用计数是什么?

TestNG 中的 invocationCount 是我们想要执行相同测试的次数。

package com.zditect;
import org.testng.annotations.Test;
public class Test_cases
{
 @Test(invocationCount=5)
 public void testcase1()
 {
	 System.out.println("testcase1");
 }

}

输出


11) testng.xml 文件的重要性是什么?

testng.xml 文件很重要,原因如下:

  • 它定义了所有测试用例的执行顺序。
  • 它允许您对测试用例进行分组,并可以根据要求执行。
  • 它执行选定的测试用例。
  • 在 TestNG 中,监听器可以在套件级别实现。
  • 它允许您将 TestNG 框架与 Jenkins 等工具集成。

12)如何通过testng.xml文件传递测试用例中的参数?

我们也可以在运行时将值传递给测试方法,我们可以通过 testng.xml 文件发送参数值来实现。我们可以使用@Parameter注解:

@Parameter("param-name");

让我们通过一个例子来理解:

package com.zditect;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
import org.testng.annotations.Parameters;
public class Web {
@Parameters({"text"})
@Test
public void search()
{
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com/");
driver.findElement(By.name("q")).sendKeys("zditect tutorial");
}
}

testng.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="It Company">
<parameter name="text" value="zditect"/>
<classes>
<class name="com.zditect.Web"></class>
</classes>
</test>
</suite> <!-- Suite -->

在运行 testng.xml 文件时,我们得到如下所示的输出:


13) 我们如何禁用测试用例的运行?

我们可以使用 enabled 属性来禁用测试用例的运行。我们可以将 false 值分配给 enabled 属性,这样我们就可以禁用测试用例的运行。

package com.zditect;
import org.testng.annotations.Test;
public class Test_cases
{
 @Test(enabled=false)
 public void testcase1()
 {
	 System.out.println("testcase1");
 }
 @Test 
 public void testcase2()
 {
	 System.out.println("testcase2");
 }

}

14)软断言和硬断言有什么区别?

Soft Assertion:在Soft Assertion的情况下,如果TestNG在@Test过程中得到错误,当断言失败时会抛出异常并继续assert语句之后的下一条语句。

Hard Assertion:在 Hard Assertion 的情况下,如果 TestNG 在@Test 过程中遇到错误,它会在断言失败时立即抛出 AssertException 并在 assert 语句之后停止执行。

让我们通过一个例子来理解。

package com.zditect;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
public class Assertion {
SoftAssert soft_assert=new SoftAssert();
@Test
public void Soft_Assert()
{
 soft_assert.assertTrue(false);
 System.out.println("soft assertion");
}
@Test
public void Hard_Assert()
{
 Assert.assertTrue(false);
 System.out.println("hard assertion");
}
}

输出


15)TestNG中@Listener注解有什么用?

TestNG 提供了不同类型的侦听器,它们可以在事件触发时执行不同的操作。TestNG 中使用最广泛的监听器是 ITestListener 接口。ITestListener 接口包含 onTestSuccess、onTestfailure、onTestSkipped 等方法。

以下是可以制作的场景:

  • 如果测试用例失败,那么侦听器应该执行什么操作。
  • 如果测试用例通过了,那么监听器应该执行什么动作。
  • 如果测试用例被跳过,那么侦听器应该执行什么操作。

让我们通过一个例子来理解。

package com.zditect;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(com.zditect.Listener.class)
public class Test_cases
{
	
 @Test
 public void test_to_success()
 {
	 Assert.assertTrue(true);
 }
 @Test
 public void test_to_fail()
 {
	 Assert.assertTrue(false);
 }

}

监听器.java

package com.zditect;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class Listener implements ITestListener 
{
@Override
public void onTestStart(ITestResult result) {
// TODO Auto-generated method stub
}
@Override
public void onTestSuccess(ITestResult result) {
// TODO Auto-generated method stub
System.out.println("Success of test cases and its details are : "+result.getName());
}
@Override
public void onTestFailure(ITestResult result) {
// TODO Auto-generated method stub
System.out.println("Failure of test cases and its details are : "+result.getName());
}
@Override
public void onTestSkipped(ITestResult result) {
// TODO Auto-generated method stub
System.out.println("Skip of test cases and its details are : "+result.getName());
}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// TODO Auto-generated method stub
System.out.println("Failure of test cases and its details are : "+result.getName());
}
@Override
public void onStart(ITestContext context) {
// TODO Auto-generated method stub
}
@Override
public void onFinish(ITestContext context) {
// TODO Auto-generated method stub
}}

输出


16)@Factory注解有什么用?

当我们想通过单个测试类运行多个测试用例时,@Factory 注解很有用。主要用于测试用例的动态执行。

让我们通过一个例子来理解。

testcase1.java

package com.zditect;
import org.testng.annotations.Test;
public class Testcase1
{
@Test
public void test1()
{
System.out.println("testcase 1");
}
}

testcase2.java

package com.zditect;
import org.testng.annotations.Test;
public class Testcase2 
{
@Test
public void test1()
{
System.out.println("testcase 2");
}
}

工厂.java

import org.testng.annotations.Factory;
public class Factory1
{
@Factory
public Object[] getTestClasses()
{
Object tests[]=new Object[2];
tests[0]=new Testcase1();
tests[1]=new Testcase2();
return tests;
}
}

17)@Factory 和@DataProvider 注解有什么区别?

@DataProvider: TestNG根据DataProvider提供的数据多次执行测试方法的注解。

@Factory:它是 TestNG 使用的注释,用于使用相应类的不同实例执行同一测试类中存在的测试方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值