【问题标题】:Groovy script error while reading Excel sheet in SOAPUI tool在 SOAPUI 工具中读取 Excel 工作表时出现 Groovy 脚本错误
【发布时间】:2018-11-26 03:03:18
【问题描述】:

我已经在 SOAP UI 工具中编写了 groovy 脚本来从 excel 表中读取值并执行 SOAP UI xml,但是每当我运行脚本时,我都会遇到以下错误,

请帮帮我。我不明白这里缺少什么。我也添加了所有的jar文件。

脚本是

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.util.*;
import org.apache.poi.ss.usermodel.*;
import java.io.*;

class ExcelReader {

  def readData() {
        def path = "D:\\test.xlsx";
        InputStream inputStream = new FileInputStream(path);
        Workbook workbook = WorkbookFactory.create(inputStream);
        Sheet sheet = workbook.getSheetAt(0);

        Iterator rowIterator = sheet.rowIterator();
        rowIterator.next()
        Row row;                      
        def rowsData = []
        while(rowIterator.hasNext()) {
             row = rowIterator.next()
             def rowIndex = row.getRowNum()
             def colIndex;
             def rowData = []
             for (Cell cell : row) {
                 colIndex = cell.getColumnIndex()
                  rowData[colIndex] = cell.getRichStringCellValue().getString();
             }                   
             rowsData << rowData
         }
         rowsData
  }
 }

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def myTestCase = context.testCase

ExcelReader excelReader = new ExcelReader();
List rows = excelReader.readData();
def d = []
Iterator i = rows.iterator();
while( i.hasNext()){
         d = i.next();
         myTestCase.setPropertyValue("Country Name", d[0])
         //myTestCase.setPropertyValue("To", d[1])      
         testRunner.runTestStepByName( "GetCitiesByCountry")
}

enter code here

