服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|

服务器之家 - 编程语言 - JAVA教程 - java 与testng利用XML做数据源的数据驱动示例详解

java 与testng利用XML做数据源的数据驱动示例详解

2020-07-25 14:27java教程网 JAVA教程

这篇文章主要介绍了java 与testng利用XML做数据源的数据驱动示例详解的相关资料,需要的朋友可以参考下

java 与testng利用XML做数据源的数据驱动示例详解

testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本。在这以XML为例:

备注:@DataProvider的返回值类型只能是Object[][]与Iterator<Object>[]

TestData.xml:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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各运行一遍,结果如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.....

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/qq_35101189/article/details/54318579

延伸 · 阅读

精彩推荐
  • JAVA教程利用Java计算某个日期是星期几

    利用Java计算某个日期是星期几

    不知道大家有没有遇到过同样的问题,谁谁的生日又要到了,看看是星期几?每年都要遇到好几次,所以想索性利用Java写个小工具,一次查询某具体日期在...

    瓜园耕读1232020-06-24
  • JAVA教程浅析java中static的用法

    浅析java中static的用法

    这篇文章主要介绍了java中static的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来...

    Keen贝贝2452019-06-19
  • JAVA教程java实现监听u盘示例分享

    java实现监听u盘示例分享

    这篇文章主要介绍了java实现监听u盘示例,需要的朋友可以参考下 ...

    java技术网1752019-11-14
  • JAVA教程最好的8个Java RESTful框架

    最好的8个Java RESTful框架

    最好的8个Java RESTful框架,需要的朋友可以参考下 ...

    李景枫4312020-04-24
  • JAVA教程一个合格JAVA软件工程师应该具备什么

    一个合格JAVA软件工程师应该具备什么

    一个合格JAVA软件工程师应该具备哪些专业技能,面试技巧是什么?本文为大家分享了2016版最新Java软件工程师就业思维图,感兴趣的小伙伴们可以参考一下...

    Java团长3572020-07-05
  • JAVA教程Java 线程池ExecutorService详解及实例代码

    Java 线程池ExecutorService详解及实例代码

    这篇文章主要介绍了Java 线程池ExecutorService详解及实例代码的相关资料,线程池减少在创建和销毁线程上所花的时间以及系统资源的开销.如果不使用线程池...

    杨龙飞的博客4542020-07-08
  • JAVA教程Java类加载基本过程详细介绍

    Java类加载基本过程详细介绍

    这篇文章主要介绍了Java类加载基本过程详细介绍的相关资料,需要的朋友可以参考下...

    java教程网4332020-07-14
  • JAVA教程Java读取Map的两种方法与对比

    Java读取Map的两种方法与对比

    相信大家都知道在Java中Map的使用非常频繁,我们经常会需要对Map进行遍历和读取,那么下面这篇文章将展示两种遍历的方法以及简要分析。有需要的可以参...

    bladestone4852020-07-05