文章图片
下面列出了最常见的TestNG面试问题和答案。
1)什么是TestNG?
TestNG代表” 测试下一代” 。它是Credric beust开发的用于Java编程语言的自动化测试框架, 它是从JUnit框架得到启发而来的。 TestNG包含JUnit框架的所有功能, 但还包含一些其他功能, 这些功能使TestNG更加强大。
2)TestNG的优点是什么?
以下是TestNG的优点:
- 它以适当的格式生成报告, 其中包括以下信息:
- 执行的测试用例数。
- 通过的测试用例数。
- 测试用例数量失败。
- 跳过的测试用例数
- 通过将多个测试用例转换为一个testng.xml文件, 可以轻松地将它们分组, 在其中你可以设置每个测试用例的优先级, 从而确定应该首先执行哪个测试用例。
- 借助TestNG, 你可以在称为跨浏览器测试的多个浏览器上执行多个测试用例。
- TestNG框架可以轻松地与其他工具(例如Maven)集成。詹金斯等
- TestNG框架中使用的注释很容易理解, 例如@ BeforeMethod, @ AfterMethod, @ BeforeTest, @ AfterTest。
- 当TestNG以可读格式生成报告时, WebDriver不会生成报告。
- TestNG简化了测试用例的编码方式。我们不必编写静态main方法。操作顺序仅由注释维护。
- TestNG允许你单独执行测试用例。例如, 如果你有六个测试用例, 则为每个测试用例编写一个方法。当我们运行程序时, 成功执行了五个方法, 而第六个方法失败了。要消除该错误, 我们只需要运行第六种方法, 而这只能通过TestNG来实现。因为TestNG在测试输出文件夹中生成testng-failed.xml文件, 所以我们将仅运行该xml文件来执行失败的测试用例。
你可以在TestNG中运行测试脚本, 方法是右键单击TestNG类, 单击” 运行方式” , 然后选择” TestNG测试” 。
4)在TestNG中使用什么注释?
以下是TestNG中使用的注释:
- 前提条件注释
前提条件批注在执行测试方法之前执行。前提条件批注是@ BeforeSuite, @ BeforeClass, @ BeforeTest, @ BeforeMethod。 - 测试注解
在定义测试方法之前指定测试注释。它被指定为@Test。 - 后置条件注释
后条件注释在所有测试方法执行后执行。后置条件注释可以是@ AfterSuite, @ AfterClass, @ AfterTest, @ AfterMethod。
下面给出了TestNG中所有注释的执行顺序:
- @BeforeSuite
- @BeforeTest
- @课前
- @BeforeMethod
- @测试
- @AfterSuite
- @AfterTest
- @下课以后
- @AfterMethod
如果我们不区分测试方法的优先级, 则将按字母顺序选择测试方法并执行。如果我们希望按照所需的顺序执行测试方法, 则需要提供优先级以及@Test批注。
让我们通过一个例子来理解。
package com.srcmini;
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测试用例和hr_department 10个测试用例, 并且如果要在一个套件中一起运行it_department的所有测试用例, 则只能通过分组来实现。
让我们通过一个例子来理解。
package com.srcmini;
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.srcmini.Test_methods">
<
/class>
<
/classes>
<
/test>
<
/suite>
<
!-- Suite -->
8)什么是TestNG中的依赖项?
当我们要按特定顺序运行测试用例时, 则在TestNG中使用依赖的概念。
TestNG中使用两种类型的依赖项属性:
- 取决于方法
dependsOnMethods属性告诉TestNG该测试将依赖于哪些方法, 以便那些方法将在此测试方法之前执行。
package com.srcmini;
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");
}}
- DependOnGroups
它类似于dependsOnMethods属性。它允许测试方法取决于测试方法组。它在相关测试方法之前执行测试方法组。
package com.srcmini;
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允许你配置等待测试完全执行的时间段。可以分为两个级别进行配置:
- 在西服级别:所有测试方法均可用。
- 在每个方法级别:它可用于特定的测试方法。
@Test( timeOut = 700)
上面的@Test批注告诉你将给测试方法700毫秒以完成其执行, 否则它将被标记为失败的测试用例。
10)什么是TestNG中的invocationCount?
TestNG中的invocationCount是我们想要执行相同测试的次数。
package com.srcmini;
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等工具集成。
我们还可以在运行时将值传递给测试方法, 我们可以通过通过testng.xml文件发送参数值来实现。我们可以使用@Parameter批注:
@Parameter("param-name");
让我们通过一个例子来理解:
package com.srcmini;
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"})@Testpublic void search(){// TODO Auto-generated method stubSystem.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com/");
driver.findElement(By.name("q")).sendKeys("srcmini 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="http://www.srcmini.com/srcmini"/>
<
classes>
<
class name="com.srcmini.Web">
<
/class>
<
/classes>
<
/test>
<
/suite>
<
!-- Suite -->
运行testng.xml文件时, 我们得到如下所示的输出:
文章图片
文章图片
13)如何禁用测试用例?
我们可以使用enabled属性禁用测试用例的运行。我们可以将false值分配给enabled属性, 这样就可以禁用测试用例。
package com.srcmini;
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)软断言和硬断言有什么区别?
软断言:在软断言的情况下, 如果TestNG在@Test期间出错, 则断言失败时将抛出异常, 并在assert语句之后继续下一个语句。
硬断言:在硬断言的情况下, 如果TestNG在@Test期间出错, 则断言失败时将立即引发AssertException, 并在assert语句后停止执行。
让我们通过一个例子来理解。
package com.srcmini;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
public class Assertion {SoftAssert soft_assert=new SoftAssert();
@Testpublic void Soft_Assert(){ soft_assert.assertTrue(false);
System.out.println("soft assertion");
}@Testpublic void Hard_Assert(){ Assert.assertTrue(false);
System.out.println("hard assertion");
}}
输出
文章图片
15)在TestNG中@Listener注释的用途是什么?
TestNG提供了不同种类的侦听器, 每当事件触发时, 它们便可以执行不同的操作。 TestNG中使用最广泛的侦听器是ITestListener接口。 ITestListener接口包含诸如onTestSuccess, onTestfailure, onTestSkipped等方法。
以下是可以实现的方案:
- 如果测试用例失败, 那么侦听器应执行什么操作。
- 如果通过了测试用例, 那么侦听器应执行什么操作。
- 如果跳过测试用例, 那么侦听器应执行什么操作。
package com.srcmini;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(com.srcmini.Listener.class)public class Test_cases{ @Test public void test_to_success() {Assert.assertTrue(true);
} @Test public void test_to_fail() {Assert.assertTrue(false);
}}
Listener.java
package com.srcmini;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class Listener implements ITestListener {@Overridepublic void onTestStart(ITestResult result) {// TODO Auto-generated method stub}@Overridepublic void onTestSuccess(ITestResult result) {// TODO Auto-generated method stubSystem.out.println("Success of test cases and its details are : "+result.getName());
}@Overridepublic void onTestFailure(ITestResult result) {// TODO Auto-generated method stubSystem.out.println("Failure of test cases and its details are : "+result.getName());
}@Overridepublic void onTestSkipped(ITestResult result) {// TODO Auto-generated method stubSystem.out.println("Skip of test cases and its details are : "+result.getName());
}@Overridepublic void onTestFailedButWithinSuccessPercentage(ITestResult result) {// TODO Auto-generated method stubSystem.out.println("Failure of test cases and its details are : "+result.getName());
}@Overridepublic void onStart(ITestContext context) {// TODO Auto-generated method stub}@Overridepublic void onFinish(ITestContext context) {// TODO Auto-generated method stub}}
输出
文章图片
16)@Factory注释有什么用?
当我们想通过一个测试类运行多个测试用例时, @ Factory批注很有用。它主要用于测试用例的动态执行。
让我们通过一个例子来理解。
testcase1.java
package com.srcmini;
import org.testng.annotations.Test;
public class Testcase1{@Testpublic void test1(){System.out.println("testcase 1");
}}
testcase2.java
package com.srcmini;
import org.testng.annotations.Test;
public class Testcase2 {@Testpublic void test1(){System.out.println("testcase 2");
}}
Factory.java
import org.testng.annotations.Factory;
public class Factory1{@Factorypublic 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使用它的注释, 以使用相应类的不同实例来执行同一测试类中存在的测试方法。
工作/人力资源面试问题 |
jQuery面试问题 |
Java OOP面试问题 |
JSP面试问题 |
休眠面试问题 |
SQL面试题 |
Android面试题 |
MySQL面试问题 |
JavaScript面试问题
Java基础面试问题
Servlet面试问题
春季面试问题
PL / SQL面试问题
Oracle面试问题
【最新TestNG面试题和答案合集详解】SQL Server面试问题
推荐阅读
- 面试必备!LINQ面试题及其答案合集
- 最新推荐!TensorFlow面试题及其答案合集
- 最新机器学习面试题及其答案详细汇总
- 最新推荐!Java设计模式面试题及其答案汇总
- 推荐!最新算法面试题及其答案精华汇总
- API测试面试题及其答案合集推荐
- 验证码有啥用,图文详细说明验证码有啥用
- 页面不显示图片,图文详细说明页面不显示图片的处理办法
- lol不能观战,图文详细说明lol不能观战怎样办