2017-04-11 105 views
-1

我已经编写了下面的代码,用于从Excel动态读取值,从SOAP UI调用Web服务并将响应标记之间的值写入Excel。从我的Web服务,如图阅读Web服务响应并使用SOAP在Groovy脚本中写入Excel

import jxl.*; 
import jxl.read.biff.BiffException; 
import jxl.write.*; 

def reqOperationName = "TestRequest"; 
def inputDataFileName = "Automate/SampleData.xls"; 
def inputDataSheetName = "sendSampleData"; 
log.info("Service Testing Started")  
Workbook workbook = Workbook.getWorkbook(new File(inputDataFileName)); 
WritableWorkbook copy = Workbook.createWorkbook(new File(inputDataFileName),workbook); 
    WritableSheet sheetl = copy.getSheet(inputDataSheetName); 

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context); 
def reqholder = groovyUtils.getXmlHolder(reqOperationName+"#Request"); 
    try{ 
     rowcount = sheetl.getRows(); 
     colcount = sheetl.getColumns(); 
     for(Row in 1..rowcount-1){ 
      for(Col in 2..colcount-1){ 
       String reqTagName = sheetl.getCell(Col,0).getContents() 
       def TagCount = reqholder["count(//*:"+reqTagName+")"] 

        if(TagCount!=0){ 
          String reqTagValue = sheetl.getCell(Col,Row).getContents() 
          reqholder.setNodeValue("//*:"+reqTagName, reqTagValue) 
          reqholder.updateProperty() 
         } 
      } 
         // To Run Test Request 
         testRunner.runTestStepByName(reqOperationName) 
     //Read Response XML 
       def resholder = groovyUtils.getXmlHolder(reqOperationName+"#Response") 

       resTagValue1 = resholder.getNodeValues("//*:message") 

       //Write Response value to Excel Sheet 
       Label resValue1 = new Label(8,Row,java.lang.String resTagValue1); 
         sheetl.addCell(resValue1); 
     }// Row loop Ends Here 
    }catch (Exception e) {log.info(e) } 
     finally{ 
      copy.write(); 
      copy.close(); 
      workbook.close(); 
     } 
log.info("Service Testing Finished") 

响应如下: -

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soap:Body> 
    <Response xmlns="http://eh.dummy.com"> 
    <sets xmlns=""> 
     <sets_InnerSet xmlns="http://eh.dummy.com"> 
      <visibleSetsInnerSet> 
       <set_cd>QS1</set_cd> 
      </visibleSetsInnerSet> 
      <visibleSetsInnerSet> 
       <set_cd>QS8</set_cd> 
      </visibleSetsInnerSet> 
      <visibleSetsInnerSet> 
       <set_cd>QS9</set_cd> 
      </visibleSetsInnerSet> 
     </sets_InnerSet> 
    </sets> 
    <responseCode xmlns="">success</responseCode> 
    </Response> 
</soap:Body> 
</soap:Envelope> 

能否请你让我知道我可以从set_CD标签读取值(QS1/QS8/QS9)和写入到Excel文件在一个单元格中为QS1,QS8,QS9。

+0

问题写入excel或提取数据并将其创建为所需的格式?你有什么困难?而不是图像,你可以编辑问题并粘贴响应XML? – Rao

+0

我在从所需的响应标记提取数据并以所需格式创建数据时遇到了问题。 – Inevitable

回答

0

您可以使用下面的groovy代码片段来获取所需格式的期望值。

//Pass the xml string to parseText method below i.e., your response 
def parsedXml = new XmlSlurper().parseText(xml) 
//Get the desired value in required format 
def result = parsedXml.'**'.findAll {it.name() == 'set_cd'}.collect{it.text().trim()}.join(',') 
log.info "Desired output : $result" 

//You can use result variable to write or use anywhere you needed 

您可以快速地在线Demo

试试这个希望,你将能够继续和上面写重试result到你需要的地方。

+0

非常感谢。有效... – Inevitable