在groovy生成日期的断言中的通配符?

时间:2013-06-04 08:26:36

标签: groovy soapui

我们正在使用SoapUI来测试我们的Web服务。此Web服务在可预测模式之后生成不同的时间戳,因此我们使用groovy脚本在SoapUI端生成它们,并在断言中使用这些来断言在Web服务器端断言正确的计算。到目前为止一切都那么好,它就像日期上的魅力(模式yyyy-MM-dd)和固定小时/分钟的时间戳(模式yyyy-MM-dd'T'HH:mm':00.000')。我们使用此脚本的变体来执行此操作,有时会添加天,月,小时等等:

def sdf = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
Calendar instance = Calendar.getInstance();       
instance.setTime(new Date());
Date date= instance.getTime();
s = sdf.format(date)
return s

===

现在我遇到了以下问题:这个新项目会生成精确的时间戳,直到毫秒。问题是,我无法准确地预测到这一点,SoapUI比web服务更早地生成日期(这并不奇怪,只是一个事实),因此时间戳之间存在大约100到500毫秒的差异。

我尝试将通配符(*)(也启用它们)添加到此模式中以忽略毫秒部分,因为只要第二个是正确的,它被认为是不成功的,但我猜它们在groovy中不起作用脚本。有没有办法让它们有效?还有其他方法可以检查时间戳到第二个是否正确,然后忽略毫秒?

1 个答案:

答案 0 :(得分:0)

这很容易!在脚本断言中找到你回来的日期与“现在”之间的差异,并断言差异小于某个容差。

def nowDate = new Date()

def sdf = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX")
def currentDate = sdf.parse(context.expand('${getCurrentDateTime#ResponseAsXml#//*:current}'))

def minutesDiff = Math.abs(nowDate.getTime() - currentDate.getTime()) / 1000 / 60

assert minutesDiff < 5 : "Too great of a difference with server!"