解释这一行 testRunner.testCase.getTestStepByName
explain this line testRunner.testCase.getTestStepByName
我是 groovy.I 的新手,无法理解 testRunner 和 testCase 到底是什么?我知道我们为什么要使用 them.but 他们在这里的工作方式。
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
import java.lang.*
import java.io.*
def ac,dc,class1,cn,dd,fn,not
BufferedReader br= new BufferedReader (new FileReader (new File("C:\Users\Administrator\Desktop\data1.csv")))
def rows = br.readLines()
def rowSize = rows.size()
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("rows",rowSize.toString())
def i = Integer.parseInt(testRunner.testCase.getTestStepByName("MyProperties").getPropertyValue("count"))
if (i<rowSize)
{
String []row= rows[i].split(",")
dc=row[1]
ac=row[2]
class1=row[3]
cn=row[4]
dd=row[5]
not=row[6]
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("dc",dc)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("ac",ac)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("class1",class1)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("cn",cn)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("dd",dd)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("not",not)
}
testRunner
是一个特殊的对象,它 SOAPUI
放在上下文中以提供访问与测试执行直接相关的不同属性的能力。例如,您还要求访问 testCase
属性。在这种情况下,testCase
是一个 属性,它包含当前 运行 的测试对象,并允许您 "play" 使用它们。在 SOAPUI documentation 中,所有这些内容都得到了很好的解释。
除了关于代码的@tim_yates 评论之外,还可以考虑使用变量来保持代码的整洁和可读性,而不是一直使用 getter 访问相同的代码,事实上,您的代码可以重写如:
def ac,dc,class1,cn,dd,fn,not
def rows = new File("C:\Users\Administrator\Desktop\data1.csv").withReader{ it.readLines() }
def rowSize = rows.size()
def myProps = testRunner.testCase.getTestStepByName("MyProperties")
myProps.setPropertyValue("rows",rowSize.toString())
def i = Integer.parseInt(myProps.getPropertyValue("count"))
if (i<rowSize)
{
String [] row= rows[i].split(",")
// Note that array are 0-based index and your accessing directly
// the second position
dc=row[1]
ac=row[2]
class1=row[3]
cn=row[4]
dd=row[5]
not=row[6]
myProps.setPropertyValue("dc",dc)
myProps.setPropertyValue("ac",ac)
myProps.setPropertyValue("class1",class1)
myProps.setPropertyValue("cn",cn)
myProps.setPropertyValue("dd",dd)
myProps.setPropertyValue("not",not)
}
另一个改进可能是使用 属性 名称和值创建一个地图来迭代认为它设置 属性 值:
def ac,dc,class1,cn,dd,fn,not
def rows = new File("C:\Users\Administrator\Desktop\data1.csv").withReader{ it.readLines() }
def rowSize = rows.size()
def myProps = testRunner.testCase.getTestStepByName("MyProperties")
myProps.setPropertyValue("rows",rowSize.toString())
def i = Integer.parseInt(myProps.getPropertyValue("count"))
if (i<rowSize)
{
def values = rows[i].split(",")
// I start with "notUsed" since in original code [0] postion is not used
def names = ["notUsed","dc","ac","class1","cn","dd","not"]
// create a map an iterate over it
[names,values].transpose().collectEntries { it }.each{ name, value ->
myProps.setPropertyValue(name,value);
}
}
希望对您有所帮助,
我是 groovy.I 的新手,无法理解 testRunner 和 testCase 到底是什么?我知道我们为什么要使用 them.but 他们在这里的工作方式。
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
import java.lang.*
import java.io.*
def ac,dc,class1,cn,dd,fn,not
BufferedReader br= new BufferedReader (new FileReader (new File("C:\Users\Administrator\Desktop\data1.csv")))
def rows = br.readLines()
def rowSize = rows.size()
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("rows",rowSize.toString())
def i = Integer.parseInt(testRunner.testCase.getTestStepByName("MyProperties").getPropertyValue("count"))
if (i<rowSize)
{
String []row= rows[i].split(",")
dc=row[1]
ac=row[2]
class1=row[3]
cn=row[4]
dd=row[5]
not=row[6]
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("dc",dc)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("ac",ac)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("class1",class1)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("cn",cn)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("dd",dd)
testRunner.testCase.getTestStepByName("MyProperties").setPropertyValue("not",not)
}
testRunner
是一个特殊的对象,它 SOAPUI
放在上下文中以提供访问与测试执行直接相关的不同属性的能力。例如,您还要求访问 testCase
属性。在这种情况下,testCase
是一个 属性,它包含当前 运行 的测试对象,并允许您 "play" 使用它们。在 SOAPUI documentation 中,所有这些内容都得到了很好的解释。
除了关于代码的@tim_yates 评论之外,还可以考虑使用变量来保持代码的整洁和可读性,而不是一直使用 getter 访问相同的代码,事实上,您的代码可以重写如:
def ac,dc,class1,cn,dd,fn,not
def rows = new File("C:\Users\Administrator\Desktop\data1.csv").withReader{ it.readLines() }
def rowSize = rows.size()
def myProps = testRunner.testCase.getTestStepByName("MyProperties")
myProps.setPropertyValue("rows",rowSize.toString())
def i = Integer.parseInt(myProps.getPropertyValue("count"))
if (i<rowSize)
{
String [] row= rows[i].split(",")
// Note that array are 0-based index and your accessing directly
// the second position
dc=row[1]
ac=row[2]
class1=row[3]
cn=row[4]
dd=row[5]
not=row[6]
myProps.setPropertyValue("dc",dc)
myProps.setPropertyValue("ac",ac)
myProps.setPropertyValue("class1",class1)
myProps.setPropertyValue("cn",cn)
myProps.setPropertyValue("dd",dd)
myProps.setPropertyValue("not",not)
}
另一个改进可能是使用 属性 名称和值创建一个地图来迭代认为它设置 属性 值:
def ac,dc,class1,cn,dd,fn,not
def rows = new File("C:\Users\Administrator\Desktop\data1.csv").withReader{ it.readLines() }
def rowSize = rows.size()
def myProps = testRunner.testCase.getTestStepByName("MyProperties")
myProps.setPropertyValue("rows",rowSize.toString())
def i = Integer.parseInt(myProps.getPropertyValue("count"))
if (i<rowSize)
{
def values = rows[i].split(",")
// I start with "notUsed" since in original code [0] postion is not used
def names = ["notUsed","dc","ac","class1","cn","dd","not"]
// create a map an iterate over it
[names,values].transpose().collectEntries { it }.each{ name, value ->
myProps.setPropertyValue(name,value);
}
}
希望对您有所帮助,