java와testng이 XML을 이용하여 데이터 원본으로 하는 데이터 드라이브 예시 상세 설명

java와testng이 XML을 이용하여 데이터 원본으로 하는 데이터 드라이브 예시 상세 설명
testng의 기능은 매우 강력하다. @DataProvider를 이용하여 데이터 구동을 할 수 있고 데이터 원본 파일은 EXCEL, XML, YAML, 심지어 TXT 텍스트가 될 수 있다.여기서 XML을 예로 들면 다음과 같습니다.
참고: @DataProvider의 반환 값 유형은 Object[][] 및 Iterator[] 뿐입니다.
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.....
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기