soapUI设置挡板,在mockaction中编写脚本实现根据请求参数的不同来返回不同的响应
功能测试或者压力测试场景中,会使用挡板来代替外部系统。当调用地址是同一个,但是会根据请求类型,进行相应的处理并返回。这种场景的挡板就需要根据请求参数的不同,返回不同的响应参数。
挡板结构如下
在hhh这个mockaction中,Dispatch策略选择SCRIPT之后,在下方编写脚本。
两个response的内容分别如下:
responseFind
responseUpdate
responseUpdate返回参数中,${time}是通过参数化的形式引入的变量time,在脚本中通过context.setProperty(“time”,dateTimeStr)的形式给参数赋值。
脚本内容:
import groovy.json.JsonSlurper
import java.text.SimpleDateFormat//记录被请求的次数
//if (context.mockRequestCount == null ){
// context.mockRequestCount = 1
//} else {
// context.mockRequestCount++
//}try { def requestBody = mockRequest.getRequestContent() //获取请求体参数
// log.info "Request body: " + requestBody + "\n"def requestType = nulldef dateTimeStr = new SimpleDateFormat("yyyyMMddHHmmssSSSSSS").format(new Date())//解析json请求if(requestBody){String JsonText = new String(requestBody.getBytes("GBK"), "UTF-8")jsonContent = new JsonSlurper().parseText(JsonText)
// log.info "jsonContent: " + jsonContentrequestType = jsonContent.requestType
// log.info("requestType: " + requestType)}if(requestType=="Find"){log.info( " 应返回的response是: " + "Response" + requestType )context.setProperty("time",dateTimeStr)return "Response" + requestType }else if (requestType=="Update"){log.info(" 应返回的response是: " + "Response" + requestType )return "Response" + requestType }}catch (Exception e) {log.info("出错啦!")
}
调用结果如下:
requestType为Find时,返回的内容与responseFind一致;requestType为Update时,返回的内容与responseUpdate的内容一致,time参数正确赋值。