Java 如何替换Rest请求中的日期,使其成为自动化测试的今天的日期?

Java 如何替换Rest请求中的日期,使其成为自动化测试的今天的日期?,java,rest,cucumber,cucumber-java,Java,Rest,Cucumber,Cucumber Java,我对java编程相当陌生——我正在编写一个cucumber测试,它接受一个请求中包含多个日期的Rest请求,然后验证特定字符串的响应。以下是一个请求示例: { "id": "1245", "paymentAmount" : 404, "paymentPending": [ { "paymentNumber": 1, "paymentAmount": 100, "paymentDate": "20191223" },

我对java编程相当陌生——我正在编写一个cucumber测试,它接受一个请求中包含多个日期的Rest请求,然后验证特定字符串的响应。以下是一个请求示例:

    {
  "id": "1245",
  "paymentAmount" :  404,
  "paymentPending": [
    {
      "paymentNumber": 1,
      "paymentAmount": 100,
      "paymentDate": "20191223"
    },
    {
      "paymentNumber": 2,
      "paymentAmount": 100,
      "paymentDate": "20200106"
    },
    {
      "paymentNumber": 3,
      "paymentAmount": 204,
      "paymentDate": "20200130"
    }

  ]
}
assertThat(getRequest.id()!=null);
    assertThat(getRequest.paymentAmount()!=null);
    for(paymentPendingp : getRequest.paymentPending()) {
        assertThat(p.getPaymentDate()!=null);
        assertThat(p.getPaymentAmount()!=null);
        assertThat(p.getPaymentNumber()!=null);
    }
我想修改rest请求而不操纵json文件。我需要将付款日期更改为今天日期(以上述日期格式),并将以下日期更改为今天日期加上15天和30天,但这需要在实际步骤定义实施期间完成。我该怎么做这样的事?下面是我收到请求后当前拥有的内容的一个片段(用于断言请求中的值):

我知道我需要设置字段日期,但我不确定最好的方法是什么,因为我需要修改的日期中有for循环,然后断言它不是null

以下是我在JSON请求中更新paymentDates的当前逻辑——它当前没有正确设置值

for(Payment p : getRequest.getPayment()) {
            switch(p.getPaymentNumber()){
                case 1 :
                    Date date = Calendar.getInstance().getTime();
                    DateFormat dateFormat = new SimpleDateFormat("YYYYMMdd");
                    String strDate = dateFormat.format(date);
                    p.paymentDate = strDate;
                    log.info("dates are: " + strDate);
                    break;
                case 2 :
                    Date currentDate2 = new Date();
                    Calendar c2 = Calendar.getInstance();
                    c2.setTime(currentDate2);
                    c2.add(Calendar.DATE, 15);
                    Date currentDatePlusTwenty = c2.getTime();
                    DateFormat dateFormat2 = new SimpleDateFormat("YYYYMMdd");
                    String strDate2 = dateFormat2.format(currentDatePlusTwenty);
                    p.paymentDate = strDate2;
                    log.info("dates are: " + strDate2);
                    break;
                case 3 :
                    Date currentDate = new Date();
                    Calendar c3 = Calendar.getInstance();
                    c3.setTime(currentDate);
                    c3.add(Calendar.DATE, 29);
                    Date currentDatePlusForty = c3.getTime();
                    DateFormat dateFormat3 = new SimpleDateFormat("YYYYMMdd");
                    String strDate3 = dateFormat3.format(currentDatePlusForty);
                    p.paymentDate = strDate3; 
                    log.info("dates are: " + strDate3);
                    break;
                case 4 :
                    Date currentDate4 = new Date();
                    Calendar c4 = Calendar.getInstance();
                    c4.setTime(currentDate4);
                    c4.add(Calendar.DATE, 40);
                    Date currentDatePlusSixty = c4.getTime();
                    DateFormat dateFormat4 = new SimpleDateFormat("YYYYMMdd");
                    String strDate4 = dateFormat4.format(currentDatePlusSixty);
                    p.paymentDate = strDate4; // also tried p.setPaymentDate(strDate4);
                    log.info("dates are: " + strDate4);
                    break;
                    default:
                        break;
            }
            assertThat(p.getPaymentDate()!=null);
            assertThat(p.getMaxAllowedDaysToSchedule()!=null);
            assertThat(p.getPaymentAmount()!=null);
            assertThat(p.getPaymentNumber()!=null);
        }


您是否从Gherik step in
.feature
文件发送有效负载(上面提到的json)?嘿,是的。一切都按预期运行(我在功能文件中传递json文件名)-我似乎无法从@given语句更新json请求。请求必须有今天的日期,然后是日期加15天,然后是今天的日期加30天。目前我正在手动更改日期以使测试通过,但我需要这样做,以便JSON请求无论JSON文件对日期有什么要求,都会自动将JSON付款日期更新为今天的日期,等等。这有意义吗?我还有另一个场景,要求我传递所有付款日期的今天日期,然后验证错误消息和代码(在我的示例中未显示)。对于您的第一条评论,您必须编写另一个步骤,如
,并使用最新日期更新xxxx.json
。并实现步骤def中的逻辑,用当前日期更新json文件,等等,保存。那你就可以去上传文件了。我建议您将json中更新的日期存储到全局变量中,以便您可以使用这些变量来验证响应。非常感谢!我将编辑我的帖子,向您展示我试图用来更新paymentDate字段的逻辑——我正在努力实现新的日期值。