Только первый ответ пишется в файле 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'))