在用户定义的路径中保存 Soap 测试步骤的原始请求和响应

Saving raw request & response of Soap test step in user defined path

我想将 soap 测试步骤原始请求和步骤保存在从测试套件自定义属性中导入的配置文件读取的路径中。

我该怎么做?

使用以下脚本,但使用脚本中定义的固定位置。

def myOutFile = "D:/TestLog/Online_Test/PostPaidSuccess_Payment_BillInqReq.x‌​ml" 
def response = context.expand( '${BillInq#Request}' ) 
def f = new File(myOutFile) 
f.write(response, "UTF-8")

我建议避免额外的 Groovy Script 测试步骤以仅存储上一步请求/响应。

下面的脚本假定,在测试套件级别有用户定义的 属性 (REQUEST_PATH) 及其值(存储数据的有效文件路径,路径由正斜杠 '/' 分隔甚至在 windows).

而是对 Billing 请求步骤本身使用 Script Assertion(在测试用例中少了一步)

//Stores raw request to given location using utf-8 encoding
new File(context.testCase.testSuite.getPropertyValue('REQUEST_PATH') as String).write(context.rawRequest,'utf-8')

实际上 context.requestcontext.rawRequest 与上面使用 rawRequest 的脚本之间存在细微差别。

context.request - 将具有原样的变量,而不是实际值。

例如:

<element>${java.util.UUID.randomUUID().toString()}</element>

其中 context.rawRequest - 将具有在请求中发送的实际值。

例如:

<element>4ee36185-9bfb-47d2-883e-65bf6d3d616b</element>

编辑 根据评论:请针对 ACCESS DENIED 问题尝试此操作

def file = new File(context.testCase.testSuite.getPropertyValue('REQUEST_PATH') as String)
if (!file.canWrite()) {
    file.writable = true
}
file.write(context.rawRequest,'utf-8')

EDIT2 根据 OP 的进一步评论,请求文件名应为当前测试步骤名称。

//Create filename by concatenating path from suite property and current test stepname
def filename = "${context.testCase.testSuite.getPropertyValue('REQUEST_PATH')}/${context.currentStep.name}.xml" as String
new File(filename).write(context.rawRequest,'utf-8')