如何在SoapUI免费版中用Groovy测试步骤计算日期时间的分钟差?
在SoapUI免费版用Groovy计算REST日期时间差值(分钟)
嘿,这个需求我平时做接口测试时经常碰到,用Groovy测试步骤就能轻松搞定,我给你一步步拆解清楚:
1. 从REST响应中提取日期时间字符串
首先得把接口返回的两个日期时间字段取出来。假设你的REST接口返回JSON格式,包含startTime和endTime字段,用Groovy的JsonSlurper解析就行:
// 获取前一个REST请求的响应内容 def response = context.expand('${REST Request#Response}') def jsonSlurper = new groovy.json.JsonSlurper() def jsonData = jsonSlurper.parseText(response) // 按实际字段名提取日期字符串 def startDateStr = jsonData.startTime def endDateStr = jsonData.endTime
如果是XML响应,就换成XmlSlurper解析:
def response = context.expand('${REST Request#Response}') def xmlSlurper = new groovy.xml.XmlSlurper() def xmlData = xmlSlurper.parseText(response) def startDateStr = xmlData.startTime.text() def endDateStr = xmlData.endTime.text()
2. 将字符串转换为可计算的日期对象
接下来要把字符串转成能计算的日期对象,Groovy的Date.parse()方法很方便,但要注意格式字符串必须和返回的日期格式完全匹配:
// 假设返回的是ISO8601格式(比如2024-05-20T14:30:00) def dateFormat = "yyyy-MM-dd'T'HH:mm:ss" def startDate = Date.parse(dateFormat, startDateStr) def endDate = Date.parse(dateFormat, endDateStr)
小贴士:如果日期带时区(比如
2024-05-20T14:30:00+08:00),记得把格式字符串改成yyyy-MM-dd'T'HH:mm:ssXXX适配。
3. 计算分钟差值
拿到两个Date对象后,通过毫秒数差值转换为分钟即可:
// 结束时间减开始时间,得到正差值(如果要反向算就调换顺序) def diffMs = endDate.getTime() - startDate.getTime() // 1分钟=60*1000毫秒,转换为分钟 def diffMinutes = diffMs / (60 * 1000) // 打印结果,也可以存到上下文供后续步骤使用 log.info "两个日期的分钟差值为:${diffMinutes}" context.setProperty("timeDiffMinutes", diffMinutes)
完整示例代码
把步骤整合起来,完整的Groovy测试代码大概是这样:
// 1. 解析响应 def response = context.expand('${REST Request#Response}') def jsonSlurper = new groovy.json.JsonSlurper() def jsonData = jsonSlurper.parseText(response) def startDateStr = jsonData.startTime def endDateStr = jsonData.endTime // 2. 转换日期格式 def dateFormat = "yyyy-MM-dd'T'HH:mm:ss" def startDate = Date.parse(dateFormat, startDateStr) def endDate = Date.parse(dateFormat, endDateStr) // 3. 计算分钟差 def diffMs = endDate.getTime() - startDate.getTime() def diffMinutes = diffMs / (60 * 1000) log.info "时间差(分钟):${diffMinutes}" // 要是需要整数分钟,用toInteger()或者round()就行 // log.info "整数分钟差:${diffMinutes.toInteger()}"
额外小贴士:处理时区差异
如果涉及到时区问题,更推荐用Java 8+的java.time包类,避免时区偏差:
import java.time.LocalDateTime import java.time.format.DateTimeFormatter def formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss") def startDateTime = LocalDateTime.parse(startDateStr, formatter) def endDateTime = LocalDateTime.parse(endDateStr, formatter) def diffMinutes = java.time.Duration.between(startDateTime, endDateTime).toMinutes() log.info "时间差(分钟):${diffMinutes}"
内容的提问来源于stack exchange,提问作者jeesan485
相关产品推荐
相关产品推荐

