代码之家  ›  专栏  ›  技术社区  ›  SD31

如何在Groovy for SoapUI中使用分隔符将所有SOAP响应值写入CSV文件

  •  1
  • SD31  · 技术社区  · 7 年前

    我是Groovy新手,正在研究Soap UI。目前,我正在开发Groovy模块,我需要将带有分隔符的所有标记值写入到 .csv 文件我从其他帖子得到的解决方案是针对 xpath .

    但我正在努力实现以下目标:

    1. 要存储在csv文件中的所有重复数组的所有值
    2. 带分隔符的单行中的每个数组

    预期输出:

    code;Name;Category;Manufacturer;Price;Stock // as header
    1234;product name;some category;manufacturer;100;1
    1235;product name2;some category2;manufacturer2;1002;2
    

    XML示例:

    <ns2:personalarray1Response>
        <ns2:personarray1>
            <Code>1234</Code>
            <Name>product name</Name>
            <Category>some category</Category>
            <Manufacturer>manufacturer</Manufacturer>
            <Price>100</Price>
            <Stock>1</Stock>
        </ns2:personarray1>
        <ns2:personarray1>
            <Code>1235</Code>
            <Name>product name2</Name>
            <Category>some category2</Category>
            <Manufacturer>manufacturer2</Manufacturer>
            <Price>1002</Price>
            <Stock>2</Stock>
        </ns2:personarray1>
        <ns2:personarray1>
            <Code>1234</Code>
            <Name>product name</Name>
            <Category>some category</Category>
            <Manufacturer>manufacturer</Manufacturer>
            <Price>100</Price>
            <Stock>1</Stock>
        </ns2:personalarray1>
    </ns2:personalarray1Response>
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Rao CrashOverload    7 年前

    这是 Script Assertion 对于相同的Soap请求步骤和需求 不需要 使用额外的Groovy脚本步骤。

    剧本

     //Change file name as needed
    def fileName = '/file/path/to.csv'
    def delimiter = ',' 
    
    assert context.response, 'Response is empty or null'
    
    def xml = new XmlSlurper().parseText(context.response)
    
    def personalInfos = xml.'**'.findAll { it.name() == 'personarray1' }
    
    
    //Create the list of data (person array) 
    def list = personalInfos.collect {info -> info.children()*.name().collectEntries{[(it): info."$it"] } }
    
    
    def sb = new StringBuffer(list[0].keySet().join(delimiter))
    sb.append('\n')
    
    list.collect { sb.append(it.values().join(delimiter)).append('\n')}
    log.info "Data going to be written into file: \n ${sb.toString()}"
    
    new File(fileName).write(sb.toString())