简介

  最近忙着装修博客园,没时间更新文章,今天终于抽出时间把上次写的一半的文章给写完了,新的博客园风格,希望大家喜欢。今天继续介绍testng的相关知识--工厂。

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

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

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

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

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

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

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

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

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

实例

为什么要使用@Factory注解呢,先来看下面这个例子

被测试类Person:

 参考代码:

package hongge; /**  * @author 北京-宏哥  *   * Java自动化测试框架-07 - TestNG之Factory篇  *  * 2019年11月6日  */import org.testng.annotations.Parameters; import org.testng.annotations.Test;  public class Person {     String name;     int age;          @Parameters({"name","age"})     public Person(String name, int age) {         super();         this.name = name;         this.age = age;     }      @Test()     public void say() {         System.out.print("我是"+name+" ");         if(age<18){             System.out.println("我未成年");         }else if(age>=18&&age<=45){             System.out.println("我是青年人");         }else if(age>45&&age<=60){             System.out.println("我是中年人");         }else if(age>60){             System.out.println("我是老年人");         }     } }

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

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>            <cl