SOAP UI - 如何在文件中捕获 REST 原始响应

SOAP UI - How to Capture REST raw Response in a file

我正在尝试使用 groovy 脚本将 REST (POST) API 调用的原始响应捕获到文件中。

我可以在 RAW 中看到如下响应,但是生成文件时它是空白的。

REST 响应:

HTTP/1.1 401 Unauthorized
content-length: 0
Date: Tue 12 jul 2016 12:12:12gmt
WWW-Autheticate: OAuth
Server: Jetty (8.1.17V20150415)

我正在使用 SOAP UI 5.2 版。

感谢任何帮助。

Groovy 脚本:

def Date startTime = new Date()
File it=new File("Result") 
def cur_Time = startTime.getMonth()+1 + "_" + startTime.getDate()
cur_Time = cur_Time + "_" + startTime.getHours() + startTime.getMinutes() +startTime.getSeconds()
def fileName = it.name + "_" + cur_Time
//Request File
def myXmlRequest="C:\ConnectivityResults\"+ "Rest_Request" + fileName+".xml"
def request=context.expand('${Testcasename#Request}')
def req = new File (myXmlRequest)
req.write(request,"UTF-8")

//Response File
def myXmlResponse="C:\ConnectivityResults\"+ "Rest_Response" + fileName+".xml"
def response=context.expand('${Testcasename#Response}')
def res = new File (myXmlResponse)
res.write(response,"UTF-8")

问题可能不在您的 Groovy 脚本中,问题只是您的请求不正确,没有任何响应返回。根据您在问题中显示的http-headers

HTTP/1.1 401 Unauthorized 
content-length: 0 
Date: Tue 12 jul 2016 12:12:12gmt 
WWW-Autheticate: OAuth 
Server: Jetty (8.1.17V20150415)

您收到的是 401 Unauthorized 响应而不是 200 OK,并且基于 Content-lenght 为 0。您的响应为空白是正常的,因此没有内容保存在文件中。

根据评论进行编辑

如果您还想将 http-headers 保存在一个文件中,您可以将以下代码片段添加到您的 Groovy 脚本中:

def fileName = ...
// http-headers file
def httpHeadersFilePath ="C:/ConnectivityResults/Rest_Request${fileName}.txt"
def ts = testRunner.testCase.getTestStepByName('Testcasename')
def headers = ts.getTestRequest().response.responseHeaders
def httpHeaderFile = new File(httpHeadersFilePath)
httpHeaderFile.text = ''

headers.each { key, value ->
   httpHeaderFile.append("${key}:${value}\n",'UTF-8')
}

希望对您有所帮助,

抱歉来晚了...

有一种简单的方法可以获取它并记录在文件中,在您的 SoapUI[= 上使用 Groovy Script 20=]:

#Take the Raw Request into a variable "request":
def request = context.expand( '${Request 1#RawRequest}' )
#Take the Raw Response into a variable "response":
def response = context.expand( '${Request 1#Response}' )

#Create and fill a file "MyFile.json" whit the variables values:
new File( "C:/foo/bar/MyFile.json" ).write( request + response, "UTF-8" )

希望有用。