错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:Script8.groovy:13:无法解析类 Workbook @ 第 13 行,第 18 列。 Workbook workbook = WorkbookFactory.create(inputStream); ^ org.codehaus.groovy.syntax.SyntaxException:无法在 org.codehaus.groovy.ast.ClassCodeVisitorSupport.addError(ClassCodeVisitorSupport.java:146) 在 org.codehaus.groovy.control 的第 13 行第 18 列解析类工作簿.ResolveVisitor.resolveOrFail(ResolveVisitor.java:222) 在 org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:232) 在 org.codehaus.groovy.control.ResolveVisitor.transformVariableExpression(ResolveVisitor.java:866) 在org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:634) at org.codehaus.groovy.control.ResolveVisitor.transformDeclarationExpression(ResolveVisitor.java:1003) at org.codehaus.groovy.control.ResolveVisitor.transform( ResolveVisitor.java:638) at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:139) at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40) at org.codehaus .groovy.ast.CodeVisitorSupport.visitBlockStat在 org.codehaus.groovy.control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1240) 在 org.codehaus.groovy.control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1240) 在 org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163) .groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport .java:112) 在 org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:166) 在 org.codehaus.groovy 的 org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:50)。 ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123) at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1055) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport .java:50) 在 org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1183) 在 org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:141) 在 org.codehaus.groovy。 control.CompilationUnit$10.call(CompilationUnit.java:632) at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:912) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:574 ) 在 org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:523) 在 groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:279) 在 groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:258)在 groovy.lang.GroovyShell.parseClass(GroovyShell.java:613) 在 groovy.lang.GroovyShell.parse(GroovyShell.java:652) 在 groovy.lang. GroovyShell.parse(GroovyShell.java:643) 在 com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.compile(SoapUIGroovyScriptEngine.j ava:148) 在 com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:93) 在 com.eviware.soapui.support.scripting.groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SourceFile:89)在 com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:149) 在 com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.java:274) ) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 在 java.lang.Thread.run(Unknown Source) 的 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) Script8.groovy: 14: 无法解决类 Sheet @ 第 14 行,第 15 列。 Sheet sheet = workbook.getSheetAt(0); ^ org.codehaus.groovy.syntax.SyntaxException:无法在 org.codehaus.groovy.ast.ClassCodeVisitorSupport.addError(ClassCodeVisitorSupport.java:146) 在 org.codehaus.groovy.control 的第 14 行第 15 列解析类工作表.ResolveVisitor.resolveOrFail(ResolveVisitor.java:222) 在 org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:232) 在 org.codehaus.groovy.control.ResolveVisitor.transformVariableExpression(ResolveVisitor.java:866) 在org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:634) at org.codehaus.groovy.control.ResolveVisitor.transformDeclarationExpression(ResolveVisitor.java:1003) at org.codehaus.groovy.control.ResolveVisitor.transform( ResolveVisitor.java:638) at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:139) at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40) at org.codehaus .groovy.ast.CodeVisitorSupport.visitBlockStateme nt(CodeVisitorSupport.java:35) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163) at org.codehaus.groovy.control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1240) at org.codehaus .groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport .java:112) 在 org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:166) 在 org.codehaus.groovy 的 org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:50)。 ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123) at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1055) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.ja va:50) 在 org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1183) 在 org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:141) 在 org.codehaus.groovy.control .CompilationUnit$10.call(CompilationUnit.java:632) 在 org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:912) 在 org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:574)在 org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:523) 在 groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:279) 在 groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:258) 在groovy.lang.GroovyShell.parseClass(GroovyShell.java:613) 在 groovy.lang.GroovyShell.parse(GroovyShell.java:625) 在 groovy.lang.GroovyShell.parse(GroovyShell.java:652) 在 groovy.lang.GroovyShell .parse(GroovyShell.java:643) 在 com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.compile(SoapUIGroovyScriptEngine.java :148) 在 com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:93) 在 com.eviware.soapui.support.scripting.groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SourceFile:89) 在com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:149) 在 com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.java:274)在 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Script8.groovy: 18: 无法解析类 Row @ 第 18 行,第 13 列。行行; ^ org.codehaus.groovy.syntax.SyntaxException:无法在 org.codehaus.groovy.ast.ClassCodeVisitorSupport.addError(ClassCodeVisitorSupport.java:146) 在 org.codehaus.groovy.control 的第 18 行第 13 列解析类行.ResolveVisitor.resolveOrFail(ResolveVisitor.java:222) 在 org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:232) 在 org.codehaus.groovy.control.ResolveVisitor.transformVariableExpression(ResolveVisitor.java:866) 在org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:634) at org.codehaus.groovy.control.ResolveVisitor.transformDeclarationExpression(ResolveVisitor.java:1003) at org.codehaus.groovy.control.ResolveVisitor.transform( ResolveVisitor.java:638) at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:139) at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40) at org.codehaus .groovy.ast.CodeVisitorSupport.visitBlockStatement (CodeVisitorSupport.java:35) 在 org.codehaus.groovy.control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1240) 在 org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163)。 groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101) java:112) at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:50) at org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:166) at org.codehaus.groovy.ast .ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123) at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1055) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java :50) 在 org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:141) 在 org.codehaus.groovy.control 的 org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1183)。 CompilationUnit$10.call(CompilationUnit.java:632) at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:912) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:574) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:523) 在 groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:279) 在 groovy.GroovyClassLoader.parseClass(GroovyClassLoader.java:258) 在 groovy .lang.GroovyShell.parseClass(GroovyShell.java:613) 在 groovy.lang.GroovyShell.parse(GroovyShell.java:625) 在 groovy.lang.GroovyShell.parse(GroovyShell.java:652) 在 groovy.lang.GroovyShell。解析(GroovyShell.java:643)在 com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.compile(SoapUIGroovyScriptEngine.java:1 48) 在 com.eviware.soapui.support.scripting.groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SourceFile:89) 在 com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:93) 在 com .eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:149) 在 com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.java:274) 在java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.lang.Thread.run(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) Script8.groovy: 25: 无法解析class Cell @ line 25, column 14. for (Cell cell : row) { ^ org.codehaus.groovy.syntax.SyntaxException: 无法解析 class Cell @ line 25, column 14. at org.codehaus.groovy.ast.ClassCodeVisitorSupport .addError(ClassCodeVisitorSupport.java:146) 在 org.codehaus.groovy.control.ResolveVisitor.resolve OrFail(ResolveVisitor.java:222) at org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:232) at org.codehaus.groovy.control.ResolveVisitor.visitForLoop(ResolveVisitor.java:1233) at org.codehaus .groovy.ast.stmt.ForStatement.visit(ForStatement.java:47) at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport .java:163)在 org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) 在 org.codehaus 的 org.codehaus.groovy.control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1240)。 groovy.ast.CodeVisitorSupport.visitWhileLoop(CodeVisitorSupport.java:46) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitWhileLoop(ClassCodeVisitorSupport.java:233) at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitWhileLoop(ClassCodeExpressionTransformer.java: 135)在 org.codehaus.groovy.ast.stmt.WhileStatement.visit(W hileStatement.java:39) 在 org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35) 在 org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163) 在 org.codehaus.groovy .control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1240) at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java :101) 在 org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:50) 在 org.codehaus.groovy.control 的 org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)。 ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:166) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123) at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1055) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50) 在 org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1183) 在 org.codehaus.groovy.control.ResolveVisitor.startResolving( ResolveVisitor.java:141) 在 org.codehaus.groovy.control.CompilationUnit$10.call(CompilationUnit.java:632) 在 org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:912) 在 org.codehaus。 groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:574) 在 org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:523) 在 groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:279) 在 groovy .lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:258) 在 groovy.lang.GroovyShell.parseClass(GroovyShell.java:613) 在 groovy.lang.GroovyShell.parse(GroovyShell.java:625) 在 groovy.lang.GroovyShell。解析(GroovyShell.java:652)在 groovy.lang.GroovyShell.parse(GroovyShell.java:643) 在 com.eviware.soapui.s upport.scripting.groovy.SoapUIGroovyScriptEngine.compile(SoapUIGroovyScriptEngine.java:148) 在 com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:93) 在 com.eviware.soapui.support.scripting。 com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:149) 的 com.eviware.soapui.impl.wsdl.panels.teststeps 的 groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SourceFile:89)。 GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.java:274) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread。运行(未知来源)4 个错误

【问题讨论】:

  • 你添加了 apache-poi jars 吗?
  • 清理你的导入!您可能只想使用usermodel.* 之一。

标签: groovy soapui


【解决方案1】:

$SOAPUI_HOME\bin\ext 中添加 apache-poi jar 并重新启动 SOAPUI 以加载它。如果错误再次发生,请检查 jars 是否正确(可能 jars 已损坏......)检查它们是否包含您需要的类 org.apache.poi.ss.usermodel.Workbookorg.apache.poi.ss.usermodel.Sheet 等等。

希望这会有所帮助,

【讨论】:

  • 是的,我已经添加了所有的罐子,但我仍然面临同样的问题
  • mmhh 很奇怪,可能与您的版本有关吗?我使用 SOAPUI 5.0.0 并使用您的代码在 $SOAPUI_HOME\bin\ext 中为 3.10 版添加 apache-poi jar,对我有用。
【解决方案2】:

在 $SOAPUI_HOME\bin\ext 中添加 poi-ooxml jar 并重新启动 SOAPUI。 WorkbookFactory 存在于提到的 jar 中。请查看poi components 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多