excel 使用 soapui 免费版中的 groovy 脚本进行数据驱动测试

Data driven testing from excel using groovy scripting in soapui free version

当我尝试使用 groovy 和以下代码进行参数化时,我收到以下错误日志:

package org.codehaus.groovy.antlr.parser; 
import java.io.*; 
import jxl.*; 
import org.codehaus.groovy.antlr.parser.GroovyRecognizer; 

Workbook workbook = Workbook.getWorkbook(new File("D:\SOAPUI\ConversionRate.xls") 
Sheet sheet1 = workbook.getSheet("DataDriven"); 
row = sheet1.getRow(); col = sheet1.getColumns(); 
log.info "Row Count =" +row 
log.info "Column Count =" +col 
for(i=1;i<row;i++) { 
    for(j=0;;j<col;j++) { 
       def celsius = testRunner.tetCase.getStepByName("Properties") 
       cell var = sheet1.getCell(i,j) 
       log.info var.getContents() 
    } 
} 

注意:我已将所有 jar 和 jxl 放在 bin/ext 文件夹中。

org.codehaus.groovy.control.MultipleCompilationErrorsException:
startup failed: Script7.groovy: 1: unable to resolve class com.company.ui.test.SoapUI_T11001_StockConsSecurityCurBusiDate @ line 1, column    
                             ^
org.codehaus.groovy.syntax.SyntaxException: unable to resolve class com.company.ui.test.SoapUI_T11001_StockConsSecurityCurBusiDate @ line 1, column 1.
 at org.codehaus.groovy.ast.ClassCodeVisitorSupport.addError(ClassCodeVisitorSupport.java:148)  
 at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1206)
 at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:148)
 at org.codehaus.groovy.control.CompilationUnit.call(CompilationUnit.java:585)
 at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:832)
 at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:519)
 at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:495)
 at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:472)
 at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:292)
 at groovy.lang.GroovyShell.parseClass(GroovyShell.java:727)
 at groovy.lang.GroovyShell.parse(GroovyShell.ja`enter code here`va:739)
 at groovy.lang.GroovyShell.parse(GroovyShell.java:766)
 at groovy.lang.GroovyShell.parse(GroovyShell.java:757)
 at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.compile(SoapUIGroovyScriptEngine.java:141)
 at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:90)
 at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:148)
 at com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction.run(GroovyScriptStepDesktopPanel.java:274)
 at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
 at java.lang.Thread.run(Thread.java:619)
 1 error

Groovy testStep 没有自动完成功能,所以有时处理 class 方法和其他拼写错误有点痛苦......这个这就是为什么您可能无法使代码工作的原因。那么让我们开始吧,我将尝试列举错误:

  • 在 SOAPUI 中 Groovy testStep package 没有必要... 此外,对于您的情况,这肯定不是正确的: package org.codehaus.groovy.antlr.parser;
  • 你的代码中没有必要的import:

    // groovy add java.io.* by default
    import java.io.*
    // this is not used in your code
    import org.codehaus.groovy.antlr.parser.GroovyRecognizer
    
  • 还有一些错别字;第一行缺少 ) 以关闭 getWorkbook(;您没有为 rowcol 变量定义任何类型;在你的循环 for(j=0;;j<cols;j++).

  • 中有一个额外的 ;
  • 要使用 jxl 获取总行数和列数,请改用 Sheet.getColumns() and Sheet.getRows()
  • jxl.Cellclass start with upper case (Java convention for class name is CamelCase)
  • Sheet.getCell(int column, int row) 期望 column 位置作为第一个参数,而 row 作为第二个而不是相反。

因此,您更正的代码可能是:

import jxl.*

Workbook workbook = Workbook.getWorkbook(new File("D:/SOAPUI/ConversionRate.xls"))
Sheet sheet1 = workbook.getSheet("DataDriven")
def rows = sheet1.getRows()
def cols = sheet1.getColumns()
log.info "Row Count =" + rows 
log.info "Column Count =" + cols 
for(i=1;i<rows;i++) { 
    for(j=0;j<cols;j++) { 
       Cell cell = sheet1.getCell(j,i) 
       log.info cell.getContents() 
    } 
} 

请注意,我没有对其进行测试,但我想一旦更正后一定会起作用,请继续尝试。