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(
;您没有为 row
和 col
变量定义任何类型;在你的循环 for(j=0;;j<cols;j++)
.
中有一个额外的 ;
- 要使用 jxl 获取总行数和列数,请改用
Sheet.getColumns()
and Sheet.getRows()
。
jxl.Cell
class 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()
}
}
请注意,我没有对其进行测试,但我想一旦更正后一定会起作用,请继续尝试。
当我尝试使用 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(
;您没有为row
和col
变量定义任何类型;在你的循环for(j=0;;j<cols;j++)
. 中有一个额外的 - 要使用 jxl 获取总行数和列数,请改用
Sheet.getColumns()
andSheet.getRows()
。 jxl.Cell
class 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()
}
}
请注意,我没有对其进行测试,但我想一旦更正后一定会起作用,请继续尝试。