Groovy:有可能用这个做一个动态属性吗?

时间:2014-08-20 15:32:19

标签: groovy soapui

是否可以在单行动态属性中转换以下groovy请求? 该问题是在不使用groovy脚本的情况下在SOAPui请求中使用结果。 因为我有很多不同的日期要放在我的请求中,也在我的断言中。

import groovy.time.TimeCategory
use (TimeCategory) {
    date = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new Date() -5.month)
}

我希望有一个动态的属性,我可以,当然,改变。例如:

<ech:date1>${Today - 5 month}</ech:date1>
<ech:date2>${Today - 4 month}</ech:date2>
<ech:date3>${Today - 3 week}</ech:date3>

编辑:更多信息

实际上,我有一个动态属性,它给我今天的日期,减去或加上x天,我可以在SOAPui中放入xml请求:

[这里,它给我今天的日期再加上20天]

${=new java.text.SimpleDateFormat("yyyy-MM-dd").format(new Date()+20)}

示例应用程序:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ech="http://echange.service.open.bodet.com">
   <soapenv:Header/>
   <soapenv:Body>
      <ech:importRequests01>
         <ech:Requests01ToImport>
            <!--Zero or more repetitions:-->
            <ech:Request01>

               <ech:requestDate>${=new java.text.SimpleDateFormat("yyyy-MM-dd").format(new Date() +20)}</ech:requestDate>

               <!--You may enter ANY elements at this point-->
            </ech:Request01>
         </ech:Requests01ToImport>
      </ech:importRequests01>
   </soapenv:Body>
</soapenv:Envelope>

所以,我想有同样的事情,但是要问今天的日期减去/加上x个月......等等。

3 个答案:

答案 0 :(得分:1)

详情请见优秀的post

import static java.util.Calendar.*

Date now = new Date()
now.clearTime()

Date nowMin5Month = now.updated( MONTH:now[ MONTH ] - 5 )
String nowMin3Week = now.updated( WEEK_OF_YEAR:now[ WEEK_OF_YEAR ] - 3 ).format( 'yyyy-MM-dd' )

答案 1 :(得分:1)

我不了解Soap UI,但mixing the Category into the respective types有帮助吗?

import groovy.time.TimeCategory

class TimeCategoryMixer {
    static global() {
        TimeCategory.metaClass.methods
            .findAll { it.isStatic() && !it.name.startsWith("__") && it.name != "global" }
            .each { it.nativeParameterTypes[0].mixin TimeCategory }
    }
}

TimeCategoryMixer.global()

def d = Date.parse('yyyy-MM-dd', '2000-01-01')

assert d - 5.month == Date.parse('yyyy-MM-dd', '1999-08-01')

<强>更新

根据您的更新,这是怎么回事:

b="${use(groovy.time.TimeCategory) { Date.parse('yyyy-MM-dd', '2000-01-01') - 5.month} }"

assert b == Date.parse('yyyy-MM-dd', '1999-08-01').toString()

我认为SoapUI会对这样的事情感到高兴:

<ech:requestDate>${=use(groovy.time.TimeCategory) { Date.parse('yyyy-MM-dd', '2000-01-01') - 5.month}}</ech:requestDate>

答案 2 :(得分:0)

我找到了这个,举个例子来说&#34; 2014-7-10&#34;:

可从groovy中使用

(Calendar.getInstance().get(Calendar.YEAR) - 0) +"-"+(Calendar.getInstance().get(Calendar.MONTH) +1)+"-"+(Calendar.getInstance().get(Calendar.DATE) - 0)

可以使用XML,也可以使用SoapUI测试请求:

${= (Calendar.getInstance().get(Calendar.YEAR) - 0) +"-"+(Calendar.getInstance().get(Calendar.MONTH) +1)+"-"+(Calendar.getInstance().get(Calendar.DATE) - 0)}

有了这个,我可以指定&#34; MONTH -5&#34;或&#34; MONTH + 2&#34;。 因为我在YEAR或DAY使用相同的东西,我可以为他们做同样的事情。

警告:不要忘记,在格里高利历中,第一个月,即1月,等于0。 这就是为什么我把&#34; ... get(Calendar.MONTH) +1 ......&#34;