我想使用Groovy在SOAPUI中执行以下操作:
在TestCase1中从数据库中选择值(姓氏,名字),并使用动态值创建Map
:def 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
希望你能帮助我解决这个问题。
感谢提前
答案 0 :(得分:1)
由于@SiKing在评论中正确解释,setPropertyValue
方法需要String
作为属性名称和属性值。
请注意,正如@Rao建议的那样, testCase 执行应该是独立的,但从技术角度来看,这可能是你所要求的。
因此,您的案例的可能解决方案是在第一个 testCase 中将Map
序列化为String
,以便可以使用setPropertyValue(Strig propertyName, String value)
方法进行保存,然后在第二个 testCase 反序列化它,像下面的代码一样必须工作:
使用inspect()
method序列化地图并将其另存为属性:
def map = ['foo':'foo','bar':'bar', 'baz':'baz']
testRunner.testCase.setPropertyValue('map',map.inspect())
使用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'