Java 如何替换Rest请求中的日期,使其成为自动化测试的今天的日期?
我对java编程相当陌生——我正在编写一个cucumber测试,它接受一个请求中包含多个日期的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" },
{
"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字段的逻辑——我正在努力实现新的日期值。