如何将我的测试数据管理为从 YAML 文件读取的 Object[][]?
How do I manage my test data as an Object[][] reading from a YAML file?
这是我的 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 数据提供程序中使用这 2 组数据。
所以我将创建一个 DataProvider 方法,它将 return 这个 2D 对象。并且使用该数据提供者的测试方法将遍历它。首先它将获取 "Jackson" 数据。第二轮将取 "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" 行。
其实我不在乎"case 1"或"case 2"。我想写一个方法,它将 return 一个 Object[][] 包含以下内容:
{{"Jackson","23","Salt Lake City"},
{"Rachael","35","San Diego"}}
如何在我的方法中实现这一点?
我希望此方法遍历 YAML 文件的每一行,并将每一行放入一个位于 Object[][] 内的数组列表中。
如果你们有更好的方法来使用 YAML 管理测试数据,请告诉我。
如果您的数据不需要密钥(案例 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);
处理测试数据是自动化 QA 的常见问题。选择 YAML 文件已经是一个不错的决定。我们使用 Selenium Automation Bundle as it has already integrated a solution for test data. There is no description of the solution in Readme, but here it is an example of a test, and here it is an example of a file with test data 足以开始使用它。尽管 bundle 使用 Groovy,但您可以毫无疑问地在 groovy 类 中编写 Java 代码。
这是我的 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 数据提供程序中使用这 2 组数据。
所以我将创建一个 DataProvider 方法,它将 return 这个 2D 对象。并且使用该数据提供者的测试方法将遍历它。首先它将获取 "Jackson" 数据。第二轮将取 "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" 行。
其实我不在乎"case 1"或"case 2"。我想写一个方法,它将 return 一个 Object[][] 包含以下内容:
{{"Jackson","23","Salt Lake City"},
{"Rachael","35","San Diego"}}
如何在我的方法中实现这一点?
我希望此方法遍历 YAML 文件的每一行,并将每一行放入一个位于 Object[][] 内的数组列表中。
如果你们有更好的方法来使用 YAML 管理测试数据,请告诉我。
如果您的数据不需要密钥(案例 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);
处理测试数据是自动化 QA 的常见问题。选择 YAML 文件已经是一个不错的决定。我们使用 Selenium Automation Bundle as it has already integrated a solution for test data. There is no description of the solution in Readme, but here it is an example of a test, and here it is an example of a file with test data 足以开始使用它。尽管 bundle 使用 Groovy,但您可以毫无疑问地在 groovy 类 中编写 Java 代码。