国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java 與testng利用XML做數據源的數據驅動示例詳解

2019-11-26 13:17:02
字體:
來源:轉載
供稿:網友

java 與testng利用XML做數據源的數據驅動示例詳解

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:1method1 received:3method2 received:3method3 received:3method4 received:4PASSED: 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.....

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 义乌市| 瑞金市| 宜章县| 牟定县| 大悟县| 襄垣县| 靖西县| 长岭县| 富蕴县| 西乡县| 宣城市| 襄樊市| 洱源县| 资兴市| 如东县| 阜新市| 江山市| 平乡县| 托里县| 淮北市| 南乐县| 宜都市| 新河县| 武鸣县| 香河县| 十堰市| 陆丰市| 天气| 扶余县| 岳西县| 呼玛县| 大田县| 台前县| 凉城县| 红原县| 泰兴市| 渭源县| 宜兴市| 星子县| 色达县| 习水县|