TestNG

作者: 好大一只鹏 | 来源:发表于2019-10-24 15:25 被阅读0次

    注解

    @Parameters
    通过TestNG实现参数话常用两种方式,一种是借助 @Parameters读取testng.xml中参数
    @Test  
    标识了一个测试用例
    下面是此注解的常用属性
    1.priority  标识了测试用例的执行顺序(后续在专门讲执行顺序)
    2.description  描述用例
    3.enable  标记的test方法是否要执行  默认为true  执行
    4.dependsOnMethods   标记测试方法要依赖的测试方法
    例如此方法依赖于testTwoMethod:
    @Test(dependsOnMethods={"testTwoMethod"})
        public void testOneMethod(){
            System.out.println("Test One Method");
        }
    5.groups  指定标记方法归属于哪个组  对于组的概念的话后续讲
    @Parameters  进行参数传递的功能  次注解应用于方法上  参数要对应于形参   参数的声明在testng.xml中。
    @Optional    应用于方法的形参中  表示给这个参数一个默认值 进行数据传递
    @BeforeClass     标记的方法在测试类运行之前运行。(会运行一次)一般用于初始化
    @BeforeMethod    标记的方法会在每个测试用例执行之前执行(会执行多次) 一般用于清理环境等修改配置等
    @BeforeTest     在整个测试运行之前执行
    @ 相对应的有AfterMethod AfterClass  AfterTest 
    @Listeners    定义测试类的监听器 
    

    执行顺序

    1.用例面默认的执行顺序是根据方法名字母 (谁的字母大先执行 一般可以在方法名加上字母+数组  例如:test1_方法名)
    2.在同一个类中使用@Tset(priority=1)注解的会按照priority的顺序执行  默认不写的话是0,则会按照方法名执行)
    3.需要运行多个测试类:配置了testng.xml文件
       <test verbose="10" preserve-order="true" name="报销单演示demo1">
            <parameter name="phoneNumber" value="14082978625"/>
            <classes>
                <class name="com.test.api.testcase.Test1"/>
                <class name="com.test.api.testcase.Test2"/>
                <class name="com.test.api.testcase.Test3"/>
            </classes>
        </test>
     @Test
        public void test(){
            System.out.println("first test1");
        }
        @Test
        public void test1(){
            System.out.println("first test2");
        }
    preserve-order主要是控制test下节点classes执行顺序的
    
    则上面的执行顺序为  
    first test1
    first test2
    secord test1
    secord test2
    third test1
    third test2
    
    4.当我们在testng.xml文件中配置了preserve-order =true  ,也在用例中设置了优先级,那么执行顺序是什么样呢?
    首先xml 的配置还是上面的,我们给测试类Test2中的test2方法的优先级改为1,给Test3中的test2的方法的优先级改为1,
    比如:
     @Test
        public void test1(){
            System.out.println("third test1");
        }
        @Test(priority = 1)
        public void test2(){
            System.out.println("third test2");
        }
    那么现在的情况是Test2的方法test2和Test3中的test2方法的优先级都为1;
    输出结果为:
    first test1
    first test2
    secord test1
    third test1
    secord test2
    third test2
    分析:Test1 中的方法的优先级都为0,则按照字母顺序运行,接下来运行了仍然是优先级为0的方法 ,最后在运行了优先级为1的。
    总结:这样的配置不能保证一个测试类的方法执行完成后再运行下个测试类。如果是同一priority优先级方法,按照配置的顺序执行。也即priority的优先级>preserve-order。
    如果想要执行完这个测试类的方法再去执行下个测试类的话:
    1.设置的priority 的优先级不能重复
    2.不设优先级默认为0,按照方法名运行。
    参考:
    

    testng.xml tag详解

    <?xml version="1.0" encoding="UTF-8"?>
    <suite name="TestAll" parallel="tests" thread-count="2">      ------测试套件的名称
    
    <parameter name="phoneNumber" value="14082978625"/>
        <test name="order">
            <classes>
                <class name="com.yiibai.TestConfig" />
                <class name="com.yiibai.TestOrder" />
            </classes>
        </test>
    
        <test name="database">
    
            <classes>
                <class name="com.yiibai.TestConfig" />
                <class name="com.yiibai.TestDatabase" />
            </classes>
        </test>
    
    </suite>
    
    parallel  -- TestNG是否运行不同的线程来运行这个套件。
    thread-count  --  线程数
    verbose="10"     运行的测试用例级别或详细程度
    preserve-order="true"      是否按照顺序执行   默认是true
    parameter  -- 标签标识了传递的参数 对应了用例中的@Parameter
      
    <class name="com.test.api.testcase.Test1">
                    <methods>
                        <include name=""></include>
                         <exclude name=""></exclude>       
                    </methods>
                </class>
    <method>  标签可以标识方法包含了子标签<include>需要运行的测试方法,<exclude>  需要排除在外的测试方法。
    

    相关文章

      网友评论

          本文标题:TestNG

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