这是我的YAML文件:
case 1: ["Jackson","23","Salt Lake City"]
case 2: ["Rachael","35","San Diego"]
#this will keep building and possibly have 1000 rows or so
我希望所有这些都像这样二维数组中:
{{"Jackson","23","Salt Lake City"},
{"Rachael","35","San Diego"}}
基本上我想在TestNG数据提供程序中使用这两组数据。
因此,我将创建一个DataProvider方法,该方法将返回此2D对象。使用此数据提供程序的测试方法将对其进行迭代。首先,它将获取“杰克逊”数据。第二轮将获取“ Rachael”数据。
我以前曾经用Jackson进行序列化:
public class TestCase {
@JsonProperty("Test")
private List<String> data;
public List<String> getData() {
return data;
}
public void setData(List<String> data) {
this.data = data;
}
}
但是要使它起作用,我的YAML应该像这样:
Test: ["Jackson","23","Salt Lake City"]
Test: ["Rachael","35","San Diego"]
但是,ObjectMapper仅读取最后一行。在这种情况下,为“ Rachael”行。
实际上,我并不关心“案例1”或“案例2”。我想编写一个将返回包含以下内容的Object [] []的方法:
{{"Jackson","23","Salt Lake City"},
{"Rachael","35","San Diego"}}
如何在我的方法中实现这一目标?
我希望此方法遍历YAML文件的每一行,并将每一行放入一个位于Object [] []内部的arraylist中。
如果你们有使用YAML管理测试数据的更好方法,请告诉我。
答案 0 :(得分:2)
如果您不需要数据密钥(案例1,案例2),则可以简化Yaml文件
只需更改为
- ["Jackson","23","Salt Lake City"]
- ["Rachael","35","San Diego"]
然后使用SnakeYAML库读取为ArrayList并转换为Object [] []
您可以在DataProvider方法中尝试下一个代码段
InputStream input = new FileInputStream(new File("path_to_your_file"));
ArrayList<ArrayList> list = (ArrayList<ArrayList>) new Yaml().load(input);
Object[][] data = list.stream()
.map(dataSet -> dataSet.toArray())
.toArray(Object[][]::new);
处理测试数据是自动化质量检查人员的常见问题。选择YAML文件已经是一个不错的决定。我们使用Selenium Automation Bundle是因为它已经集成了测试数据解决方案。自述文件中没有解决方案的描述,但是这里是test的示例,这里是带有测试data的文件的示例,足以开始使用它。尽管该捆绑包使用Groovy,但是您可以毫无疑问地在groovy类中编写Java代码。