网站后台logo,网络运维从入门到精通,浙江网站建设公司,网站管理系统下载之前#xff0c;我们讨论了BeforeMethod注释#xff0c;在这篇文章中#xff0c;我们将讨论TestNG的AfterMethod注释。AfterMethod注释的方法在类中的每个测试用例或测试方法之后执行。
那么#xff0c;这个带AfterMethod注释的方法什么时候执行呢#xff1f;
下面的XML…之前我们讨论了BeforeMethod注释在这篇文章中我们将讨论TestNG的AfterMethod注释。AfterMethod注释的方法在类中的每个测试用例或测试方法之后执行。
那么这个带AfterMethod注释的方法什么时候执行呢
下面的XML将帮助您理解带注释的方法的执行点。
!DOCTYPE suite SYSTEM https://testng.org/testng-1.0.dtd suite namecodekrutest namecodekruclassesclass nameTest.CodekruTestFirstmethodsinclude nametestMethod1 /!-- AfterMethod annotated method of CodekruTestFirst class will execute here --include nametestMethod2 /!-- AfterMethod annotated method of CodekruTestFirst class will again execute here --/methods/classclass nameTest.CodekruTestSecondmethodsinclude nametestMethod1 /!-- AfterMethod annotated method of CodekruTestSecond class will execute here --include nametestMethod2 /!-- AfterMethod annotated method of CodekruTestSecond class will again execute here --/methods/class/classes/test
/suite
因此如上面的XML所示AfterMethod注释的方法将在类中的每个测试用例之后执行。让我们看看实际情况。
CodekruTestFirst.java
package Test;import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;public class CodekruTestFirst {AfterMethodpublic void afterMethod() {System.out.println(afterMethod in CodekruTestFirst class);}Testpublic void testMethod1() {System.out.println(Executing the test1 in CodekruTestFirst class);Assert.assertTrue(true);}Testpublic void testMethod2() {System.out.println(Executing the test2 in CodekruTestFirst class);Assert.assertTrue(true);}}
CodekruTestSecond.java
package Test;import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;public class CodekruTestSecond {AfterMethodpublic void afterMethod() {System.out.println(afterMethod in CodekruTestSecond class);}Testpublic void testMethod1() {System.out.println(Executing the test1 in CodekruTestSecond class);Assert.assertTrue(true);}Testpublic void testMethod2() {System.out.println(Executing the test2 in CodekruTestSecond class);Assert.assertTrue(true);}}
现在我们将使用下面的XML文件执行这两个类
suite namecodekrutest namecodekruTestclassesclass nameTest.CodekruTestFirst /class nameTest.CodekruTestSecond //classes/test
/suite
XML文件的输出-
Executing the test1 in CodekruTestFirst class
afterMethod in CodekruTestFirst class
Executing the test2 in CodekruTestFirst class
afterMethod in CodekruTestFirst class
Executing the test1 in CodekruTestSecond class
afterMethod in CodekruTestSecond class
Executing the test2 in CodekruTestSecond class
afterMethod in CodekruTestSecond class
codekru
Total tests run: 4, Passes: 4, Failures: 0, Skips: 0这里发生了什么
默认情况下TestNG将按照XML文件中的顺序运行我们的测试。因此它将选择CodekruTestFirst类并运行其第一个测试用例然后是AfterMethod注释的方法然后再次运行第二个测试用例然后是AfterMethod注释的方法依此类推直到所有用例都被执行。 然后它将选择CodekruTestSecond类并以相同的方式执行它。
现在让我们来玩一点牛鬼蛇神
如果一个类中有两个带AfterMethod注释的方法怎么办他们两个会被处理吗
了解这一点的最简单方法就是去做。所以让我们在CodekruTestFirst类中再放一个带注释的方法。
package Test;import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;public class CodekruTestFirst {AfterMethodpublic void afterMethod1() {System.out.println(afterMethod1 in CodekruTestFirst class);}AfterMethodpublic void afterMethod2() {System.out.println(afterMethod2 in CodekruTestFirst class);}Testpublic void testMethod1() {System.out.println(Executing the test1 in CodekruTestFirst class);Assert.assertTrue(true);}Testpublic void testMethod2() {System.out.println(Executing the test2 in CodekruTestFirst class);Assert.assertTrue(true);}
下面是运行CodekruTestFirst类的XML文件。
suite namecodekrutest namecodekruTestclassesclass nameTest.CodekruTestFirst //classes/test
/suite
XML文件的输出-
Executing the test1 in CodekruTestFirst class
afterMethod1 in CodekruTestFirst class
afterMethod2 in CodekruTestFirst class
Executing the test2 in CodekruTestFirst class
afterMethod1 in CodekruTestFirst class
afterMethod2 in CodekruTestFirst class
codekru
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0在这里我们可以看到两个AfterMethod注释的方法都运行了。所以如果你把一个或多个带注释的方法放在一个类中并不重要它们都将在该类中的每个测试用例之后运行。