我正在尝试在Groovy的帮助下解析一个有多个联系人的xml文件。我想要做的是从xml中获取此文件中的每个联系人,并将其作为REST请求的一部分逐个发送。我尝试在XmlParser和XmlSlurper的帮助下编写一个groovy脚本,但是这样做并不是很成功。我对Groovy很新。
以下是文件的内容:
<contacts>
<contact>
<firstName>Dummy</firstName>
<lastName>Contact1</lastName>
<gender>M</gender>
</contact>
<contact>
<firstName>Dummy</firstName>
<lastName>Contact2</lastName>
<gender>F</gender>
</contact>
</contacts>
以下是我尝试使用XmlSlurper的代码:
import groovy.xml.*
//get the file path
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def projectPath = groovyUtils.projectPath
def f = new File(projectPath + '\\contacts - xml.txt')
//check if file exists
if(!f.exists())
{
throw Exception("The XML File does not exist")
}
//parse file
def xml = new XmlSlurper().parse(f)
log.info xml
以下是我获得上述代码的输出:
DummyContact1MDummyContact2F
我也可以通过以下方式访问invidual节点:
log.info xml.contact[0].gender
当我使用XmlParser而不是XmlSlurper时,我得到一个似乎更无法使用的响应:
contacts[attributes={}; value=[contact[attributes={}; value=[firstName[attributes={}; value=[Dummy]], lastName[attributes={}; value=[Contact1]], gender[attributes={}; value=[M]]]], contact[attributes={}; value=[firstName[attributes={}; value=[Dummy]], lastName[attributes={}; value=[Contact2]], gender[attributes={}; value=[F]]]]]]
有没有办法可以将文件中的内容读取为xml并将其存储在包含xml的变量中,以便我可以将其简单地传递给REST Post Request?无法知道文件中的联系人记录数量或每个联系人的节点数量。
答案 0 :(得分:1)
您与XmlSlurper()
走在正确的轨道上。继续你的脚本:
def contacts = xml.'**'.findAll { it.name().equals('contact') }
contacts.each {
// do something with the contact
log.info it.firstName.text()
log.info it.lastName.text()
log.info it.gender.text()
}
您可以将每个联系人重写为相应的请求 - 您没有指定您想要的内容。将其存储在变量中:
testCase.setPropertyValue('myContact', myContact)
然后在您的请求中,您可以使用${testCase#myContact}
打开它。
即使SoapUI的免费版本也有built-in loops,因此您可以根据需要多次循环所有这些:直到${testCase#myContact}
变空。