将 json 文件传递给 testNG 数据提供程序
pass json file to testNG Data Provider
如何将包含 json 数组的 Json 文件传递给 TestNG 数据提供程序,并在我的测试中使用它来参数化我的测试用例。
这是一个 Json 文件,我想将其作为数据提供者传递给 TestNG 测试用例:
{"TestList":[{
"display_name":"test1",
"type":"testlist",
"author":null,
"body":
{
"description":"test1 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
},
{
"display_name":"test2",
"type":"testlist",
"author":null,
"body":
{
"description":"test2 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
},
{
"display_name":"test3",
"type":"testlist",
"author":null,
"body":
{
"description":"test3 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
}
]}
这是我尝试在其中使用 Json 文件的测试和数据提供程序:
@Test(dataProvider = "body")
public void AddTestGroup() throws InterruptedException{
System.out.println("Parsed json ===" + TestData);
}
@DataProvider(name = "body")
public Object[][] body() throws IOException{
JSONParser parser = new JSONParser();
JSONObject jsonObject = null;
JSONArray json_array = null;
try {
Object obj = parser.parse(new FileReader("./TestDataFile.json"));
jsonObject = (JSONObject) obj;
json_array = (JSONArray) jsonObject.get("TestList");
}catch (IOException e) {
e.printStackTrace();
}
return json_array;
}
我该怎么做才能让json_array拥有
json_Array[0] = {
"display_name":"test1",
"type":"testlist",
"author":null,
"body":
{
"description":"test1 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
}
和
jason_array[1] = {
"display_name":"test2",
"type":"testlist",
"author":null,
"body":
{
"description":"test2 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
},
等等,可以用在我的测试用例中。
您可以尝试使用以下代码。当我使用你的 json.
时它起作用了
public class NewTest {
@DataProvider(name = "JsonParser")
public static Object[] credentials() {
Object[] data = null;
// I saved the Json in a file.
String filename = "YourFilePath";
try {
JsonObject jObject = new JsonParser().parse(new FileReader(new File(filename))).getAsJsonObject();
JsonArray jArray = jObject.getAsJsonArray("TestList");
data = new Object[jArray.size()];
for (int i = 0; i < jArray.size(); i++) {
System.out.println(jArray.get(i));
data[i] = jArray.get(i);
}
} catch (Exception e) {
}
return data;
}
// Here we are calling the Data Provider object with its Name
@Test(dataProvider = "JsonParser")
public void test(Object arrays) {
System.out.println("From test class" + arrays);
}
您可以使用 JsonPath
使您的代码更加简单。
@DataProvider(name = "body")
public Object[] body() throws IOException{
JsonPath path = JsonPath.from(new File("./TestDataFile.json"));
List<HashMap<String, Object>> maps = path.getList("TestList");
Object[] hashMaps = maps.toArray();
return hashMaps;
}
以上代码会将您的 JSON 数组解析为 HashMap
的列表。每个Map都是你要用的数据集
然后,在您的测试中,您需要声明用 @Test
注释的方法接受 HashMap<String, Object>
作为参数,如下所示:
@Test(dataProvider = "body")
public void test(HashMap<String, Object> map)
{
System.out.println(map.get("display_name"));
}
为了从地图中获取数据,您需要使用上例中的 get()
方法。
但是,对于元素 body
,您需要做更多的工作。 body
元素将被视为 HashMap<String, String>
,因此要像 type
一样从 body
获取元素,您必须执行以下操作:
@Test(dataProvider = "body")
public void test(HashMap<String, Object> map)
{
HashMap<String, String> body = map.get("body");
String bodyType = body.get("type");
}
希望对您有所帮助!
如何将包含 json 数组的 Json 文件传递给 TestNG 数据提供程序,并在我的测试中使用它来参数化我的测试用例。 这是一个 Json 文件,我想将其作为数据提供者传递给 TestNG 测试用例:
{"TestList":[{
"display_name":"test1",
"type":"testlist",
"author":null,
"body":
{
"description":"test1 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
},
{
"display_name":"test2",
"type":"testlist",
"author":null,
"body":
{
"description":"test2 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
},
{
"display_name":"test3",
"type":"testlist",
"author":null,
"body":
{
"description":"test3 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
}
]}
这是我尝试在其中使用 Json 文件的测试和数据提供程序:
@Test(dataProvider = "body")
public void AddTestGroup() throws InterruptedException{
System.out.println("Parsed json ===" + TestData);
}
@DataProvider(name = "body")
public Object[][] body() throws IOException{
JSONParser parser = new JSONParser();
JSONObject jsonObject = null;
JSONArray json_array = null;
try {
Object obj = parser.parse(new FileReader("./TestDataFile.json"));
jsonObject = (JSONObject) obj;
json_array = (JSONArray) jsonObject.get("TestList");
}catch (IOException e) {
e.printStackTrace();
}
return json_array;
}
我该怎么做才能让json_array拥有
json_Array[0] = {
"display_name":"test1",
"type":"testlist",
"author":null,
"body":
{
"description":"test1 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
}
和
jason_array[1] = {
"display_name":"test2",
"type":"testlist",
"author":null,
"body":
{
"description":"test2 tl",
"type":"GENERIC"
},
"perm_read":"all",
"perm_write":"all",
},
等等,可以用在我的测试用例中。
您可以尝试使用以下代码。当我使用你的 json.
时它起作用了 public class NewTest {
@DataProvider(name = "JsonParser")
public static Object[] credentials() {
Object[] data = null;
// I saved the Json in a file.
String filename = "YourFilePath";
try {
JsonObject jObject = new JsonParser().parse(new FileReader(new File(filename))).getAsJsonObject();
JsonArray jArray = jObject.getAsJsonArray("TestList");
data = new Object[jArray.size()];
for (int i = 0; i < jArray.size(); i++) {
System.out.println(jArray.get(i));
data[i] = jArray.get(i);
}
} catch (Exception e) {
}
return data;
}
// Here we are calling the Data Provider object with its Name
@Test(dataProvider = "JsonParser")
public void test(Object arrays) {
System.out.println("From test class" + arrays);
}
您可以使用 JsonPath
使您的代码更加简单。
@DataProvider(name = "body")
public Object[] body() throws IOException{
JsonPath path = JsonPath.from(new File("./TestDataFile.json"));
List<HashMap<String, Object>> maps = path.getList("TestList");
Object[] hashMaps = maps.toArray();
return hashMaps;
}
以上代码会将您的 JSON 数组解析为 HashMap
的列表。每个Map都是你要用的数据集
然后,在您的测试中,您需要声明用 @Test
注释的方法接受 HashMap<String, Object>
作为参数,如下所示:
@Test(dataProvider = "body")
public void test(HashMap<String, Object> map)
{
System.out.println(map.get("display_name"));
}
为了从地图中获取数据,您需要使用上例中的 get()
方法。
但是,对于元素 body
,您需要做更多的工作。 body
元素将被视为 HashMap<String, String>
,因此要像 type
一样从 body
获取元素,您必须执行以下操作:
@Test(dataProvider = "body")
public void test(HashMap<String, Object> map)
{
HashMap<String, String> body = map.get("body");
String bodyType = body.get("type");
}
希望对您有所帮助!