问题语句:我们需要一种将二维列表(或数组(从一个groovy脚本传递到其他脚本的方法(以其他脚本中的多个db2表宣称值]。p>一些背景:步骤1:基于我们的输入XML有效载荷,我们在二维列表中捕获节点(和子元素(的列表[] [] []。[完毕]步骤2:现在,我们想使用此列表中每个列表中的值对DB2表中的值进行断言[也完成了,但是将Step1和Step2都保持在同一groovy脚本中]。
我们想要的是能够通过步骤2中的步骤1传递2二维列表。特别重要的是,因为我们有多个表,并且我们不想在一个大型groovy脚本中添加所有表步骤,也不想在每个db2 validataion脚本中复制step1代码。
我们阅读了有关从测试案例级别上列表设置每个元素值的内容,然后重建阵列,但是由于(变化&(列表元素的巨大尺寸(成千上万个(,我们犹豫要使用该方法。问题是:有什么干净的方法可以实现这一目标吗?
谢谢!
您知道早期解决方案的限制,如果运行测试用例,则只能使用该解决方案(在Groovy脚本之间共享对象(,并且如果单个步骤为运行。
在这里,我想提供一种方法,该方法通过使用Groovy的元编程来实现。
在脚本1 中,具有以下代码:
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase
WsdlTestCase.metaClass.myList = [1,2,3,4,5]
在脚本2 中,具有以下代码:
log.info "From script 2: ${context.testCase.myList}"
assert [1,2,3,4,5] == context.testCase.myList
如果运行各个步骤,以上甚至有效。希望这很有帮助。
编辑:开始理解,用户需要反复更新列表,并且使用MetaClass用户无法更新列表。这是替代方案:
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase
WsdlTestCase.metaClass.myObject = new Expando(myList: [1,2,3,4,5])
log.info "list initialized: ${context.testCase.myObject.myList}"
WsdlTestCase.metaClass.myObject = new Expando(myList: [1,2,3,4,5,6,7])
log.info "list updated: ${context.testCase.myObject.myList}"
您可以使用context
这是真正的工作Groovy Script
步骤。
step1:
def array = ['Kyiv', 'Boryspil', 'Kharkiv', "L'Viv", "Odesa"]
context.setProperty('cities', array)
log.info( 'script1: '+array )
step2:
def array = context.getProperty('cities')
log.info( 'script2: '+array )
assert array.size()>0
注意:
如果您只跑一步,那么绝对会有 独立背景。
但是,如果您运行了整个测试柜,那么将共享上下文 对于整个测试柜。
您可以在测试案例窗口中使用
Run from here
上下文菜单从确切的步骤运行。