TestNg注解使用
Posted heyuling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TestNg注解使用相关的知识,希望对你有一定的参考价值。
1.TestNG常用注解
@Test 标记一个类或方法作为测试的一部分
@BeforeMethod 注解的方法将在每个测试方法运行之前运行
@AfterMethod 注解的方法将在每个测试方法运行之后运行
@BeforeClass 注解的方法将只运行一次,在当前类中所有方法运行之前调用
@AfterClass 注解的方法将只运行一次,在当前类中所有方法运行之后调用
@BeforeSuite 标记的方法:在某个测试套件(suite)开始之前运行
@AfterSuite标记的方法:在某个测试套件(suite)所有的测试方法执行之后运行
@BeforeGroups 此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用
@AfterGroups此方法是保证在运行属于任何这些组最后一个测试方法后,该方法被调用
@BeforeTest 是针对xml文件中的test标签进行操作,在xml中的每一个test标签执行前运行
@AfterTest 是针对xml文件中的test标签进行操作,在xml中的每一个test标签执行后运行
1.1代码示例
1 public class BasicAnnotince { 2 // 最基本的注解,用来把方法标记为测试的一部分 3 @Test(groups = "1") 4 public void testCase1() { 5 System.out.println("我是测试用例1"); 6 } 7 @Test(groups = "2") 8 public void testCase2() { 9 System.out.println("我是测试用例2"); 10 } 11 @BeforeMethod 12 public void beforeMethod1() { 13 System.out.println("beforeMethod-在每一个测试用例执行之前运行"); 14 } 15 @AfterMethod 16 public void afterMethod2() { 17 System.out.println("afterMethod-在每一个测试用例执行之后运行"); 18 } 19 @BeforeClass 20 public void beforeClass1() { 21 System.out.println("beforeClass1-在当前类中方法运行之前调用"); 22 } 23 @AfterClass 24 public void afterClass1() { 25 System.out.println("afterClass1-在当前类中所有方法运行之后调用"); 26 } 27 @BeforeSuite 28 public void beforeSuite1() { 29 System.out.println("beforeSuite运行了"); 30 } 31 @AfterSuite 32 public void afterSuite1() { 33 System.out.println("afterSuite运行了"); 34 } 35 @BeforeTest 36 public void beforeTest1() { 37 System.out.println("beforeTest-在测试方法开始之前运行"); 38 } 39 @AfterTest 40 public void afterTest1() { 41 System.out.println("afterTest1-在测试方法结束之后运行"); 42 } 43 @BeforeGroups("1") 44 public void beforeGroups() { 45 System.out.println("beforeGroups-111111"); 46 } 47 @AfterGroups("1") 48 public void afterGroups() { 49 System.out.println("afterGroups-111111"); 50 } 51 }
1.2运行结果
2.套件测试
2.1代码示例
1 public class SuiteConfig { 2 @BeforeSuite 3 public void beforeSuite(){ 4 System.out.println("before suite运行啦"); 5 } 6 7 @AfterSuite 8 public void aftersuite(){ 9 System.out.println("after suite 运行啦"); 10 } 11 12 @BeforeTest 13 public void beforeTest(){ 14 System.out.println("beforeTest"); 15 } 16 17 @AfterTest 18 public void afterTest(){ 19 System.out.println("afterTest"); 20 } 21 }
2.2运行结果
3.忽略测试:@Test(enabled = false)
3.1代码示例
1 public class IgnoreTest { 2 @Test 3 public void ignore1() { 4 System.out.println("ignore1"); 5 } 6 @Test(enabled = false) 7 public void ignore2() { 8 System.out.println("ignore2"); 9 } 10 }
3.2运行结果
4.组测试@Test(groups = "组名"),@BeforeGroups("组名"),@AfterGroups("组名")
4.1代码示例
1 public class GroupsTest { 2 @Test(groups = "server") 3 public void test1() { 4 System.out.println("这是服务端的测试方法1"); 5 } 6 @Test(groups = "server") 7 public void test2() { 8 System.out.println("这是服务端的测试方法2"); 9 } 10 @Test(groups = "client") 11 public void test3() { 12 System.out.println("这是客户端的测试方法3"); 13 } 14 @Test(groups = "client") 15 public void test4() { 16 System.out.println("这是客户端的测试方法4"); 17 } 18 @BeforeGroups("server") 19 public void beforeGroupsOnServer() { 20 System.out.println("这是服务端组运行之前执行的方法"); 21 } 22 @AfterGroups("server") 23 public void afterGroupsOnServer() { 24 System.out.println("这是服务端组运行之后执行的方法"); 25 } 26 }
4.2运行结果
5.类分组测试@Test(groups = "组名"),xml中include标签name属性为组名
5.1代码示例
@Test(groups = "stu") public class GroupsOnClass1 { public void test1() { System.out.println("GroupsOnClass1中test1方法"); } public void test2() { System.out.println("GroupsOnClass1中test2方法"); } }
@Test(groups = "tea") public class GroupsOnClass2 { public void test1() { System.out.println("GroupsOnClass2中test1方法"); } public void test2() { System.out.println("GroupsOnClass2中test2方法"); } }
<?xml version="1.0" encoding="UTF-8"?> <suite name="test1"> <test name="onlyRunStu"> <groups> <run> <include name="stu"/> </run> </groups> <classes> <class name="com.test.testng.GroupsOnClass1"/> <class name="com.test.testng.GroupsOnClass2"/> </classes> </test> </suite>
5.2运行结果
6.异常测试@Test(expectedExceptions = 异常类名)
6.1代码示例
1 public class ExceptionTest { 2 @Test(expectedExceptions = RuntimeException.class) 3 public void runTimeExceptionSuccess() { 4 System.out.println("这是成功的异常测试"); 5 throw new RuntimeException(); 6 } 7 }
6.2运行结果
7.依赖测试:@Test(dependsOnMethods = {"XXX方法名"} ) ,当被依赖的方法执行失败,依赖的方法忽略
7.1代码示例
1 public class DependsTest { 2 @Test 3 public void test1() { 4 System.out.println("test1 run"); 5 throw new RuntimeException(); 6 } 7 @Test(dependsOnMethods = {"test1"}) 8 public void test2() { 9 System.out.println("test2 run"); 10 } 11 }
7.2运行结果
8.参数化测试——xml文件参数化
8.1代码示例
1 public class ParameterTest { 2 @Test 3 @Parameters({"name","age"}) 4 public void paraTest(String name,int age) { 5 System.out.println("name="+name+",age="+age); 6 } 7 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <suite name="test2"> 3 <test name="para"> 4 <classes> 5 <!--注意 parameter中的name要跟@Parameters中的对应--> 6 <parameter name="name" value="张三"></parameter> 7 <parameter name="age" value="23"></parameter> 8 <class name="com.test.testng.ParameterTest"/> 9 </classes> 10 </test> 11 </suite>
9.参数化测试——DataProvider参数化
9.1代码示例
1 public class DataProviderTest { 2 // dataProvider要跟@DataProvider的name属性值一致 3 @Test(dataProvider = "data") 4 public void paraTest(String name,int age) { 5 System.out.println("name="+name+",age="+age); 6 } 7 @DataProvider(name = "data") 8 public Object[][] dataProvider(){ 9 Object[][] o = new Object[][] { 10 {"张三",23}, 11 {"李四",24}, 12 {"王五",25} 13 }; 14 return o; 15 } 16 }
9.2运行结果
9.3根据方法名传值
9.3.1代码示例
1 public class DataProviderTest { 2 // dataProvider要跟@DataProvider的name属性值一致 3 @Test(dataProvider = "methodData") 4 public void Test1(String name,int age) { 5 System.out.println("Test111方法中name="+name+",age="+age); 6 } 7 @Test(dataProvider = "methodData") 8 public void Test2(String name,int age) { 9 System.out.println("Test222方法中name="+name+",age="+age); 10 } 11 @DataProvider(name = "methodData") 12 public Object[][] dataProvider(Method method){ 13 Object[][] o = null; 14 if (method.getName().equals("Test1")) { 15 o= new Object[][] { 16 {"张三",23}, 17 }; 18 }else if (method.getName().equals("Test2")) { 19 o= new Object[][] { 20 {"李四",24}, 21 }; 22 }else { 23 o= new Object[][] { 24 {"王五",25} 25 }; 26 } 27 28 return o; 29 } 30 }
9.3.2运行结果
10.多线程测试——注解方式实现
10.1代码示例
1 public class MultiThreadOnAnnotice { 2 /* 3 * nvocationCount----表示执行的次数 4 threadPoolSize-----表示线程池的内线程的个数 5 * */ 6 @Test(invocationCount = 10,threadPoolSize = 3) 7 public void test1() { 8 System.out.println("MultiThreadOnAnnotice_test1_Thread Id :"+Thread.currentThread().getId()); 9 } 10 }
10.2运行结果
11.多线程测试——xml文件实现
11.1parallel:methods级别
11.1.1代码示例
1 <?xml version="1.0" encoding="UTF-8"?> 2 <suite name="multi" parallel="methods" thread-count="3"> 3 <!-- 4 tests级别:不同的test tag下的用例可以在不同的线程下执行 5 相同的test tag下的用例只能在同一个线程中去执行 6 classs级别:相同的class tag 下的用例在同一个线程中执行 7 不同的class tag 下的用例可以在不同的线程中执行 8 methods级别:所有用例都可以在不同的线程下去执行 9 10 thread-count:代表了最大并发线程数 11 12 xml文件配置这种方式不能指定线程池,只有方法上才可以指定线程池 13 --> 14 <test name="test1"> 15 <classes> 16 <class name="com.test.testng.MutliThreadOnXml"/> 17 </classes> 18 </test> 19 </suite>
11.1.2运行结果
11.2parallel:tests级别-不同test tag时
11.2.1代码示例
1 <?xml version="1.0" encoding="UTF-8"?> 2 <suite name="multi" parallel="tests" thread-count="3"> 3 <test name="test1"> 4 <classes> 5 <class name="com.test.testng.MutliThreadOnXml"/> 6 </classes> 7 </test> 8 <test name="test2"> 9 <classes> 10 <class name="com.test.testng.MutliThreadOnXml"/> 11 </classes> 12 </test> 13 </suite>
11.2.2运行结果
11.3parallel:tests级别-相同test tag时
11.3.1代码示例
1 <?xml version="1.0" encoding="UTF-8"?> 2 <suite name="multi" parallel="tests" thread-count="3"> 3 <test name="test1"> 4 <classes> 5 <class name="com.test.testng.MutliThreadOnXml"/> 6 </classes> 7 </test> 8 </suite>
11.3.2运行结果
11.4parallel:classes级别
11.4.1代码示例
1 <?xml version="1.0" encoding="UTF-8"?> 2 <suite name="multi" parallel="classes" thread-count="3"> 3 <test name="test1"> 4 <classes > 5 <class name="com.test.testng.MutliThreadOnXml"/> 6 <class name="com.test.testng.ExceptionTest"/> 7 </classes> 8 </test> 9 <test name="test2"> 10 <classes > 11 <class name="com.test.testng.MutliThreadOnXml"/> 12 </classes> 13 </test> 14 </suite>
11.4.2运行结果
12超时测试——@Test(timeOut = 毫秒值)
12.1代码示例
1 public class TimeOutTest { 2 @Test(timeOut = 3000) 3 public void timeOutfail() throws InterruptedException { 4 Thread.sleep(4000); 5 } 6 7 }
12.2运行结果
以上是关于TestNg注解使用的主要内容,如果未能解决你的问题,请参考以下文章