Groovy脚本 - 自动请求并保存SOAP UI的响应

时间:2016-11-03 12:56:37

标签: xml soap groovy soapui

我是Groovy脚本新手。

要求要从文本文件中读取请求值并将其传递给soap请求xml并保存输出。

问题面临:我无法读取步骤1到步骤2中的数据。但是我也在上下文变量中设置值。请帮助我解决问题,以便我能够自动完成整个过程。

注意:我们只能访问SOAPUI而不是SOAPUI Pro

第1步:

File file1 = new File("C:\\Users\\Groovy Test\\requests\\orders.txt") 
List textLine = file1.readLines() 
log.info textLine 
context.put('textLine', textLine)  
log.info textLine

第2步:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
</soapenv:Header>
<soapenv:Body>
<OrderId>${context.get('textLine' )}</OrderId>
</soapenv:Body>
</soapenv:Envelope>

第3步:

def fileList = context.get('textLine')
def fileName = fileList.pop()
def newname = fileName[0..-5]
def response = context.expand( '${Step2#Response}' )
def f = new File("C:\\Users\\Groovy Test\\responses\\${fileName}_Response.xml")
f.write(response, "UTF-8")
if(fileList.size() >0)
{
testRunner.gotoStepByName("Step2")
}

2 个答案:

答案 0 :(得分:1)

我认为问题是第2步的Xml中的符号:

使用:

<OrderId>${=context.get('textLine')}</OrderId>

而不是:

<OrderId>${context.get('textLine')}</OrderId>

请注意=字符。

答案 1 :(得分:1)

这是实现您所寻找目标的方法。

测试用例包含3个步骤,如下所示:

  • step1 - Groovy Script测试步骤。这将读取数据源,通过循环执行订单步骤。控制测试运行。
  • step2 - Soap Request测试步骤。获取订单&amp;保存回复。
  • step3 - Groovy Script测试步骤。一种退出测试执行的方法。

步骤1

第1步的Groovy脚本:

def data = new File('C:/Users/Groovy Test/requests/orders.txt') 
data.eachLine { orderId ->
   context.orderId = orderId
   //Get the step2, index of the step is 1
   def step = context.testCase.getTestStepAt(1)
   //Run the step2
   step.run(testRunner, context)
}
//By now all the orders got executed, now need to exit the step without additionally running step2
//So, jump to step2, index is 2
testRunner.gotoStep(2)

步骤2

更改请求以使用<OrderId>${orderId}</OrderId>

为step2的请求添加Script Assertion。这将检查响应并保存。

第2步的脚本声明

//Check if there is response
assert context.request, "Request is empty or null"

//Save the contents to a file
def saveToFile(file, content) {
    if (!file.parentFile.exists()) {
         file.parentFile.mkdirs()
         log.info "Directory did not exist, created"
    }
    file.write(content) 
    assert file.exists(), "${file.name} not created"
}

def f = new File("C:/Users/Groovy Test/responses/${context.orderId}_Response.xml")
saveToFile(f, context.response)

步骤3

第3步的Groovy脚本:

log.info "Test completed."