美文网首页
TestNG之Factory篇

TestNG之Factory篇

作者: 丛鹏 | 来源:发表于2020-08-24 09:58 被阅读0次

简介

@Factory注解从字面意思上来讲就是采用工厂的方法来创建测试数据并配合完成测试,其主要应对的场景是:对于某一个测试用例或方法,我们需要输入多个测试数据进行测试,并且这些测试数据可以是有一定关系(可以通过代码控制),此时,我们就可以把自动化或者手动测试时的遇到的只因测试数据不同的多个测试用例合并成一个测试用例,来进行更方便和快捷的测试。

对编写自己主动化测试代码人员节省了非常多时间

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

配置文件:只需要配置带有@Factory注解的类即可

@Factory必须放在一个返回对象数组的顶部,所有的这些对象都包含测试类的实例,testng会确保@Factory只被调用一次。

@Factory方法是首先被调用的,在@Test方法和配置方法之前,只有当所有的@Factory方法被调用之后,testng才开始执行配置和测试方法。

@Factory允许在运行时动态测试。

 上边说了这么多是不是把大家说的云里雾里,晕头转向的,接下来通过具体的例子给小伙伴和同学们分享一下。

实例:

被测试类Person:

publicclass Person {

    String name;

    int age;

    @Parameters({"name","age"})

    publicPerson(String name,int age) {

        super();

        this.name = name;

        this.age = age;

    }

    @Test()

    publicvoid say() {

        System.out.print("我是"+name+" ");

        if(age<18){

            System.out.println("我未成年");

        }elseif(age>=18&&age<=45){

            System.out.println("我是青年人");

        }elseif(age>45&&age<=60){

            System.out.println("我是中年人");

        }elseif(age>60){

            System.out.println("我是老年人");

        }

    }

}

该类的say()方法中有四个判断分支,为了测试充分,必须执行四次这个方法,如果不使用@Factory注解,在TestNG配置文件中必须这样配置:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="Suite">

  <test name="Test1">

        <parameter name="name" value="小明" />

        <parameter name="age" value="10" />

        <classes>

            <class name="hongge.Person" />

        </classes>

    </test>

    <test name="Test2">

        <parameter name="name" value="宏哥" />

        <parameter name="age" value="20" />

        <classes>

            <class name="hongge.Person" />

        </classes>

    </test>

    <test name="Test3">

        <parameter name="name" value="刘创" />

        <parameter name="age" value="50" />

        <classes>

            <class name="hongge.Person" />

        </classes>

    </test>

    <test name="Test4">

        <parameter name="name" value="爷爷" />

        <parameter name="age" value="70" />

        <classes>

            <class name="hongge.Person" />

        </classes>

    </test><!-- Test -->

</suite>

从上边我们可以清楚地看出来:参数一旦多起来,就难以管理了,所以应该使用工厂来做

工厂

Factory注解

如果使用@Factory注解,就比较简单,而且方便扩展,示例如下。

不需改动原有类,添加一个新类PersonFactory

publicclass PersonFactory {

    @Factory

    public Object[] factory() {

        ArrayList testList =newArrayList<>();

        Person tp =newPerson("明明",10);

        testList.add(tp);

        Person tp2 =newPerson("宏哥",20);

        testList.add(tp2);

        Person tp3 =newPerson("刘创",50);

        testList.add(tp3);

        Person tp4 =newPerson("朱爷爷",70);

        testList.add(tp4);

        return testList.toArray();

    }

}

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="Suite">

  <test name="Test1">

        <classes>

            <class name="hongge.PersonFactory" />

        </classes>

    </test><!-- Test -->

</suite> <!-- Suite -->

使用@Factory的运行原理

1、如果不使用@Factory,运行普通的被@Test标注的方法时,实际上是TestNG框架调用了该类的构造函数构造出一个对象,然后再执行对象的这个方法。

2、使用了@Factory后,可以看到被@Factory标注的方法返回了一个Object数组,数组中每一个元素是一个被测试类的对象。也就是说@Factory构造了多个被测试类对象,然后把每一个对象都传递给了TestNG框架,然后TestNG框架在分别执行这些对象中被@Test标注的方法。

相关文章

  • TestNG之Factory篇

    简介 @Factory注解从字面意思上来讲就是采用工厂的方法来创建测试数据并配合完成测试,其主要应对的场景是:对于...

  • 2022-01-04

    今天主要是学习为主: 了解了testng的基础使用,常见的注解@test、@Factory等 了解了testng的...

  • TestNG的 @Factory

    工厂允许你动态的创建测试。 例如,假设你需要创建一个测试方法,并用它来多次访问一个web页面,而且每次都带有不同的...

  • (十二)TestNG学习之路—注解转换器

    前言 TestNG允许您在测试执行时修改所有注解(@Test,@DataProvider,@Factory等)的内...

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

    前言 使用@Factory可动态地创建测试,一般用来创建一个测试类的多个实例,每个实例中的所有测试用例都会被执行,...

  • TestNG系列-TestNG入门

    分享一些存货,主要是TestNG的一些用法,分三篇,这是第一篇。猛戳:第二篇-TestNG进阶 一、TestNG是...

  • TestNG框架源码走读二:测试套执行

    TestNG框架源码走读一:入口 上一篇主要走读TestNG类的main函数入口,其中TestNG#runSuit...

  • (二)TestNg的工厂模式@Factory

    目标:通过读取多个excel用例,自动创建Test 方法:根据官网提供的注解@Factory的用法,来创建多个测试...

  • TestNG之Test Group篇

    一、Test Group(测试组) TestNG 允许你将复杂的测试方法归类为不同的组。不仅仅是可以声明某个方法属...

  • testng中provider+factory数据驱动

    1.新建一个factory 2.创建usertest的class 3.执行结果,这样可保证多用户执行用例时数据不错乱

网友评论

      本文标题:TestNG之Factory篇

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