程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java 與testng應用XML做數據源的數據驅動示例詳解

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

編輯:關於JAVA

java 與testng應用XML做數據源的數據驅動示例詳解。本站提示廣大學習愛好者:(java 與testng應用XML做數據源的數據驅動示例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是java 與testng應用XML做數據源的數據驅動示例詳解正文


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: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.....

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved