1. 程式人生 > >java結合testng,利用yaml做資料來源的資料驅動例項

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