zoukankan      html  css  js  c++  java
  • TestNG基本注解

     

    注解描述
    @BeforeSuite 注解的方法将只运行一次,运行所有测试前此套件中。
    @AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后。
    @BeforeClass 注解的方法将只运行一次先行先试在当前类中的方法调用。
    @AfterClass 注解的方法将只运行一次后已经运行在当前类中的所有测试方法。
    @BeforeTest 注解的方法将被运行之前的任何测试方法属于内部类的 <test>标签的运行。
    @AfterTest 注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行。
    @BeforeGroups 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。
    @AfterGroups 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。
    @BeforeMethod 注解的方法将每个测试方法之前运行。
    @AfterMethod 被注释的方法将被运行后,每个测试方法。
    @DataProvider
    标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。
    该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
    @Factory 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
    @Listeners 定义一个测试类的监听器。
    @Parameters 介绍如何将参数传递给@Test方法。
    @Test 标记一个类或方法作为测试的一部分。

     1、作用域的不一样划分出了各种不同的标签:

    一个套件(suite)包含多个测试(test)

    一个测试(test)包含多个类(class)

    一个测试(test)包含多个组(group)

    一个类(class)包含多个方法(method)

    2、定义组

    在上述基本标签后均可以定义他们所属的组,定义如下:

     @BeforeGroups(groups="test01")
     public void group(){
      System.out.println("I am a group!");
     }

    group方法属于test01这个组,只有当执行test01这个组时group方法才能执行。

    每个防范可以属于多个组,定义如下:

     @BeforeClass(groups={"test01","test02"})
     public void classs(){
      System.out.println("tAutoTest01-BeforeClass");
     }

    当执行test01和test02时该方法都会执行。

    3、参数化

    (1)、xml参数传递

    代码定义:

     @Test
     @Parameters("myName")//可同时传递多个参数如:@Parameters({"myName","myName01"})

     public void test01(String myName) {
      System.out.println(myName);
     }

    xml定义:

    <suite name="Suite" parallel="none">
     <parameter name="myName" value="YinTing"></parameter>
     <test name="Test">
     <classes>
     <class name="com.sword.test.tAutoTest01"></class>
     </classes>
     </test>
     <test name="Test01">
     <classes>
     <class name="com.sword.test.tAutoTest"></class> <!-- 该值覆盖了前面定义的YinTing-->
     </classes>
     </test>
    </suite> <!-- Suite -->

    (2)、代码动态传递(数据提供者

    代码定义:

    @DataProvider(name="TestData")//定义数据的提供者
     public Object[][] data() {
      
      return new Object[][]{{"YinTing",26},{"YangYi",24}};
     }
     @Test(dataProvider="TestData")//指定数据提供者

     public void test01(String name,Integer age){
      System.out.println("姓名:"+name+"    "+"年龄:"+age);
     }

    4、工厂

    策略:一般我们会在标有@Factory注解的方法中对测试类进行调用,这时TestNg会自动调用测试类中带有@Test注解的方法

    工厂类代码定义:

     

    package com.sword.test;

     

    import org.testng.annotations.Factory;

     

    public class tAutoFactory {
     @Factory
     public Object[] test01(){
      Object test01[]=new Object[10];
      for(int i=00;i<10;i++){
       test01[i]=new tAutoTest01(i);
      }
      return test01;
     }
    }

    Test类代码定义:

    package com.sword.test;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;

    public class tAutoTest01 {
     public int i=0;
     public tAutoTest01(int i){
      this.i=i;
     }
     @DataProvider(name="TestData")
     public Object[][] data() {
      
      return new Object[][]{{"YinTing",26},{"YangYi",24}};
     }
     @Test(dataProvider="TestData")
     public void test01(String name,Integer age){
      System.out.println("姓名:"+name+"    "+"年龄:"+age);
      System.out.println("-------------------"+this.i+"--------------------");
      try {
       Thread.sleep(1000);
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
    }

    XML定义:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Suite" parallel="none">
     <parameter name="myName" value="YinTing"></parameter>
     <test name="Test">
     <classes>
     <class name="com.sword.test.tAutoFactory"></class>
     </classes>
     </test>
    </suite> <!-- Suite -->

    执行结果:

     

    姓名:YinTing    年龄:26
    -------------------7--------------------
    姓名:YangYi    年龄:24
    -------------------7--------------------
    姓名:YinTing    年龄:26
    -------------------5--------------------
    姓名:YangYi    年龄:24
    -------------------5--------------------
    姓名:YinTing    年龄:26
    -------------------2--------------------
    姓名:YangYi    年龄:24
    -------------------2--------------------
    姓名:YinTing    年龄:26
    -------------------4--------------------
    姓名:YangYi    年龄:24
    -------------------4--------------------
    姓名:YinTing    年龄:26
    -------------------3--------------------
    姓名:YangYi    年龄:24
    -------------------3--------------------
    姓名:YinTing    年龄:26
    -------------------6--------------------
    姓名:YangYi    年龄:24
    -------------------6--------------------
    姓名:YinTing    年龄:26
    -------------------8--------------------
    姓名:YangYi    年龄:24
    -------------------8--------------------
    姓名:YinTing    年龄:26
    -------------------1--------------------
    姓名:YangYi    年龄:24
    -------------------1--------------------
    姓名:YinTing    年龄:26
    -------------------0--------------------
    姓名:YangYi    年龄:24
    -------------------0--------------------
    姓名:YinTing    年龄:26
    -------------------9--------------------
    姓名:YangYi    年龄:24
    -------------------9--------------------

    ===============================================
    Suite
    Total tests run: 20, Failures: 0, Skips: 0
    ===============================================

    5、监听器

     该地址讲解的相当详细:http://www.ibm.com/developerworks/cn/opensource/os-cn-testinglistener/index.html

    6、顺序执行测试&依赖测试&忽略测试

    (1)、顺序执行测试

    xml定义:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Suite" parallel="none">
     <parameter name="myName" value="YinTing"></parameter>
     <test name="Test"  preserve-order="true"><!-- 顺序执行测试中的测试方法 -->
     <classes>
     <class name="com.sword.test.tAutoFactory"></class>
     </classes>
     </test>
    </suite> <!-- Suite -->

    (2)、依赖测试

    代码定义:

    package com.sword.test;


    import org.testng.annotations.Test;

    public class tAutoTest {
     @Test
     public void test02(){
      System.out.println("I am test02!");
      throw new RuntimeException();
     }
     @Test(dependsOnMethods="test02")//test01依赖test02的成功执行,才能执行。当test02抛出异常不能正常执行后,test01已不能执行。
     public void test01(){
      System.out.println("YinTing");
     }
    }

    执行报告:

    I am test02!
    FAILED: test02
    java.lang.RuntimeException
     at com.sword.test.tAutoTest.test02(tAutoTest.java:10)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:597)
     at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
     at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
     at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
     at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
     at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
     at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
     at org.testng.TestRunner.privateRun(TestRunner.java:767)
     at org.testng.TestRunner.run(TestRunner.java:617)
     at org.testng.SuiteRunner.runTest(SuiteRunner.java:335)
     at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:330)
     at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
     at org.testng.SuiteRunner.run(SuiteRunner.java:240)
     at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
     at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
     at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
     at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
     at org.testng.TestNG.run(TestNG.java:1057)
     at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
     at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
     at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)

    SKIPPED: test01

    ===============================================
        Default test
        Tests run: 2, Failures: 1, Skips: 1
    ===============================================

    (3)、忽略测试

    代码定义:

    package com.sword.test;


    import org.testng.annotations.Test;

    public class tAutoTest {
     @Test(enabled=false)//该方法不会被执行。
     public void test02(){
      System.out.println("I am test02!");
     }
     @Test
     public void test01(){
      System.out.println("YinTing");
     }
    }

    执行报告:

    YinTing
    PASSED: test01

    ===============================================
        Default test
        Tests run: 1, Failures: 0, Skips: 0
    ===============================================

    未完待续。。。。。。。

  • 相关阅读:
    用 ArcMap 发布 ArcGIS Server FeatureServer Feature Access 服务 PostgreSQL 版本
    ArcMap 发布 ArcGIS Server OGC(WMSServer,MapServer)服务
    ArcScene 创建三维模型数据
    ArcMap 导入自定义样式Symbols
    ArcMap 导入 CGCS2000 线段数据
    ArcMap 导入 CGCS2000 点坐标数据
    ArcGis Server manager 忘记用户名和密码
    The view or its master was not found or no view engine supports the searched locations
    python小记(3)操作文件
    pytest(2) pytest与unittest的区别
  • 原文地址:https://www.cnblogs.com/swordyt/p/5385124.html
Copyright © 2011-2022 走看看