【问题标题】:Randomly changing the JSON Values for every "Post" Request Body using Java使用 Java 随机更改每个“发布”请求正文的 JSON 值
【发布时间】:2021-01-25 13:24:01
【问题描述】:

这可能是一个重复的问题,但我无法在任何地方找到我的解决方案。因此,发布它。

我正在尝试简单地发布学生帐户创建方案的请求。我确实有一个 JSON 文件,其中包含创建学生帐户所需的所有“键:值”。

这就是文件 student_Profile.json 的样子:

{
   "FirstName":"APi1-Stud-FN",
   "MiddleInitial":"Q",
   "LastName":"APi1-Stud-LN",
   "UserAlternateEmail":"",
   "SecretQuestionId":12,
   "SecretQuestionAnswer":"Scot",
   "UserName":"APi1-stud@xyz.com",
   "VerifyUserName":"APi1-stud@xyz.com",
   "Password":"A123456",
   "VerifyPassword":"A123456",
   "YKey":"123xyz",
   "YId":6,
   "Status":false,
   "KeyCode":"",
   "SsoUserName":"APi1-stud@xyz.com",
   "SsoPassword":"",
   "BirthYear":2001
}

所以从“放心”的角度发布请求的所有内容看起来都很好,只是我想使用 JAVA 从上面的 JSON 正文中更新一些值,以便我可以创建一个每次我运行我的函数时都会创建新的学生个人资料,而不必手动更改正文。

对于每个 POST 学生帐户创建方案,我需要更新 以下键,以便可以创建新的测试学生用户帐户:

  1. 名字
  2. 姓氏和
  3. 用户名 //“VerifyUserName”和“SSO UserName”将保持与用户名相同

【问题讨论】:

    标签: java json rest-assured data-generation


    【解决方案1】:

    我们可以使用基于 pojo 的方法很容易地做某些事情。无论有效载荷多么复杂,序列化和柴油化都是最好的答案。我已经为 api 自动化创建了一个框架模板,我们可以通过将所需的 POJO 放在路径中来使用它:

    https://github.com/tanuj-vishnoi/pojo_api_automation

    为了创造pojo,我也为你准备好了食物:

    https://github.com/tanuj-vishnoi/pojo_generator_using_jsonschema2pojo

    对于上述问题你可以参考JsonPath库https://github.com/json-path/JsonPath并使用这段代码:

    String mypayload = "{\n" + 
                    "   \"FirstName\":\"APi1-Stud-FN\",\n" + 
                    "   \"MiddleInitial\":\"Q\",\n" + 
                    "   \"LastName\":\"APi1-Stud-LN\"}";
        Map map = JsonPath.parse(mypayload).read("$",Map.class);
        System.out.println(list);
    

    一旦将有效负载转换为地图,您就可以根据要求仅更改所需的值

    生成随机字符串可以参考lib org.apache.commons.lang3.RandomStringUtils;

    public static String generateUniqueString(int lenghtOfString){
             return 
     RandomStringUtils.randomAlphabetic(lenghtOfString).toLowerCase();
     }
    

    我建议将有效负载存储在单独的文件中并在运行时加载。

    【讨论】:

      【解决方案2】:

      我修改了答案以获取随机值并将它们传递给 json 正文。随机值生成取自this question 接受的答案。

      public void testMethod() {
      
          List<String> randomValueList = new ArrayList<>();
      
          for (int i = 0; i < 3; i++) {
              String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
              StringBuilder salt = new StringBuilder();
              Random rnd = new Random();
              while (salt.length() < 18) { // length of the random string.
                  int index = (int) (rnd.nextFloat() * SALTCHARS.length());
                  salt.append(SALTCHARS.charAt(index));
              }
              randomValueList.add(salt.toString());
          }
      
          String jsonBody = "{\n" +
                  "   \"FirstName\":\"" + randomValueList.remove(0) + "\",\n" +
                  "   \"MiddleInitial\":\"Q\",\n" +
                  "   \"LastName\":\"" + randomValueList.remove(0) + "\",\n" +
                  "   \"UserAlternateEmail\":\"\",\n" +
                  "   \"SecretQuestionId\":12,\n" +
                  "   \"SecretQuestionAnswer\":\"Scot\",\n" +
                  "   \"UserName\":\"" + randomValueList.remove(0) + " \",\n" +
                  "   \"VerifyUserName\":\"APi1-stud@xyz.com\",\n" +
                  "   \"Password\":\"A123456\",\n" +
                  "   \"VerifyPassword\":\"A123456\",\n" +
                  "   \"YKey\":\"123xyz\",\n" +
                  "   \"YId\":6,\n" +
                  "   \"Status\":false,\n" +
                  "   \"KeyCode\":\"\",\n" +
                  "   \"SsoUserName\":\"APi1-stud@xyz.com\",\n" +
                  "   \"SsoPassword\":\"\",\n" +
                  "   \"BirthYear\":2001\n" +
                  "}";
      
          Response response = RestAssured
                  .given()
                  .body(jsonBody)
                  .when()
                  .post("api_url")
                  .then()
                  .extract()
                  .response();
      
          // Do what you need to do with the response body
      }
      

      【讨论】:

      • 谢谢,@kaweesha!这可以正常工作,但我正在寻找上述密钥的随机数据生成器,这样我什至不必添加任何参数。因为我要做的是一次只注册一个学生,然后在该用户的帐户上运行其他服务测试。我正在考虑创建一个函数,我将作为学生创建配置文件的先决条件执行该函数。我希望我说得通。
      • 您需要为FirstNameLastNameUserName 创建随机值吗?
      • 是的,每当我想创建一个新的学生帐户时,我都需要为它们创建随机值。
      • 我修改了答案以使用随机字符串值。
      • 谢谢卡维莎!
      猜你喜欢
      • 2017-02-12
      • 2018-12-29
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2013-01-31
      • 2018-04-24
      • 2020-08-14
      • 2023-04-10
      相关资源
      最近更新 更多