(六)TestNG学习之路—注解详述之@Factory

目录

(一)TestNG学习之路—HelloWorld入门
(二)TestNG学习之路—注解及属性概览
(三)TestNG学习之路—TestNG.xml/YAML
(四)TestNG学习之路—注解详述之@Test
(五)TestNG学习之路—注解详述之参数化
(六)TestNG学习之路—注解详述之@Factory
(七)TestNG学习之路—注解详述之忽略测试
(八)TestNG学习之路—注解详述之并发
(九)TestNG学习之路—失败测试重跑
(十)TestNG学习之路—编码执行TestNG
(十一)TestNG学习之路—BeanShell高级用法
(十二)TestNG学习之路—注解转换器
(十三)TestNG学习之路—方法拦截器
(十四)TestNG学习之路—TestNG监听器
(十五)TestNG学习之路—依赖注入
(十六)TestNG学习之路—测试报告
(十七)基于TestNG+Rest Assured+Allure的接口自动化测试框架

前言

使用@Factory可动态地创建测试,一般用来创建一个测试类的多个实例,每个实例中的所有测试用例都会被执行,@Factory构造实例的方法必须返回Object[]。

@Factory详解

创建测试类如下,其中test1依赖于test方法。

import org.testng.annotations.Test;

public class TomandyFactory {

    private  String str;
    public TomandyFactory(String str){
        this.str = str;
    }

    @Test
    public void test(){
        System.out.println("TomandyFactory: " +str);
    }

    @Test(dependsOnMethods = "test")
    public void test1(){
        System.out.println("TomandyFactory1: " +str);
    }
}

创建工厂测试类,该工程创建2个TomandyFactory实例。

import org.testng.annotations.Factory;

public class TestFactory {

    @Factory
    public Object[] test(){
        Object[] object = new Object[2];
        for(int i=0;i<2;i++) {
            TomandyFactory tomandyFactory = new TomandyFactory(i+"");
            object[i] = tomandyFactory;
        }
        return object;
    }
}

testng.xml配置工厂类名TestFactory即可:


        


    
        
        
    


执行结果:

TomandyFactory: 0
TomandyFactory: 1
TomandyFactory1: 0
TomandyFactory1: 1

===============================================
All Test Suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================

通过以上例子的执行结果可以发现,尽管test1方法依赖于test方法,但@Factory工厂测试类的执行测试类方法的顺序却是:test,test,test1,test1,如果需要执行类似登录、退出之类的功能,并不能满足咱们的需求,此类场景,官网也给出了解决方案,那就是在testng.xml添加:

  
or
  

还是上面的例子,修改testng.xml如下:


        



    

    
        
        
    


执行结果如下,测试类方法执行顺序为:test,test1,test,test1。

TomandyFactory: 0
TomandyFactory1: 0
TomandyFactory: 1
TomandyFactory1: 1

===============================================
All Test Suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================

@Factory与@DataProvider区别

通过上述@Factory的例子,可能会联想到TestNG的@DataProvider,但两者的区别也是比较明显的。

@DataProvider:为测试用例提供参数,有多少组参数就会执行多少次用例,因此它是让一个测试类实例的某个方法执行多次,每次执行都是同一个实例
@Factory:创建一个测试类的多个实例,每个实例中的所有测试用例都会被执行,每次执行采用的是不同实例

Factory也可以与DataProvider结合使用。
修改上述例子的工厂测试类如下:

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

public class TestFactory {

    @Factory(dataProvider = "n")
    public Object[] test(int n){
        Object[] object = new Object[n];
        for(int i=0;i

执行结果如下:

TomandyFactory: 0
TomandyFactory1: 0
TomandyFactory: 1
TomandyFactory1: 1
TomandyFactory: 2
TomandyFactory1: 2

===============================================
All Test Suite
Total tests run: 6, Failures: 0, Skips: 0
===============================================

你可能感兴趣的:((六)TestNG学习之路—注解详述之@Factory)