[SoapUI]怎样运用Schema通过*.xsd文件来验证response对应的xml文件
添加Groovy Script脚本对Test Step进行验证
脚本如下(已经运行通过):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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( 'D:\\DOAutomationTest\\Automation_Test_DO_IpadForAdvisor_SoapUI\\Schemas\\schema_Clients.xsd' ).text log.info "xsd = " +xsd //Get the XML from the response def response = testRunner.testCase.testSteps[ "testStepName" ].testRequest.response.contentAsString log.info "response = " +response 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(response))) } catch ( Exception ) { assert false } |
一个启发我的Sample(也可以运行成功):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | class XmlExamples { static def CAR_RECORDS = '' ' <records> <car name= 'HSV Maloo' make= 'Holden' year= '2006' > <country>Australia</country> <record type= 'speed' >Production Pickup Truck with speed of 271kph</record> </car> <car name= 'P50' make= 'Peel' year= '1962' > <country>Isle of Man</country> <record type= 'size' >Smallest Street-Legal Car at 99cm wide and 59 kg in weight</record> </car> <car name= 'Royale' make= 'Bugatti' year= '1931' > <country>France</country> <record type= 'price' >Most Valuable Car at $ 15 million</record> </car> </records> '' ' } def xsd = '' ' <xs:schema xmlns:xs= "http://www.w3.org/2001/XMLSchema" elementFormDefault= "qualified" > <xs:element name= "records" > <xs:complexType> <xs:sequence> <xs:element maxOccurs= "unbounded" ref= "car" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name= "car" > <xs:complexType> <xs:sequence> <xs:element ref= "country" /> <xs:element ref= "record" /> </xs:sequence> <xs:attribute name= "make" use = "required" type= "xs:NCName" /> <xs:attribute name= "name" use = "required" /> <xs:attribute name= "year" use = "required" type= "xs:integer" /> </xs:complexType> </xs:element> <xs:element name= "country" type= "xs:string" /> <xs:element name= "record" > <xs:complexType mixed= "true" > <xs:attribute name= "type" use = "required" type= "xs:NCName" /> </xs:complexType> </xs:element> </xs:schema> '' '.trim() import javax.xml.XMLConstants import javax.xml.transform.stream.StreamSource import javax.xml.validation.SchemaFactory def factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI) def schema = factory.newSchema( new StreamSource( new StringReader(xsd))) def validator = schema.newValidator() validator.validate( new StreamSource( new StringReader(XmlExamples.CAR_RECORDS))) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现