2017-11-30 9 views
0

Excelシートからの値を要求できません。 次のコードでは、Excelシートから値を読み取ることはできますが、要求に配置することはできません。groovyで駆動されるデータ内で例外が発生しました

import com.eviware.soapui.support.XmlHolder 
import java.io.File; 
import java.io.IOException; 
import jxl.*; 
import jxl.read.biff.BiffException; 
import jxl.write.*; 

log.info("Testing Started") 
def reqOperationName = "getInsuranceDetails_1_FTC_005"; 
def inputDataFileName = "D:/SOAP UI Pro/MPI.xls" 
def inputDataSheetName = "MPI" 

Workbook workbook = Workbook.getWorkbook(new File(inputDataFileName)); 
WritableWorkbook copy = Workbook.createWorkbook(new File(inputDataFileName),workbook); 
WritableSheet sheet1 = copy.getSheet(inputDataSheetName); 

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def reqholder = groovyUtils.getXmlHolder(reqOperationName+"#Request") 
try{ 
    rowcount = sheet1.getRows(); 
    colcount = sheet1.getColumns(); 
    for(Row in 1..rowcount-1){ 
     for(Col in 2..colcount-1){ 
      String reqTagName = sheet1.getCell(Col,0).getContents() 
      def TagCount = reqholder["count(//*:"+reqTagName+")"] 
      if(TagCount!=0){ 
       String reqTagValue = sheet1.getCell(Col,Row).getContents() 
       reqholder.setNodeValue("//*:"+reqTagName, reqTagValue) 
       reqholder.updateProperty()        
      } 
     } 
     //test the request 
     testRunner.runTestStepByName(reqOperationName) 
    //Read Response xml 

def resholder = groovyUtils.getXmlHolder(reqOperationName+"#Response") 
resTagValue1= resholder.getNodeValues("//*:productID") 
resTagValue2= resholder.getNodeValues("//*:accountNumber") 
resTagValue3= resholder.getNodeValues("//*:insuranceCategory") 
resTagValue4= resholder.getNodeValues("//*:imei") 
resTagValue5= resholder.getNodeValues("//*:handsetMake") 
resTagValue6= resholder.getNodeValues("//*:handsetModel") 
resTagValue7= resholder.getNodeValues("//*:insurancePolicyName") 
resTagValue8= resholder.getNodeValues("//*:insuranceStartTimestamp")   
//Write Response into excel sheet 

Label resValue1= new Label(4,Row,resTagValue1); 
sheet1.addCell(resValue1); 
Label resValue2= new Label(5,Row,resTagValue1); 
sheet1.addCell(resValue1); 
Label resValue3= new Label(6,Row,resTagValue1); 
sheet1.addCell(resValue1); 
Label resValue4= new Label(7,Row,resTagValue1); 
sheet1.addCell(resValue1); 
Label resValue5= new Label(8,Row,resTagValue1); 
sheet1.addCell(resValue1); 
Label resValue6= new Label(9,Row,resTagValue1); 
sheet1.addCell(resValue1); 
Label resValue7= new Label(10,Row,resTagValue1); 
sheet1.addCell(resValue1); 
Label resValue8= new Label(11,Row,resTagValue1); 
sheet1.addCell(resValue1); 

    } 

}catch (Exception e) {log.info(e)} 
finally{ 
    copy.write(); 
    copy.close(); 
    workbook.close(); 
} 
log.info("Testing Over") 

は、私は、コンソールに取得しています例外です:

