使用 SOAPUI 中的 groovy 步骤为迭代 3 次的自动化测试用例编写 excel 报告
Write excel report using groovy step in SOAPUI for an automated Test Case which iterates 3 times
我正在尝试使用 soapui(groovy 脚本)自动执行 Web 服务。
我有以下测试步骤:
- 数据源(从 excel 数据源读取行)
- 属性
- SOAP 步骤
- 将 SOAP REQ-RES 捕获为 xml 个文件
- 使用 xml 生成 Excel 报告
从响应解析的标签值
- Looper(迭代测试用例
数据源 excel 文件中的总行数)
我已成功创建框架,但卡在第 5 步。
步骤 5 成功执行,但创建的报告 excel 文件仅包含最后一次测试迭代的响应数据。每次迭代都会创建一个新工作簿,该工作簿会被下一次迭代覆盖。
请提出更改建议,以实现在 excel sheet
中为每次迭代追加响应数据的功能
我正在使用 jxl api 使用以下代码编写已解析的 xml 数据:
import jxl.*;
import com.eviware.soapui.support.XmlHolder
import jxl.write.*;
// create an excel workbook
WritableWorkbook workbook1=Workbook.createWorkbook(newFile("/Users/anant/Downloads/GroovyTest/report.xls"));
// create a sheet in the workbook
WritableSheet sheet1 = workbook1.createSheet("Report Worksheet", 0);
// Get the data to be added to the report
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder("divide#response")
def fieldFromResponse = holder.getNodeValue("//n:divideResponse/n:Result")
// create a label
Label label = new Label(0, 0, fieldFromResponse);
log.info fieldFromResponse
// Add the label into the sheet
sheet1.addCell(label);
workbook1.write();
workbook1.close();
每次执行时,它都会将 fieldFromResponse
写入单元格 A:1(第 0 列,第 0 行)。这就是您只看到最后一次测试迭代的原因。
您需要每次写入不同的单元格以保持每次测试迭代。试试这个:
Label label = new Label(0, sheet1.rows, fieldFromResponse);
使用 apache poi 试试这个。对 jxl 了解不多。
请忽略额外的导入。修改代码以满足您的要求:) - 这里每次都没有创建文件,sheet 等,因为这是您代码中的问题。而且也没有任何行增量器。
import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.*;
import java.util.Iterator;
// Pre requisite : create a property at testcase level as "rowIncrementer" with initial value 0 (0th row). This property will be used as row index
//similar could be used for column also (cell). But i haven't used it now :)
def rowInc = testRunner.testCase.getPropertyValue("rowIncrementer")
rowInc = Integer.parseInt(rowInc)
// accessing existing file
FileInputStream fIpStream= new FileInputStream(new File("C:\excl.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fIpStream);
// accessing your existing sheet
HSSFSheet worksheet = wb.getSheetAt(0);
Row row = worksheet.createRow(rowInc);
//Create a new cell in current row
Cell cell = row.createCell(0);
cell.setCellValue("NewValue"+rowInc.toString());
//cell.setCellValue(fieldFromResponse)
fIpStream.close(); //Close the InputStream
FileOutputStream output_file =new FileOutputStream(new File("C:\excl.xls"));
wb.write(output_file);
output_file.close();
// to increment the row for every loop -> will be incremented for every run of this teststep
rowInc = rowInc + 1
testRunner.testCase.setPropertyValue("rowIncrementer", rowInc.toString())
我正在尝试使用 soapui(groovy 脚本)自动执行 Web 服务。 我有以下测试步骤:
- 数据源(从 excel 数据源读取行)
- 属性
- SOAP 步骤
- 将 SOAP REQ-RES 捕获为 xml 个文件
- 使用 xml 生成 Excel 报告 从响应解析的标签值
- Looper(迭代测试用例 数据源 excel 文件中的总行数)
我已成功创建框架,但卡在第 5 步。
步骤 5 成功执行,但创建的报告 excel 文件仅包含最后一次测试迭代的响应数据。每次迭代都会创建一个新工作簿,该工作簿会被下一次迭代覆盖。
请提出更改建议,以实现在 excel sheet
中为每次迭代追加响应数据的功能我正在使用 jxl api 使用以下代码编写已解析的 xml 数据:
import jxl.*;
import com.eviware.soapui.support.XmlHolder
import jxl.write.*;
// create an excel workbook
WritableWorkbook workbook1=Workbook.createWorkbook(newFile("/Users/anant/Downloads/GroovyTest/report.xls"));
// create a sheet in the workbook
WritableSheet sheet1 = workbook1.createSheet("Report Worksheet", 0);
// Get the data to be added to the report
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder("divide#response")
def fieldFromResponse = holder.getNodeValue("//n:divideResponse/n:Result")
// create a label
Label label = new Label(0, 0, fieldFromResponse);
log.info fieldFromResponse
// Add the label into the sheet
sheet1.addCell(label);
workbook1.write();
workbook1.close();
每次执行时,它都会将 fieldFromResponse
写入单元格 A:1(第 0 列,第 0 行)。这就是您只看到最后一次测试迭代的原因。
您需要每次写入不同的单元格以保持每次测试迭代。试试这个:
Label label = new Label(0, sheet1.rows, fieldFromResponse);
使用 apache poi 试试这个。对 jxl 了解不多。 请忽略额外的导入。修改代码以满足您的要求:) - 这里每次都没有创建文件,sheet 等,因为这是您代码中的问题。而且也没有任何行增量器。
import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.*;
import java.util.Iterator;
// Pre requisite : create a property at testcase level as "rowIncrementer" with initial value 0 (0th row). This property will be used as row index
//similar could be used for column also (cell). But i haven't used it now :)
def rowInc = testRunner.testCase.getPropertyValue("rowIncrementer")
rowInc = Integer.parseInt(rowInc)
// accessing existing file
FileInputStream fIpStream= new FileInputStream(new File("C:\excl.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fIpStream);
// accessing your existing sheet
HSSFSheet worksheet = wb.getSheetAt(0);
Row row = worksheet.createRow(rowInc);
//Create a new cell in current row
Cell cell = row.createCell(0);
cell.setCellValue("NewValue"+rowInc.toString());
//cell.setCellValue(fieldFromResponse)
fIpStream.close(); //Close the InputStream
FileOutputStream output_file =new FileOutputStream(new File("C:\excl.xls"));
wb.write(output_file);
output_file.close();
// to increment the row for every loop -> will be incremented for every run of this teststep
rowInc = rowInc + 1
testRunner.testCase.setPropertyValue("rowIncrementer", rowInc.toString())