Только первый ответ пишется в файле Excel в Saopui

Я новичок в saopUI и Groovy. Я хочу прочитать данные из файла Excel и запустить запрос и записать данные обратно в файл Excel. моя часть для чтения и выполнения работает нормально. но когда я пишу ответ обратно, чтобы преуспеть, пишется только первый ответ. но когда я вижу журнал все три запроса были выполнены успешно. Пожалуйста, помогите мне в этом.

Вот мой отличный сценарий:

import jxl.*
import jxl.write.*

def dataFileLocation="D:/SOAP/input.xls"
//Datasheet read start
def workbook = Workbook.getWorkbook(new File(dataFileLocation))
def sheet = workbook.getSheet(0)
int count=workbook.getNumberOfSheets() 
def rowCount = sheet.getRows()
def colCount = sheet.getColumns()
def myTestCase = context.testCase
propTestStep = myTestCase.getTestStepByName("Properties");
def arr=[]
//Datasheet read end

//Content Write start
WritableWorkbook workbook1 = Workbook.createWorkbook(new File("D:/SOAP/output1.xls"))
WritableSheet sheet1 = workbook1.createSheet("Worksheet 1", 0)


//Content Write end
for(int i = 0;i < rowCount; i++){
    for(int j = 1;j < colCount+1; j++){
       arr[i]= sheet.getCell(j-1,i).getContents()
       def val=arr[i]
       propTestStep.setPropertyValue("zip",val)
       def project = testRunner.testCase.testSuite.project

       def aa=testRunner.runTestStep( project.testSuites['USZipSoap TestSuite'].testCases['GetInfoByZIP TestCase'].testSteps['GetInfoByZIP'] )
       def response = testRunner.testCase.testSteps["GetInfoByZIP"].testRequest.response.contentAsString
       Label label = new Label(j,i,response);
       log.info label
       sheet1.addCell(label);
       workbook1.write()

       log.info j+" " +i+" "+"  "+response 
    }
 }
 workbook1.close()

1 ответ

Решение

JXL странно о том, как он пишет в книгу Excel. В принципе, write() фактически не записывает в файл, а записывает в структуру в памяти. Вы можете прочитать немного больше об этом здесь.

Так двигая write() из цикла, прямо перед close() должен это исправить.

Альтернатива

Я создал Groovy библиотеку с именем Frosted Sheets. Он украшает Apache POI, что упрощает работу с электронными таблицами Excel. Frosted Sheets может просто сделать ваш код примерно таким:

import org.apache.poi.hssf.usermodel.HSSFWorkbook
import com.emmanuelrosa.frostedsheets.*

def dataFileLocation='D:/SOAP/input.xls'
def workbook = new FrostedWorkbook(new HSSFWorkbook(new FileInputStream(dataFileLocation)))
def sheet = workbook[0] /* Index-based access to sheets */
def myTestCase = context.testCase
propTestStep = myTestCase.getTestStepByName("Properties")

def workbook1 = new FrostedWorkbook(new HSSFWorkbook())
def sheet1 = workbook1['Worksheet 1'] /* Map-like access to sheets */

sheet.eachWithIndex { row, rindex -> /* Iterate through each row in a sheet. */
    def output = []

    row.eachWithIndex { cell, cindex -> /* Iterate through the columns of a row. */
        propTestStep.setPropertyValue("zip", cell.cellValue)
        def project = testRunner.testCase.testSuite.project

        def aa=testRunner.runTestStep( project.testSuites['USZipSoap TestSuite'].testCases['GetInfoByZIP TestCase'].testSteps['GetInfoByZIP'] )
        def response = testRunner.testCase.testSteps["GetInfoByZIP"].testRequest.response.contentAsString
        output << response
        log.info "$cindex $rindex $response" 
    }

    sheet1 << output /* Appends a new row to the sheet. */
}

workbook1.write(new FileOutputStream('D:/SOAP/output1.xls'))
Другие вопросы по тегам