如何将测试数据作为从YAML文件读取的Object [] []进行管理?

时间:2018-08-14 06:55:17

标签: java selenium testng yaml dataprovider

这是我的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管理测试数据的更好方法,请告诉我。

1 个答案:

答案 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代码。