将 SoapUI 属性 值设置为今天 + 1 年

Set SoapUI property value to today + 1 year

目标:分配一个 SoapUI 属性,其值为今天 + 1 年,格式为 yyyy-MM-dd (例如,今天是 2018-10-10,所以我希望 属性 有 2019-10-10).

我尝试过的:


尝试 #1(内联 属性):

不起作用,因为 JDK 8 似乎不是默认 Soap UI 包的一部分:

${=LocalDate.now().plusYears(1).format(DateTimeFormatter.ISO_DATE)}

尝试 #2(groovy 脚本):

Returns 一个错误,因为 Date.format 不接受 Stringjava.util.Date:

def today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);
today.add(Calendar.YEAR, 1);
def nextYear = today.getTime();
def nextYear_formatted = Date.format("yyyy-MM-dd", nextYear);
testRunner.testCase.setPropertyValue( "nextYear", nextYear_formatted )

错误:

groovy.lang.MissingMethodException: No signature of method: static java.util.Date.format() is applicable for argument types: (java.lang.String, java.util.Date) values: [yyyy-MM-dd, Thu Oct 10 00:00:00 EDT 2019] Possible solutions: format(java.lang.String, java.util.TimeZone), format(java.lang.String), from(java.time.Instant) error at line: 8


尝试 #3(groovy 脚本):

Returns 一个错误,因为 SimpleDateFormat 似乎无法编译:

def today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);
today.add(Calendar.YEAR, 1);
def nextYear = today.getTime();
def nextYear_formatted = new SimpleDateFormat("yyyy-MM-dd").format(nextYear);
testRunner.testCase.setPropertyValue( "nextYear", nextYear_formatted )

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script20.groovy: 8: unable to resolve class SimpleDateFormat @ line 8, column 27. def nextYear_formatted = new SimpleDateFormat("yyyy-MM-dd").format(nextYear); ^ org.codehaus.groovy.syntax.SyntaxException: unable to resolve class SimpleDateFormat @ line 8, column 27. at org.codehaus.groovy.ast.ClassCodeVisitorSupport.addError(ClassCodeVisitorSupport.java:149) at ...

(为简洁起见省略了剩余的堆栈跟踪)


如何在 SoapUI 中添加值为今天 + 1 年的 属性?

额外问题:如何添加 JDK 8 以便在 groovy 脚本中使用它?

进一步研究得出答案:SimpleDateFormat前面需要java.text.。所以

def today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);
today.add(Calendar.YEAR, 1);
def nextYear = today.getTime();
def nextYear_formatted = new java.text.SimpleDateFormat("yyyy-MM-dd").format(nextYear);
testRunner.testCase.setPropertyValue( "nextYear", nextYear_formatted )

有效。

你有 groovy 空位吗?

def nextYear = use( groovy.time.TimeCategory ) { new Date() + 1.year }.format( 'yyyy-MM-dd' )