java + selenium测试框架(之测试数据准备) 版本演化六

java + selenium测试框架(之测试数据准备) 版本演化六

在我们增加测试用例时,通常希望测试数据和测试框架,以及页面元素分开。这样方便维护。

在testng中提供的DataProvider注解,很方便我们集中管理测试数据:

DataProvider

public class SearchData {

    @DataProvider(name = "searchKey1")  
    public static Object[][] searchKeys() {
        return new Object[][]{      
                {"apple"},  
                {"苹果"}
            };
    }

    @DataProvider(name = "searchKey2")
    public Object[][] providerMethod(Method method){
        Object[][] result = null;
        if(method.getName().equals("testSearch1")){
            result = new Object[][]{new Object[]{"apple"}};
        }else if(method.getName().equals("testSearch2")){
            result = new Object[][]{new Object[]{"苹果"}};
        }
        return result;
    }
}

测试调用

@Test(dataProvider = "searchKey1", dataProviderClass = SearchData.class)
public void testSearch(String text){
    page.SearchText(text);
    sleep(1);
    System.out.println(driver.getTitle());
    Assert.assertTrue(driver.getTitle().contains(text));
    System.out.println(page.getCurrentUrl());
}

测试数据准备的理念

1,尽量将测试数据在单独的文件中进行管理,这样当测试页面发生变化时能统一处理。 2,为了防止页面发生变化,尽量在传递测试数据时,以类的形式传递,而不是字段传递。

如下,一个痛苦冗长的实际使用例子

假如,我们的DemandClass发生了变化,那么在修改测试用例时,是不是比直接罗列字段要更好定位修改位置?

不知道这样做对不对,好不好,需要大家去探索了。。。。 如果有更好的管理方式,请大家分享。。。

public class DemandData {

    public String title;
    public int[] resType;
    public String bizType;
    public int demandType;
    public String feedbackDate;
    public String vender;

    public final String contract="181315IDC0016";
    //--机房信息
    // 机房名称
    public String mserversName;

    // 区域要求
    public String areaDemand ;

    // 预计服务器数量 
    public String serversNum;

    // 电力稳定性
    public String stability;

    // 使用时间
    public String museTimeDesc;

    // 其它说明
    public String mothers;

    //--网络信息
    // 外网总带宽
    public String netbandWidth;

    // 带宽说明 
    public String bandWidthDesc;

    // 网络稳定性
    public String netWorkStability;

    // 网络接口
    public String netWorkInterface;

    // 模块类型
    public String moduleType;

    //其它说明
    public String nothers;

    // 使用时间
    public String nuseTimeDesc;

    //--传输信息

    //传输类型
    public String transmissionType;
    //需求数量
    public String demandNum;

    //需求数量单位
    public String circuitryUnit;

    //A端地址
    public String a_ip_address;

    //B端地址
    public String b_ip_address;

    //必要条件
    public String necessaryCondition;

    //非必要条件
    public String notNecessaryCondition;

    //使用时间
    public String tuseTimeDesc;

    //其它说明
    public String tothers;

    public String dataInfo;



    @DataProvider(name = "machine") 
    public static Object[][] machine() {
        DemandData demand = new DemandData();

        demand.dataInfo="机房-最少信息";
        demand.title = "机房-最少信息";
        demand.resType = new int[1];
        demand.resType[0]=0;

        demand.bizType= "IDC";
        demand.demandType = 0;
        demand.feedbackDate = "2013-07-01";
        demand.vender="自动化 供应商";

        demand.mserversName = "自动化 机房名称";
        demand.areaDemand ="自动化 区域";
        demand.serversNum = "100";
        demand.museTimeDesc ="反馈时间";


        DemandData demand1 = new DemandData();

        demand1.dataInfo="机房-扩容";
        demand1.title = "机房-扩容";
        demand1.resType = new int[1];
        demand1.resType[0]=0;

        demand1.bizType= "CDN";
        demand1.demandType = 1;
        demand1.feedbackDate = "2013-07-01";
        demand1.vender="自动化 供应商";

        demand1.mserversName = "自动化 机房名称";
        demand1.areaDemand ="自动化 区域";
        demand1.serversNum = "100";
        demand1.stability = "99.99";
        demand1.museTimeDesc ="反馈时间";
        demand1.mothers="自动化 机房 其他说明";

        DemandData demand2 = new DemandData();

        demand2.dataInfo="机房-续签";
        demand2.title = "机房-续签";
        demand2.resType = new int[1];
        demand2.resType[0]=0;

        demand2.bizType= "P2SP";
        demand2.demandType = 2;
        demand2.feedbackDate = "2013-07-01";
        demand2.vender="自动化 供应商";

        demand2.mserversName = "自动化 机房名称";
        demand2.areaDemand ="自动化 区域";
        demand2.serversNum = "100";
        demand2.stability = "99.99";
        demand2.museTimeDesc ="反馈时间";
        demand2.mothers="自动化 机房 其他说明";

        return new Object[][]{      
                {demand},
                {demand1},
                {demand2},
            };
        }

