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..... 읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.