我正在测试一些 Web 服务,我需要在发送之前针对 wsdl 验证请求(xml 消息)。在使用 GUI 的专业版 Soap UI 中,我可以做到(alt-v),但我不能自动做到。当我开始测试项目时,我需要以某种方式自动验证它。当我们的构建服务器开始运行测试项目时。可能有一些 groovy 脚本或其他东西?
当然,soap ui 中有断言,但它只适用于响应。
我正在测试一些 Web 服务,我需要在发送之前针对 wsdl 验证请求(xml 消息)。在使用 GUI 的专业版 Soap UI 中,我可以做到(alt-v),但我不能自动做到。当我开始测试项目时,我需要以某种方式自动验证它。当我们的构建服务器开始运行测试项目时。可能有一些 groovy 脚本或其他东西?
当然,soap ui 中有断言,但它只适用于响应。
您可以使用以下脚本断言:
def project = messageExchange.modelItem.testStep.testCase.testSuite.project
def wsdlcontext = project.getInterfaceAt(0).getDefinitionContext()
def validator = new com.eviware.soapui.impl.wsdl.support.wsdl.WsdlValidator(wsdlcontext);
def errors = validator.assertRequest(messageExchange, false)
assert errors.length < 1
您能否尝试以下脚本,如果您遇到任何问题,请告诉我。
import javax.xml.XMLConstants
import javax.xml.transform.stream.StreamSource
import javax.xml.validation.SchemaFactory
//Load the XSD from a file
def xsd = new File('/C:/schemaFile.xsd').text
//Get the XML from the response
def xmlHolder = new com.eviware.soapui.support.XmlHolder( messageExchange.requestContentAsXml )
def xml = xmlHolder['//result']
def factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
def schema = factory.newSchema(new StreamSource(new StringReader(xsd)))
def validator = schema.newValidator()
try {
validator.validate(new StreamSource(new StringReader(xml)))
} catch( e ) {
assert false
}