美文网首页
TestNG用法总结

TestNG用法总结

作者: 一见你就笑嘻嘻 | 来源:发表于2018-12-12 16:39 被阅读14次

    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 标记一个类或方法作为测试的一部分。
    • TestNG的简单使用
    package com.test;
    
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.*;
    
    public class Testng01 {
        @BeforeClass
        public void test() {
            System.out.println("11111111111");
            
        }
        @Test
        public void test2() {
            System.out.println("22222222222222");
            
        }
        @AfterClass
        public void test3() {
            System.out.println("333333333333");
        }
    
    }
    
    

    xml:

    <!-- testng注解的普通用法 -->
        <test name="test2">
            <classes>
                <class name="com.test.Testng01" />
            </classes>
        </test>
    
    • 运行结果如图:


      运行结果
    • 组测试
      组测试即为在进行测试时可以通过testng.xml来指定执行相关的命名的组,使用@Test(groups = {"name"})注解来指定名称
      如下代码所示:
    package com.test;
    
    import org.testng.annotations.Test;
    
    public class TestngLearn01 {
        
        @Test(groups = {"systemtest"})
        public void test1() {
            System.out.println("this is test learn01");
        }
        @Test(groups = {"functiontest"})
        public void test2() {
            System.out.println("this is test learn02");
        }
    }
    

    xml:

    <test name = "test1" >
       <groups>
          <run>
             <include name = "systemtest" />
          </run>
       </groups>
       <packages>
          <package name = "com.test.*" />
       </packages>
    </test>
    
    • 忽略测试
      使用@Test(enabled = false)来说明该这个case不需要执行

    代码:

    package com.test;
    
    import org.testng.annotations.Test;
    
    //testng忽略测试
    public class TesgNGIgnore {
        
        @Test(enabled = false)
        public void testIgnore1() {
            System.out.println("这条测试信息被忽略");
        }
        
        @Test
        public void testIgnore2() {
            System.out.println("这条测试用来验证是否被忽略");
        }
    
    }
    
    • 异常测试
      在工作总可能会碰到需要这个方法抛出什么样的异常来的测试,此时使用异常测试

    代码:

    package com.test;
    
    import org.testng.annotations.Test;
    
    //异常测试
    public class ExceptionTest {
        
        @Test(expectedExceptions = IllegalArgumentException.class,expectedExceptionsMessageRegExp="NullPoint")
        public void testException() {
            throw new IllegalArgumentException("NullPoint");
        }
    }
    
    
    • 依赖测试
      如代码所示:
    package com.test;
    
    import org.testng.annotations.Test;
    
    /**
     * 如果setupEnv成功执行则会执行testMessage;
     * 如果setupEnv未成功执行则不会执行testMessage。
     * **/
    public class DependsTest {
           @Test
            public void setupEnv(){
                System.out.println("this is setup Env");
               // throw new RuntimeException(); 若setupEnv执行失败则会跳过testMessage
            }
            
            @Test(dependsOnMethods = {"setupEnv"})
            public void testMessage(){
                System.out.println("this is test message");
            }
    
    }
    
    
    • 参数化测试01
      testng.xml 方式使代码和测试数据分离,方便维护
    package com.test;
    
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    
    /**
     * 
     * testng.xml 方式使代码和测试数据分离,方便维护
     * TestNG参数化测试01
     * */
    public class ParametricTesting01 {
        @Test
        @Parameters({"test1","test2"})
        public void ParaTest(String test1,String test2) {
            System.out.println("This is " + test1 + test2);
        }
    
    }
    

    xml:

     <!-- 参数测试xml方式 -->
        <parameter name = "test1" value ="heqq"/>
        <parameter name="test2" value=" test"/>
        <test name = "test3">
            <classes>
                <class name = 'com.test.ParametricTesting01'/>
            </classes>      
        </test>
    
    • 参数化测试02
      通过DataProvider传递参数,注意传递参数时参数是按照传参的顺序排列的参数组
    package com.test;
    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    /**
     * 
     * 通过DataProvider传递参数
     * TestNG参数化测试02
     * */
    public class ParametricTesting02 {
        
            
            @DataProvider(name = "username")
            public Object[][] Users(){
                return new Object[][] {
                    {"root "," password"},
                    {"test "," heqq"},  
                    {"qq "," he"}
                };
            }
            
        @Test(dataProvider = "username")
        public void user(String name,String password) {
            System.out.println("My name is " + name +"but my password is" + password);
        }
    }
    
    

    全部的xml:

    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    <suite name="Fourth suite" verbose="1" >
    <!-- 组测试 -->
    <test name = "test1" >
       <groups>
          <run>
             <include name = "systemtest" />
          </run>
       </groups>
       <packages>
          <package name = "com.test.*" />
       </packages>
       
    </test>
    <!-- testng注解的普通用法 -->
        <test name="test2">
            <classes>
                <class name="com.test.Testng01" />
            </classes>
        </test>
        <!-- 参数测试xml方式 -->
        <parameter name = "test1" value ="heqq"/>
        <parameter name="test2" value=" test"/>
        <test name = "test3">
            <classes>
                <class name = 'com.test.ParametricTesting01'/>
            </classes>      
        </test>
    </suite>
    
    
    

    相关文章

      网友评论

          本文标题:TestNG用法总结

          本文链接:https://www.haomeiwen.com/subject/mmhphqtx.html