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

    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

  • 相关阅读:
    LoadRunner利用ODBC编写MySql脚本(转)
    未在本地计算机上注册 microsoft.jet.oledb.4.0 提供程序
    趣文:舌尖上的程序猿
    Hadoop之我见
    C语言的经典排序算法源码
    Oracle自学笔记(一)
    log4j.properties 详解与配置步骤总结
    修改oracle用户密码永不过期
    Android 发送短信总结
    CEF禁止右键菜单
  • 原文地址:https://www.cnblogs.com/alisapan/p/6811351.html
Copyright © 2011-2022 走看看