INFO:java.lang.RuntimeException:net.sf.saxon.trans.XPathException:ライン上の文字11でXPathの構文エラー2({\ ncount(// * :)}:expected ""、found ")"

本当にありがとうございます。 おかげで、

ExcelシートのためのスクリーンショットとRequest以下

は、Excelシートや要求のための付属のスクリーンショット

excel sheet

は以下

は私のコードです、ありがとういますgroovyスクリプトで実装しています.....

Code part1

code part-2

答えて

0

下記されているコードを使用してみてください... 。それは私のために働いており、今では

import com.eviware.soapui.support.XmlHolder 
    import java.io.File 
    import java.io.IOException 
    import jxl.* 
    import jxl.read.biff.BiffException 
    import jxl.write.* 
    import jxl.write.Label 
    log.info("Testing Started") 
    def reqOperationName = "getInsuranceDetails_1_FTC_005" 
    def inputDataFileName = "D:/SOAP UI Pro/MPI.xls" 
    def inputDataSheetName = "MPI" 
    Workbook workbook = Workbook.getWorkbook(new File(inputDataFileName)) 
    Sheet sheet1 = workbook.getSheet(inputDataSheetName) 


    def myList = new ArrayList<String>(); 
    def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
    String xmlResponse = reqOperationName+"#Request" 
    def reqholder = groovyUtils.getXmlHolder(xmlResponse) 
    try{ 
     rowcount = sheet1.getRows() 
     colcount = sheet1.getColumns() 

     for(Row in 1..rowcount-1){ 

     String reqTagName = sheet1.getCell(0,0).getContents() 

     def TagCount = reqholder["count(//*:"+reqTagName+")"] 

     if(TagCount!=0){ 
      String reqTagValue = sheet1.getCell(0,Row).getContents() 
      if(reqTagValue!=null && !reqTagValue.isEmpty() && reqTagValue!="") 
        { 
         reqholder = groovyUtils.getXmlHolder(xmlResponse) 
         log.info "extracted value : " + reqTagValue 
        reqholder.setNodeValue("//*:"+reqTagName, reqTagValue) 
        reqholder.updateProperty()   
        log.info "node value : " + reqholder.getNodeValue("//*:"+reqTagName) 
        //test the request 
        testRunner.runTestStepByName(reqOperationName) 
        reqholder = groovyUtils.getXmlHolder(reqOperationName+"#Response") 
        myList.add(reqholder.getPrettyXml().toString()) 
        log.info myList[Row-1] 
        }      
     } 

     } 
    } 
    catch (Exception e) {log.info(e)} 
    finally{ 
     workbook.close() 
    } 
    Workbook existingWorkbook = Workbook.getWorkbook(new File(inputDataFileName)); 
    WritableWorkbook workbookCopy = Workbook.createWorkbook(new File(inputDataFileName), existingWorkbook); 

    try 
    { 
     WritableSheet sheetToEdit = workbookCopy.getSheet(inputDataSheetName); 
     WritableCell cell; 
     for (int i =1;i<myList.size();i++) 
     { 
     def resholder = groovyUtils.getXmlHolder(myList[i]) 

     resTagValue1= resholder.getNodeValue("//*:productID") 
     Label l = new Label(2, i+1, resTagValue1.toString()); 
     cell = (WritableCell) l; 
     sheetToEdit.addCell(cell); 

     resTagValue2= resholder.getNodeValue("//*:accountNumber") 
     Label m = new Label(3, i+1, resTagValue2.toString()); 
     cell = (WritableCell) m; 
     sheetToEdit.addCell(cell); 

     resTagValue3= resholder.getNodeValue("//*:insuranceCategory") 
     Label n = new Label(4, i+1, resTagValue3.toString()); 
     cell = (WritableCell) n; 
     sheetToEdit.addCell(cell); 

     resTagValue4= resholder.getNodeValue("//*:imei") 
     Label o = new Label(5, i+1, resTagValue4.toString()); 
     cell = (WritableCell) o; 
     sheetToEdit.addCell(cell); 

     resTagValue5= resholder.getNodeValue("//*:handsetMake") 
     Label p = new Label(6, i+1, resTagValue5.toString()); 
     cell = (WritableCell) p; 
     sheetToEdit.addCell(cell); 

     resTagValue6= resholder.getNodeValue("//*:handsetModel") 
     Label q = new Label(7, i+1, resTagValue6.toString()); 
     cell = (WritableCell) q; 
     sheetToEdit.addCell(cell); 

     resTagValue7= resholder.getNodeValue("//*:insurancePolicyName") 
    Label r = new Label(8, i+1, resTagValue7.toString()); 
    cell = (WritableCell) r; 
    sheetToEdit.addCell(cell); 

    resTagValue8= resholder.getNodeValue("//*:insuranceStartTimestamp") 
    Label s = new Label(9, i+1, resTagValue8.toString()); 
    cell = (WritableCell) s; 
    sheetToEdit.addCell(cell); 

    resTagValue9= resholder.getNodeValue("//*:insuranceEndTimestamp") 
    Label t = new Label(10, i+1, resTagValue9.toString()); 
    cell = (WritableCell) t; 
    sheetToEdit.addCell(cell); 
    } 
    } 
catch (Exception e) {log.info(e)} 
finally{ 
    workbookCopy.write(); 
workbookCopy.close(); 
existingWorkbook.close(); 
} 
log.info("Testing Over") 

があなたのために働いているかを助けているなら、私に教えてください....同様にあなたのために参考になるかもしれません。

+0

それは働いた。ありがとうございました@sambid –

+0

うわー、それは素晴らしいです。しかし、そのクレジットは@ sameer shaikに問題のために行く:) –

0

私は私が問題を発見したと思います。そのエラーが発生する理由は、特定の行と列の組み合わせ(セルにデータがないことを意味する)のExcelシートからNULL値を取得しているためです。列が1つであるため、列ループは必要ありません。そのより良いあなたが別のExcelシートへのテストデータ入力とテスト出力結果を移動また

import com.eviware.soapui.support.XmlHolder 
import java.io.File 
import java.io.IOException 
import jxl.* 
import jxl.read.biff.BiffException 
import jxl.write.* 

log.info("Testing Started") 
def reqOperationName = "getInsuranceDetails_1_FTC_005" 
def inputDataFileName = "D:/SOAP UI Pro/MPI.xls" 
def inputDataSheetName = "MPI" 
Workbook workbook = Workbook.getWorkbook(new File(inputDataFileName)) 
WritableWorkbook copy = Workbook.createWorkbook(new File(inputDataFileName),workbook) 
WritableSheet sheet1 = copy.getSheet(inputDataSheetName) 

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def reqholder = groovyUtils.getXmlHolder(reqOperationName+"#Request") 
try{ 
    rowcount = sheet1.getRows() 
    colcount = sheet1.getColumns() 

    for(Row in 1..rowcount-1){ 
    def cell = sheet1.getCell(0,0) 
    cell.setCellType(Cell.CELL_TYPE_STRING) 
    String reqTagName = cell.getContents() 
     log.info reqTagName 
     def TagCount = reqholder["count(//*:"+reqTagName+")"] 
     if(TagCount!=0){ 
      String reqTagValue = sheet1.getCell(0,Row).getContents() 
      reqholder.setNodeValue("//*:"+reqTagName, reqTagValue) 
      reqholder.updateProperty()        
     } 

    //test the request 
    testRunner.runTestStepByName(reqOperationName) 


    } 

} 
catch (Exception e) {log.info(e)} 
finally{ 
    copy.write() 
    copy.close() 
    workbook.close() 
} 
log.info("Testing Over") 

は、以下のこのコードを試してみてください。あなたのコードでは、テストデータの入力に1枚のシートを使用し、問題の原因となっているテスト結果を保存するようになりました。

私はそれが働いたら教えてください。これが役に立ちますようお願いいたします。

+0

あなたが言及したコードを実装した後で@sameerの問題を確認していただきありがとうございます、私のシートからすべてのデータを削除していますが、まだSOAPリクエストの変更はありません....代わりに、 "Unexpected要素:19行目のCDATAエラー "以下は、コードを追加した後に発生したエラーログです。 –

+0

コードはExcelシートのSOAPリクエストの値を置き換えていません。また、XMLレスポンスのコンテンツを共有できないため、実行が行われていません。私は非常にひどくこのことにこだわって私を助けてください。 –

+0

ええ、私はRequestAsXmlをRequestに置き換えて試しました...エラーログには何のエラーもありません...コンソールでは、私は情報が "INFO:java.lang.RuntimeException:net.sf.saxon.trans .XPathException:{\ ncount(// * :)}の行2のchar 11のXPath構文エラー: "が見つかりました") " –

0

ちょっとした提案ですが、達成しようとしていることに対してCSVファイルを使用できない理由がありますか?

私は過去にテストをデータ駆動型のためにExcelを使用しているとき、私は多くの場合、余分な文字/スペースで添加することができることを発見したと私は尋ねる。

+0

.xlsの代わりに.csvを使用すると、私にはわからないエラーが発生します。に入る。 –

関連する問題