您的位置:首页 > 编程语言 > Java开发

java结合testng,利用XML做数据源的数据驱动示例

2017-03-03 00:00 501 查看



学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:183993990 我们一起学Java!

testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本。在这以XML为例:
备注:@DataProvider的返回值类型只能是Object[][]与Iterator<Object>[]
TestData.xml:



<?xml version="1.0" encoding="UTF-8"?>
<data>
<testmethod1>
<input>1</input>
<button>2</button>
</testmethod1>
<testmethod1>
<input>3</input>
<button>4</button>
</testmethod1>
<testmethod2>
<input>3</input>
<button>4</button>
</testmethod2>
<testmethod3>
<input>3</input>
<button>4</button>
</testmethod3>
<testmethod4>
<input>3</input>
<button>4</button>
</testmethod4>
</data>




处用DOM4J解析XML,ParserXml.java文件:



package com.test; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class ParserXml { public List parser3Xml(String fileName) { File inputXml = new File(fileName); List list=new ArrayList(); int count = 1; SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(inputXml); Element employees = document.getRootElement(); for (Iterator i = employees.elementIterator(); i.hasNext();) { Element employee = (Element) i.next(); Map map = new HashMap(); Map tempMap = new HashMap(); for (Iterator j = employee.elementIterator(); j.hasNext();) { Element node = (Element) j.next(); tempMap.put(node.getName(), node.getText()); } map.put(employee.getName(), tempMap); list.add(map); } } catch (DocumentException e) { System.out.println(e.getMessage()); } return list; } }




然后把解析出来的list转换成Object[][]类型的数据,且结合在@DataProvider中。
TestData.java文件:



package com.test; import java.io.File; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.testng.annotations.DataProvider; public class TestData { private List l; public TestData() { this.getXmlData(); } public void getXmlData(){ ParserXml p = new ParserXml(); l = p.parser3Xml(new File("src/com/test/TestData.xml").getAbsolutePath()); } @DataProvider public Object[][] providerMethod(Method method){ List<Map<String, String>> result = new ArrayList<Map<String, String>>(); for (int i = 0; i < l.size(); i++) { Map m = (Map) l.get(i); if(m.containsKey(method.getName())){ Map<String, String> dm = (Map<String, String>) m.get(method.getName()); result.add(dm); } } Object[][] files = new Object[result.size()][]; for(int i=0; i<result.size(); i++){ files[i] = new Object[]{result.get(i)}; } return files; } }




再通过测试文件来测试一下:
TestDataProvider.java文件:



package com.test; import java.util.Map; import org.testng.annotations.*; public class TestDataProvider extends TestData { @Test(dataProvider="providerMethod") public void testmethod1(Map<?, ?> param){ System.out.println("method1 received:"+param.get("input")); } @Test(dataProvider="providerMethod") public void testmethod2(Map<?, ?> param){ System.out.println("method2 received:"+param.get("input")); } @Test(dataProvider="providerMethod") public void testmethod3(Map<?, ?> param){ System.out.println("method3 received:"+param.get("input")); } @Test public void testmethod4(){ System.out.println("method4 received:4"); } }




我们再回过头来分析一下XML文件,有两个testmethod1结点,testmethod2,testmethod3,testmethod4结点各一个,在TestDataProvider.java文件中,定义了testmethod1,testmethod2,testmethod3,testmethod4四个测试函数,且testmethod4没有用到dataProvider,所以运行结果最后应该是testmethod1运行两遍,testmethod2,testmethod3,testmethod4各运行一遍,结果如下:



method1 received:1 method1 received:3 method2 received:3 method3 received:3 method4 received:4 PASSED: testmethod1({input=1, button=2}) PASSED: testmethod1({input=3, button=4}) PASSED: testmethod2({input=3, button=4}) PASSED: testmethod3({input=3, button=4}) PASSED: testmethod4 ===============================================     Default test     Tests run: 5, Failures: 0, Skips: 0 =============================================== 也就是说通过这种方式,只需要把测试函数先写好,然后在XML文件中定义好数据就行了,就能控制函数是否运行,运行次数且运行的数据。 OK,Let's try.....




学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:183993990 我们一起学Java!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: