zoukankan      html  css  js  c++  java
  • 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代码示例

    1 @Test(groups = "tea")
    2 public class GroupsOnClass2 {
    3     public void test1() {
    4         System.out.println("GroupsOnClass2中test1方法");
    5     }
    6     public void test2() {
    7         System.out.println("GroupsOnClass2中test2方法");
    8     }
    9 }
    1 @Test(groups = "stu")
    2 public class GroupsOnClass1 {
    3     public void test1() {
    4         System.out.println("GroupsOnClass1中test1方法");
    5     }
    6     public void test2() {
    7         System.out.println("GroupsOnClass1中test2方法");
    8     }
    9 }
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <suite name="test1">
     3     <test name="onlyRunStu">
     4         <groups>
     5             <run>
     6                 <include name="stu"/>
     7             </run>
     8         </groups>
     9         <classes>
    10             <class name="com.test.testng.GroupsOnClass1"/>
    11             <class name="com.test.testng.GroupsOnClass2"/>
    12         </classes>
    13     </test>
    14 </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运行结果

  • 相关阅读:
    JAVA 接口与抽象类(interface与abstract)的区别
    接口测试的测试点
    HTTP协议首部及Fiddler工具工作原理
    Android自动化测试AppiumLibrary库关键字
    蔬菜水果购买记
    健胃饮食
    榨汁机食谱
    随机权值平均
    周鸿祎IOT发布会思考
    Bilinear CNN与 Randomly Wired Neural Network
  • 原文地址:https://www.cnblogs.com/heyuling/p/12066989.html
Copyright © 2011-2022 走看看