You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy校验响应数组中指定日期存在性时断言失败问题

问题分析与解决方案

从你提供的错误信息和代码来看,核心问题是类型不匹配导致contains断言失败:

  • responseStartDateTime是一个包含日期值的列表,但这些值大概率是Date对象(JSON解析器自动转换的结果)
  • requestStartDateTime是你手动格式化后的字符串

Groovy的contains方法会严格校验元素的类型和值,所以即使日期的字符串表现完全一致,Date对象和字符串也会被判定为不相等,最终导致断言返回false。

修复方案

方案1:将请求日期转为Date对象再比较

把你生成的requestStartDateTime字符串转回Date类型,和响应中的元素类型保持一致:

// 在断言之前添加这段代码
def dateFormatter = new SimpleDateFormat(outputDateFormat)
def requestStartDate = dateFormatter.parse(requestStartDateTime)
def requestEndDate = dateFormatter.parse(requestEndDateTime)

// 修改断言语句
assert responseStartDateTime.contains(requestStartDate)
assert responseEndDateTime.contains(requestEndDate)

方案2:将响应日期数组转为字符串列表再比较

把响应中的每个日期对象格式化为字符串,再和请求的日期字符串对比:

// 将响应中的日期转为指定格式的字符串列表
def dateFormatter = new SimpleDateFormat(outputDateFormat)
def responseStartStrings = responseStartDateTime.collect { dateFormatter.format(it) }
def responseEndStrings = responseEndDateTime.collect { dateFormatter.format(it) }

// 修改断言语句
assert responseStartStrings.contains(requestStartDateTime)
assert responseEndStrings.contains(requestEndDateTime)

额外优化建议

你解析原始请求日期的方式可以更严谨,因为原始的StartDateTime是带.000Z的ISO格式,建议使用支持时区的日期格式解析:

// 替换原有的解析代码
def inputDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX"
def outputDateFormat = "yyyy-MM-dd'T'HH:mm:ss"
def dateFormatter = new SimpleDateFormat(inputDateFormat)

start = dateFormatter.parse(StartDateTime)
end = dateFormatter.parse(EndDateTime)

def requestStartDateTime = new SimpleDateFormat(outputDateFormat).format(start)
def requestEndDateTime = new SimpleDateFormat(outputDateFormat).format(end)

另外,你可以先打印响应日期元素的类型,明确问题根源:

log.info "Response StartTime element type: ${responseStartDateTime[0].class.name}"

内容的提问来源于stack exchange,提问作者rAJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:20:44