Testng继承处理

在testng进行测试的时候,往往会用到流程测试,在测试流程的时候,会有一些重复的操作可以多个类共用相同的方法,即放在父类中。

1.Before

  Before包含@BeforeClass、@BeforeMethod、@BeforeGroups、@BeforeSuite。

  在子类中可以调用到父类的@Before方法,包含上面的所有的Before。下面代码示例:

  TestngTestng.java

package com.yesterday.time.testng;

import org.apache.log4j.Logger;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;


public class TestngTestng {

    Logger logger = Logger.getLogger(TestngTestng.class);

    @BeforeClass
    public void testbefore(){
        logger.debug("testbfore");
    }
}

  TestngTestng1.java

package com.yesterday.time.testng;

import org.testng.annotations.Test;

public class TestngTestng1 extends TestngTestng{

    @Test
    public void testb(){
        logger.debug("TestngTestng1.testb");
    }
}

  结果为:

[DEBUG] 2016-12-27 13:29:33,718 method:com.yesterday.time.testng.TestngTestng.testbefore(TestngTestng.java:14)testbfore
[DEBUG] 2016-12-27 13:29:33,738 method:com.yesterday.time.testng.TestngTestng1.testb(TestngTestng1.java:10)TestngTestng1.testb

  2.DataProvider 此方法也可以写在父类中,常用于对同一个对象做流程操作。

package com.yesterday.time.testng;

import org.apache.log4j.Logger;
import org.testng.annotations.DataProvider;


public class TestngTestng {

    Logger logger = Logger.getLogger(TestngTestng.class);


    @DataProvider(name =  "test1")
    public Object[][] test1(){
        logger.debug("TestngTestng.test1");
        return new Object[][]{{5}};
    }



    @DataProvider(name = "testA")
    public Object[][] testA(){
        logger.debug("TestngTestng.testA");
        return new Object[][]{{10}};
    }

}


package com.yesterday.time.testng;

import org.testng.annotations.Test;

public class TestngTestng1 extends TestngTestng{


    @Test(dataProvider = "test1")
    public void test(int id){
        logger.debug("TestngTestng1.test");
        System.out.println("sfsd");
        if(id>5)
        {
            System.out.println("GGGGGGGG");
        }else{
            System.out.println("aaaaaaa");
        }
    }

    @Test(dataProvider = "test1")
    public void test2(int id){
        logger.debug("TestngTestng1.test2");
        System.out.println("sfsd");
        if(id>5)
        {
            System.out.println("GGGGGGGG");
        }else{
            System.out.println("aaaaaaa");
        }
    }

    @Test(dataProvider = "testA")
    public void test1(int id){
        logger.debug("TestngTestng1.test1");
        System.out.println("sfsd");
        if(id>5)
        {
            System.out.println("GGGGGGGG");
        }else{
            System.out.println("aaaaaaa");
        }
    }
}

  结果为:

[DEBUG] 2016-12-27 13:39:33,501 method:com.yesterday.time.testng.TestngTestng.test1(TestngTestng.java:14)TestngTestng.test1
[DEBUG] 2016-12-27 13:39:33,536 method:com.yesterday.time.testng.TestngTestng1.test(TestngTestng1.java:10)TestngTestng1.test
sfsd
aaaaaaa
[DEBUG] 2016-12-27 13:39:33,538 method:com.yesterday.time.testng.TestngTestng.testA(TestngTestng.java:22)TestngTestng.testA
[DEBUG] 2016-12-27 13:39:33,539 method:com.yesterday.time.testng.TestngTestng1.test1(TestngTestng1.java:34)TestngTestng1.test1
sfsd
GGGGGGGG
[DEBUG] 2016-12-27 13:39:33,541 method:com.yesterday.time.testng.TestngTestng.test1(TestngTestng.java:14)TestngTestng.test1
[DEBUG] 2016-12-27 13:39:33,543 method:com.yesterday.time.testng.TestngTestng1.test2(TestngTestng1.java:22)TestngTestng1.test2
sfsd
aaaaaaa

  从上面的例子中还可以发下,每个关联@DataProvider的test都会在运行之前调用@DataProvider的。

  那么在调用父类中的方法的先后顺序是什么样的呢?

  事实证明:直接例子

package com.yesterday.time.testng;

import org.apache.log4j.Logger;
import org.testng.annotations.*;


public class TestngTestng {

    Logger logger = Logger.getLogger(TestngTestng.class);

    @BeforeClass
    public void testbeforeClass(){
        logger.debug("testbforeClass");
    }

    @BeforeMethod
    public void testbeforeMethod(){
        logger.debug("testbeforeMethod");
    }
    @BeforeSuite
    public void testbeforeSuite(){
        logger.debug("testbeforeSuite");
    }
    @BeforeGroups
    public void testbeforeGroups(){
        logger.debug("testbeforeGroups");
    }
    @BeforeTest
    public void testbeforeTest(){
        logger.debug("testbeforeTest");
    }


    @DataProvider(name =  "test1")
    public Object[][] test1(){
        logger.debug("TestngTestng.test1");
        return new Object[][]{{5}};
    }

}

package com.yesterday.time.testng;

import org.testng.annotations.Test;

public class TestngTestng2 extends TestngTestng{


    @Test(dataProvider = "test1")
    public void test(int id){
        logger.debug("TestngTestng2.test");
        System.out.println("sfsd");
        if(id>5)
        {
            System.out.println("GGGGGGGG");
        }else{
            System.out.println("aaaaaaa");
        }
    }

}

  结果为:

[DEBUG] 2016-12-27 13:51:15,916 method:com.yesterday.time.testng.TestngTestng.testbeforeSuite(TestngTestng.java:22)testbeforeSuite
[DEBUG] 2016-12-27 13:51:15,923 method:com.yesterday.time.testng.TestngTestng.testbeforeTest(TestngTestng.java:30)testbeforeTest
[DEBUG] 2016-12-27 13:51:15,933 method:com.yesterday.time.testng.TestngTestng.testbeforeClass(TestngTestng.java:13)testbforeClass
[DEBUG] 2016-12-27 13:51:15,955 method:com.yesterday.time.testng.TestngTestng.test1(TestngTestng.java:36)TestngTestng.test1
[DEBUG] 2016-12-27 13:51:15,960 method:com.yesterday.time.testng.TestngTestng.testbeforeMethod(TestngTestng.java:18)testbeforeMethod
[DEBUG] 2016-12-27 13:51:15,966 method:com.yesterday.time.testng.TestngTestng2.test(TestngTestng2.java:10)TestngTestng2.test
sfsd
aaaaaaa

  从结果上来看,在父类中要注意调用的@DataProvider无法用@BeforeMethod中的方法的问题,这个和继承的加载顺序有关。如果测试方法和@DataProvider、@BeforeMethod在相同的类中,就不会存在这个问题

  

  

转载于:https://www.cnblogs.com/yesterday-time/p/6225615.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值