如何使用属性在testCases之间传递Map

时间:2016-06-21 12:02:02

标签: groovy soapui ready-api

我想使用Groovy在SOAPUI中执行以下操作:

在TestCase1中从数据库中选择值(姓氏,名字),并使用动态值创建Mapdef Map = [Login :"$Login", Nom: "$Nom"]

我需要将我的地图转移到另一个TestCase,为此 我试图将我的地图放入属性中:

testRunner.testCase.setPropertyValue( "Map", Map)

但我有错误:

  

groovy.lang.MissingMethodException:没有方法签名:   com.eviware.soapui.impl.wsdl.WsdlTestCasePro.setPropertyValue()是   适用于参数类型:(java.lang.String,   java.util.LinkedHashMap)值:[OuvInfoPersoMap,   [登录:dupond0001,Nom:Dupond]]可能的解决方案:   setPropertyValue(java.lang.String,java.lang.String),   行中的getPropertyValue(java.lang.String)错误:123

我在互联网上发现了一些建议使用metaClass groovy属性

的帖子
context.testCase.metaClass.map = Map
log.info context.testCase.map

但在我的情况下,我认为不够。

我希望能够使用以下方法将地图传递给Testcase2:

createMap = testRunner.testCase.testSuite.project.testSuites.testCases["TestCase1"] 
createMap.map

希望你能帮助我解决这个问题。

感谢提前

1 个答案:

答案 0 :(得分:1)

由于@SiKing在评论中正确解释,setPropertyValue方法需要String作为属性名称和属性值。

请注意,正如@Rao建议的那样, testCase 执行应该是独立的,但从技术角度来看,这可能是你所要求的。

因此,您的案例的可能解决方案是在第一个 testCase 中将Map序列化为String,以便可以使用setPropertyValue(Strig propertyName, String value)方法进行保存,然后在第二个 testCase 反序列化它,像下面的代码一样必须工作:

TestCase 1

使用inspect() method序列化地图并将其另存为属性:

def map = ['foo':'foo','bar':'bar', 'baz':'baz']
testRunner.testCase.setPropertyValue('map',map.inspect())

TestCase2

使用Eval.me(String exp):反序列化String属性:

// get the first testCase
def testCase1 = testRunner.testCase.testSuite.testCases["TestCase1"] 
// get the property
def mapAsStr = testCase1.getPropertyValue('map')
// deserialize the string as map
def map = Eval.me(mapAsStr)
assert map.foo == 'foo'
assert map.bar == 'bar'
assert map.baz == 'baz'