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; org.yaml.snakeyaml.Yaml; java.io.FileInputStream; java.net.URL; java.util.ArrayList; java.util.HashMap; java.util.List; 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,1)"> me : map.entrySet()) { Map<String,String> numNameMapValue = me.getValue(); Map<String,String> tmp = new HashMap<>(); nameMapEntry : numNameMapValue.entrySet()) { String numKey = nameMapEntry.getKey(); String nameValue = nameMapEntry.getValue(); tmp.put(numKey,nameValue); } list.add(tmp); } return list; } static Map<String,1)"> readYamlUtil() { Map<String,String>> map = null; try { Yaml yaml = Yaml(); URL url = YamlDataHelper.class.getClassLoader().getResource("application.yaml"); if (url != ) { //获取yaml文件中的配置数据,然后转换为Map map = yaml.load( FileInputStream(url.getFile())); map; } } catch (Exception e) { e.printStackTrace(); } map; } @DataProvider public Object[][] yamlDataMethod() { List<Map<String,String>> yamlList = getYamlList(); Object[][] files = Object[yamlList.size()][]; for (int i = 0; i < yamlList.size(); i++) { files[i] = Object[]{yamlList.get(i)}; } files; } }
再通过测试文件来测试一下:
TestYamlData.java文件:
org.testng.annotations.Test; class TestYamlData extends YamlDataHelper{ @Test(dataProvider = "yamlDataMethod") void testYamlData(Map<String,1)"> 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