java結合testng,利用yaml做數據源的數據驅動實例


testng的功能很強大,利用@DataProvider可以做數據驅動,數據源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本。在這以yaml為例:

備注:@DataProvider的返回值類型只能是Object[][]與Iterator<Object>[]

application.yaml:

user:
  name: xiaoqiang
  passwd: "1236454"
user1:
  name: xiaohong
  passwd: "1238309"
user2:
  name: rongrong
  passwd: "908344s"
user3:
  name: lisi
  passwd: "123566s"

解析yaml文件,然后把解析出來的list轉換成Object[][]類型的數據,且結合在@DataProvider中。

YamlDataHelper.java文件

import org.testng.annotations.DataProvider;
import org.yaml.snakeyaml.Yaml;

import java.io.FileInputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class YamlDataHelper {

    private static List<Map<String, String>> getYamlList() {
        List<Map<String, String>> list = new ArrayList();
        Map<String, Map<String, String>> map = readYamlUtil();
        for (Map.Entry<String, Map<String, String>> me : map.entrySet()) {
            Map<String, String> numNameMapValue = me.getValue();
            Map<String, String> tmp = new HashMap<>();
            for (Map.Entry<String, String> nameMapEntry : numNameMapValue.entrySet()) {
                String numKey = nameMapEntry.getKey();
                String nameValue = nameMapEntry.getValue();
                tmp.put(numKey, nameValue);
            }
            list.add(tmp);
        }
        return list;
    }

    public static Map<String, Map<String, String>> readYamlUtil() {
        Map<String, Map<String, String>> map = null;
        try {
            Yaml yaml = new Yaml();
            URL url = YamlDataHelper.class.getClassLoader().getResource("application.yaml");
            if (url != null) {
                //獲取yaml文件中的配置數據,然后轉換為Map
                map = yaml.load(new FileInputStream(url.getFile()));
                return map;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;

    }

    @DataProvider
    public Object[][] yamlDataMethod() {
        List<Map<String, String>> yamlList = getYamlList();
        Object[][] files = new Object[yamlList.size()][];
        for (int i = 0; i < yamlList.size(); i++) {
            files[i] = new Object[]{yamlList.get(i)};
        }
        return files;
    }


}

再通過測試文件來測試一下:

TestYamlData.java文件:

import org.testng.annotations.Test;

import java.util.Map;

public class TestYamlData extends YamlDataHelper{

    @Test(dataProvider = "yamlDataMethod")
    public void testYamlData(Map<String,String> param){
        System.out.println(param.get("name")+"\t"+param.get("passwd"));
    }
}

運行結果如下:

[TestNG] Running:
  C:\Users\Administrator\.IntelliJIdea2018.2\system\temp-testng-customsuite.xml
xiaoqiang    1236454
xiaohong    1238309
rongrong    908344s
lisi    123566s

===============================================
Default Suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8

Process finished with exit code 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM