TestNG:@Factory

TestNg的@Factory注解从字面意思上来讲就是采用工厂的方法来创建测试数据并配合完成测试

其主要应对的场景是:对于某一个测试用例或方法,我们需要输入多个测试数据进行测试,并且这些测试数据可以是有一定关系(可以通过代码控制),

ps. 其实就是用一个类封装这些测试数据。在默认情况下,testNG调用测试类的无参数构造方法,将测试类实例化,然后执行在每个测试类中的测试方法,如果测试类没有无参数的构造方法,就会报错。使用@Factory可以实现调用有参数的构造函数来创建实例对象。

此时,我们就可以把自动化或者手动测试时的遇到的只因测试数据不同的多个测试用例合并成一个测试用例,来进行更方便和快捷的测试,

对编写自动化测试代码人员节省了很多时间

策略:一般我们会在标有@Factory注解的方法中对测试类进行调用,这时TestNg会自动调用测试类中带有@Test注解的方法

//@Factory返回的是一个一维数组,用于接收@DataProvider返回的二维数组,主要是为了组织如何传递数据

public class HomePageTest {
    private String userId;
    private String userName;

    public HomePageTest(String userId, String userName) {
        this.userId = userId;
        this.userName = userName;
    }

    @Test
    public void testHomeLogin(){
        System.out.println(userId+" = "+userName+" are loggin home page");
    }
}


public class LoginPageTest {
    private String userId;
    private String userName;

    public LoginPageTest(String userId, String userName) {
        this.userId = userId;
        this.userName = userName;
    }

    @Test
    public void testLogin(){
        System.out.println(userId+" = "+userName + " are loggin sub page");
    }
    
}


import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;

public class FactoryAndDataProvider {

    @DataProvider(name="dataProvider")
    public Object[][] dataProvider(){
        Object[][] objects=new Object[2][2];
        objects[0][0]="user1";
        objects[0][1]="zhangsan";
        objects[1][0]="user2";
        objects[1][1]="lisi";
        return objects;
    }

    @Factory(dataProvider = "dataProvider")
    public Object[] createTest(String userId,String userName){
        Object[] test=new Object[2];
        test[0]=new HomePageTest(userId,userName);
        test[1]=new LoginPageTest(userId,userName);
        return test;
    }
}
testNG.xml
<suite name="Demo_Test_Suite" parallel="false">
    <test name="Demo_Test">
        <classes>
            <class name="com.testng.FactoryAndDataProvider" />
        </classes>
    </test>
</suite>

//输出
user1 = zhangsan are loggin home page
user2 = lisi are loggin home page
user1 = zhangsan are loggin sub page
user2 = lisi are loggin sub page

例子2

public class TestNGFactoryTest {
    private Integer number;

    private static int num;

    public TestNGFactoryTest(int number) {
        this.number = number;
    }

    @Test
    public void testCount(){
        num++;
        System.out.println("num "+num +" is "+this.number);
    }
}



import org.testng.annotations.Factory;

public class TestNgFactory {

    @Factory
    public Object[] factoryMethod(){
        Object[] result=new Object[10];
        for (Integer i = 0; i <10 ; i++) {
            result[i]=new TestNGFactoryTest(i*10);

        }
        return result;
    }
}

输出
num 1 is 20
num 2 is 30
num 3 is 50
num 4 is 80
num 5 is 40
num 6 is 0
num 7 is 90
num 8 is 10
num 9 is 70
num 10 is 60

最后有个问题,从上面两个的结果可以看到,最后结果并不是有序的,解决方法,后续。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值