最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 與testng利用XML做數(shù)據(jù)源的數(shù)據(jù)驅(qū)動示例詳解

 更新時間:2017年01月11日 09:27:28   投稿:lqh  
這篇文章主要介紹了java 與testng利用XML做數(shù)據(jù)源的數(shù)據(jù)驅(qū)動示例詳解的相關(guān)資料,需要的朋友可以參考下

java 與testng利用XML做數(shù)據(jù)源的數(shù)據(jù)驅(qū)動示例詳解

testng的功能很強(qiáng)大,利用@DataProvider可以做數(shù)據(jù)驅(qū)動,數(shù)據(jù)源文件可以是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轉(zhuǎn)換成Object[][]類型的數(shù)據(jù),且結(jié)合在@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結(jié)點,testmethod2,testmethod3,testmethod4結(jié)點各一個,在TestDataProvider.java文件中,定義了testmethod1,testmethod2,testmethod3,testmethod4四個測試函數(shù),且testmethod4沒有用到dataProvider,所以運行結(jié)果最后應(yīng)該是testmethod1運行兩遍,testmethod2,testmethod3,testmethod4各運行一遍,結(jié)果如下:

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

也就是說通過這種方式,只需要把測試函數(shù)先寫好,然后在XML文件中定義好數(shù)據(jù)就行了,就能控制函數(shù)是否運行,運行次數(shù)且運行的數(shù)據(jù)。

OK,Let's try.....

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

相關(guān)文章

  • SpringMVC設(shè)置全局異常處理器的步驟

    SpringMVC設(shè)置全局異常處理器的步驟

    在項目中我們有需求做一個全局異常處理,來規(guī)范所有出去的異常信息,這篇文章主要介紹了SpringMVC設(shè)置全局異常處理器,需要的朋友可以參考下
    2024-03-03
  • Java super關(guān)鍵字的用法詳解

    Java super關(guān)鍵字的用法詳解

    在JAVA類中使用super來引用父類的成分,用this來引用當(dāng)前對象,如果一個類從另外一個類繼承,我們new這個子類的實例對象的時候,這個子類對象里面會有一個父類對象。怎么引用里面的父類對象呢?用super來引用,this指當(dāng)前對象的引用,super是當(dāng)前對象里面的父對象的引用
    2021-11-11
  • java常用工具類之DES和Base64加密解密類

    java常用工具類之DES和Base64加密解密類

    這篇文章主要介紹了java常用工具類之DES和Base64加密解密類,需要的朋友可以參考下
    2014-07-07
  • mybatis-plus?Wrapper條件構(gòu)造器updateForSet更新方式

    mybatis-plus?Wrapper條件構(gòu)造器updateForSet更新方式

    這篇文章主要介紹了mybatis-plus?Wrapper條件構(gòu)造器updateForSet更新方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringCloud解決feign調(diào)用token丟失問題解決辦法

    SpringCloud解決feign調(diào)用token丟失問題解決辦法

    在feign調(diào)用中可能會遇到如下問題:同步調(diào)用中,token丟失,這種可以通過創(chuàng)建一個攔截器,將token做透傳來解決,異步調(diào)用中,token丟失,這種就無法直接透傳了,因為子線程并沒有token,這種需要先將token從父線程傳遞到子線程,再進(jìn)行透傳
    2024-05-05
  • 實例講解Java讀取一般文本文件和word文檔的方法

    實例講解Java讀取一般文本文件和word文檔的方法

    讀取一般文本文件很好辦,調(diào)用Java自帶的io包里的類即可,富文本的doc文件我們可以用Apache的poi項目中的WordExtractor,這里我們一起來以實例講解Java讀取一般文本文件和word文檔的方法
    2016-06-06
  • 如何使用CountDownLatch同步j(luò)ava多線程

    如何使用CountDownLatch同步j(luò)ava多線程

    這篇文章主要介紹了如何使用CountDownLatch同步j(luò)ava多線程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 利用Java代碼寫一個并行調(diào)用模板

    利用Java代碼寫一個并行調(diào)用模板

    這篇文章主要介紹了利用Java代碼寫一個并行調(diào)用模板,文章基于Java的相關(guān)內(nèi)容展開寫一個并行調(diào)用模板的詳細(xì)介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Java實現(xiàn)微信網(wǎng)頁授權(quán)的示例代碼

    Java實現(xiàn)微信網(wǎng)頁授權(quán)的示例代碼

    這篇文章主要介紹了Java實現(xiàn)微信網(wǎng)頁授權(quán)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java中JSONObject與JSONArray的使用區(qū)別詳解

    Java中JSONObject與JSONArray的使用區(qū)別詳解

    這篇文章主要介紹了Java中JSONObject與JSONArray的使用區(qū)別詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11

最新評論

阿坝县| 新干县| 陆良县| 宁德市| 岳池县| 信丰县| 苏州市| 邢台县| 安塞县| 忻城县| 含山县| 晋中市| 阿拉尔市| 秀山| 达日县| 凭祥市| 兴隆县| 义马市| 疏附县| 建水县| 莱州市| 南涧| 乌拉特前旗| 临高县| 商都县| 桑植县| 上虞市| 通渭县| 洮南市| 内黄县| 庆安县| 临沧市| 定州市| 白山市| 长丰县| 施秉县| 迁西县| 大名县| 昌黎县| 海淀区| 永定县|