    @DataProvider(name = "network") 
    public static Object[][] network() {
        DemandData demand = new DemandData();

        demand.dataInfo="network-必填项";
        demand.title = "network-必填项";
        demand.resType = new int[1];
        demand.resType[0]=1;

        demand.bizType= "IDC";
        demand.demandType = 0;
        demand.feedbackDate = "2013-07-01";
        demand.vender="自动化 供应商";


        demand.netbandWidth ="1234";
        demand.nuseTimeDesc="自动化 带宽 使用时间";


        DemandData demand1 = new DemandData();

        demand1.dataInfo="network-所有信息";
        demand1.title = "network-所有信息";
        demand1.resType = new int[1];
        demand1.resType[0]=1;

        demand1.bizType= "IDC";
        demand1.demandType = 1;
        demand1.feedbackDate = "2013-07-01";
        demand1.vender="自动化 供应商";


        demand1.netbandWidth ="1234";
        demand1.bandWidthDesc="自动化  带宽说明";
        demand1.netWorkStability="99.99";
        demand1.netWorkInterface="自动化  网络接口";
        demand1.moduleType="自动化 模块类型";
        demand1.nothers="自动化 带宽 其他";
        demand1.nuseTimeDesc="自动化 带宽 使用时间";

        return new Object[][]{      
            {demand},
            {demand1},
        };
    }


    @DataProvider(name = "transInfo")   
    public static Object[][] transInfo() {
        DemandData demand = new DemandData();

        demand.dataInfo="transInfo-最少信息";
        demand.title = "自动化 标题";
        demand.resType = new int[1];
        demand.resType[0]=2;

        demand.bizType= "IDC";
        demand.demandType = 0;
        demand.feedbackDate = "2013-07-01";
        demand.vender="自动化 供应商";


        demand.transmissionType = "光纤";
        demand.demandNum="1234";
        //demand.circuitryUnit;
        demand.a_ip_address="自动化  A端地址";
        demand.b_ip_address="自动化  B端地址";

        demand.necessaryCondition="自动化  必要条件";

        demand.tuseTimeDesc="自动化 传输 使用时间";


        DemandData demand1 = new DemandData();

        demand1.dataInfo="transInfo-最少信息";
        demand1.title = "自动化 标题";
        demand1.resType = new int[1];
        demand1.resType[0]=2;

        demand1.bizType= "CDN";
        demand1.demandType = 1;
        demand1.feedbackDate = "2013-07-01";
        demand1.vender="自动化 供应商";


        demand1.transmissionType = "电路";
        demand1.demandNum="1234";
        demand1.circuitryUnit="G";
        demand1.a_ip_address="自动化  A端地址";
        demand1.b_ip_address="自动化  B端地址";

        demand1.necessaryCondition="自动化  必要条件";
        demand1.notNecessaryCondition="自动化  非必要条件";
        demand1.tuseTimeDesc="自动化 传输 使用时间";
        demand1.tothers="自动化 传输  其他";

        return new Object[][]{      
            {demand},
            {demand1},
        };
    }


    @DataProvider(name = "demand")  
    public static Object[][] demand() {
        DemandData demand = new DemandData();

        demand.dataInfo="需求的所有信息";
        demand.title = "自动化 标题";
        demand.resType = new int[3];
        demand.resType[0]=0;
        demand.resType[1]=1;
        demand.resType[2]=2;

        demand.bizType= "P2SP";
        demand.demandType = 2;
        demand.feedbackDate = "2013-07-01";
        demand.vender="自动化 供应商";

        demand.mserversName = "自动化 机房名称";
        demand.areaDemand ="自动化 区域";
        demand.serversNum = "100";
        demand.stability = "99.99";
        demand.museTimeDesc ="反馈时间";
        demand.mothers="自动化 机房 其他说明";

        demand.netbandWidth ="1234";
        demand.bandWidthDesc="自动化  带宽说明";
        demand.netWorkStability="99.99";
        demand.netWorkInterface="自动化  网络接口";
        demand.moduleType="自动化 模块类型";
        demand.nothers="自动化 带宽 其他";
        demand.nuseTimeDesc="自动化 带宽 使用时间";


        demand.transmissionType = "电路";
        demand.demandNum="1234";
        demand.circuitryUnit="G";
        demand.a_ip_address="自动化  A端地址";
        demand.b_ip_address="自动化  B端地址";

        demand.necessaryCondition="自动化  必要条件";
        demand.notNecessaryCondition="自动化  非必要条件";
        demand.tuseTimeDesc="自动化 传输 使用时间";
        demand.tothers="自动化 传输  其他";

        return new Object[][]{      
            {demand},
        };
    }
}

你可能感兴趣的:(java,selenium,测试框架,测试数据准备)