使用 SOAPUI 中的 groovy 步骤为迭代 3 次的自动化测试用例编写 excel 报告

Write excel report using groovy step in SOAPUI for an automated Test Case which iterates 3 times

我正在尝试使用 soapui(groovy 脚本)自动执行 Web 服务。 我有以下测试步骤:

  1. 数据源(从 excel 数据源读取行)
  2. 属性
  3. SOAP 步骤
  4. 将 SOAP REQ-RES 捕获为 xml 个文件
  5. 使用 xml 生成 Excel 报告 从响应解析的标签值
  6. 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())