将 json 字符串作为输入传递给 RESTAssured with Selenium 中的 POST 请求正文的参数之一

Passing json string as an input to one of the parameters of a POST request body in RESTAssured with Selenium

我正在使用 Selenium 中的 RESTAssured java 库来实现 API 测试自动化。我需要将 json 字符串作为值传递给 POST 请求正文的一个参数。我的请求正文如下所示:

{
  "parameter1": "abc",
  "parameter2": "def",
  "parameter3": {
    "id": "",
    "key1": "test123",
    "prod1": {
      "id": "",
      "key3": "test123",
      "key4": "12334",
      "key5": "3",
      "key6": "234334"
    },
    "prod2": {
      "id": "",
      "key7": "test234",
      "key8": "1",
      "key9": true
    }
  },
  "parameter4": false,
  "parameter5": "ghi"
}

对于参数 3,我需要传递 json 格式的字符串值。 json 文件位于我的本地系统中并且是一个巨大的文件,因此如果我可以将路径传递给 json 文件就有意义了。

有什么方法可以使用 RestAssured 来实现这个目标吗?

使用org.json库;

读取 json 文件并获取字符串

String content = "";
try {
    content = new String(Files.readAllBytes(Paths.get("absolute_path_to_file\example.json")));
} catch (IOException e) {
    e.printStackTrace();
}

将字符串转换为 JSONObject

JSONObject jsonObject = new JSONObject(content);

获取需要放入 jsonObject

中的新 json 对象
String jsonString = "{\n" +
        "  \"firstName\": \"John\",\n" +
        "  \"lastName\" : \"doe\",\n" +
        "  \"age\"      : 26,\n" +
        "  \"address\"  : {\n" +
        "    \"streetAddress\": \"naist street\",\n" +
        "    \"city\"         : \"Nara\",\n" +
        "    \"postalCode\"   : \"630-0192\"\n" +
        "  }\n" +
        "}";

JSONObject updateObject = new JSONObject(jsonString);

parameter3 的值替换为新的 updateObject

jsonObject.put("parameter3", updateObject);

System.out.println(jsonObject.toString());

如果美化打印输出;

{
  "parameter5": "ghi",
  "parameter4": false,
  "parameter3": {
    "firstName": "John",
    "lastName": "doe",
    "address": {
      "streetAddress": "naist street",
      "city": "Nara",
      "postalCode": "630-0192"
    },
    "age": 26
  },
  "parameter2": "def",
  "parameter1": "abc"
}

如果您想更新嵌套的 json 对象,例如 parameter3

中的 prod1
JSONObject parameter3JsonObject = jsonObject.getJSONObject("parameter3");
parameter3JsonObject.put("prod1", updateObject);