Java自动化测试框架-07 - TestNG之Factory篇 - 愉快畅游梦境工场(细致教程)
2019-11-18杂谈搜奇网62°c
A+ A-简介
近来忙着装修博客园,没时候更新文章,本日终究抽出时候把上次写的一半的文章给写完了,新的博客园作风,愿望人人喜好。本日继承引见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> <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> <!-- Suite -->
从上边我们能够清楚地看出来:参数一旦多起来,就难以管理了,所以应当运用工场来做
工场
Factory注解
假如运用@Factory注解,就比较简朴,而且轻易扩大,示比方下。
不需修改原有类,增加一个新类PersonFactory
新类PersonFactory
参考代码
package hongge; import java.util.ArrayList; import org.testng.annotations.Factory; /** * @author 北京-宏哥 * * Java自动化测试框架-07 - TestNG之Factory篇 * * 2019年11月6日 */ public class PersonFactory { @Factory public Object[] factory() { ArrayList<Person> testList = new ArrayList<>(); Person tp = new Person("明显",10); testList.add(tp); Person tp2 = new Person("宏哥",20); testList.add(tp2); Person tp3 = new Person("刘创",50); testList.add(tp3); Person tp4 = new Person("朱爷爷",70); testList.add(tp4); return testList.toArray(); } }
运转时,能够在Eclipse中,在这个factory类(PersonFactory)上点击右键,Run As-> TestNg test实行,
也能够设置在testng.xml中,只须要设置factory类即可,原类不必管。
testng.xml
参考代码
<?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 -->
运转效果
你的testng.xml 只须要援用包括工场要领的类,而测试实例本身会在运转时建立:
<class name="WebTestFactory"/>
工场要领能够接收诸如 @Test 和 @Before/After 所标记的参数,而且会返回 Object[]。这些返回的对象可所以任何类(不肯定是跟工场要领雷同的类),而且他们甚至都不须要TestNG注解(在例子中会被TestNG疏忽掉)
运用@Factory的运转道理
1、假如不运用@Factory,运转一般的被@Test标注的要领时,实际上是TestNG框架挪用了该类的组织函数组织出一个对象,然后再实行对象的这个要领。
2、运用了@Factory后,能够看到被@Factory标注的要领返回了一个Object数组,数组中每个元素是一个被测试类的对象。也就是说@Factory组织了多个被测试类对象,然后把每个对象都传递给了TestNG框架,然后TestNG框架在离别实行这些对象中被@Test标注的要领。
经由过程上面的形貌,我们就知道了@Factory能够协助我们完成简朴的数据驱动测试(依据测试数据,实行对应的顺序)。
小结
好了,本日关于工场的学问就分享这么多。