根据SoapUI

时间:2017-11-02 11:27:23

标签: xml groovy xsd soapui

我正在尝试使用以下功能为我的应用程序提供解决方案( Mock Service Script Dispatch ):

  • 允许用户上传XSD文件和Groovy脚本,以便根据XSD
  • 处理XML
  • XSD文件包含两个根元素,例如“request”和“response”
  • 我们已经有了一个生成“请求”的模块
  • 用户Groovy脚本接受“请求”并生成“响应”,例如

    if(request.xxx == 5){     response.yyy = 6 }

该应用程序的最佳解决方案是什么?

@Rao

示例,用户上传

XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:test">
<xs:element name="TestRequest">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="data" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="TestResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="data" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

和脚本:

response.data = request.data + 'xxx'

有些应用程序可以创建正确形成的“请求”(此处为TestRequest)。例如,我可以将这些请求解析为XML DOM。 然后将“request”作为参数传递给上面的Groovy脚本。

请求:

<?xml version="1.0" encoding="UTF-8"?>
<TestRequest xmlns="urn:test">
    <data>data</data>
</TestRequest>

响应:

<?xml version="1.0" encoding="UTF-8"?>
<TestResponse xmlns="urn:test">
    <data>dataxxx</data>
</TestResponse>

(实际上这是Java应用程序,Groovy脚本将通过Java Scripting API运行)

1 个答案:

答案 0 :(得分:1)

以下是发送模拟服务的脚本

assert mockRequest.requestContent, 'Request is null or empty'
log.info mockRequest.requestContent 
def xml = new XmlSlurper().parseText(mockRequest.requestContent)
context.data = xml.'**'.find {it.name() == 'price'}?.text() + 'xxx'

在响应中将属性扩展如下所示作为占位符。一旦请求到达模拟服务,就会从请求中读取值,并为响应的${data}元素设置所需的值(注意:<data>)并将其发送到响应中。

<?xml version="1.0" encoding="UTF-8"?>
<TestResponse xmlns="urn:test">
    <data>${data}</data>
</TestResponse>