1

我想使用 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, [Login:dupond0001, Nom:Dupond]] 可能的解决方案:setPropertyValue(java.lang.String, java.lang.String), getPropertyValue(java.lang.String) 错误在第 123 行

我在互联网上发现了一些建议使用metaClassgroovy 属性的帖子

context.testCase.metaClass.map = Map
log.info context.testCase.map

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

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

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

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

谢谢提前

4

1 回答 1

1

正如@SiKing 在评论中正确解释的那样,setPropertyValue方法需要String属性名称和属性值。

请注意,正如@Rao 通常建议的那样,testCase执行应该是独立的,但是从技术上讲,尽管这样做,但可以按照您的要求进行操作。

因此,您的案例的一个可能解决方案是在第一个testCase中序列化Mapto String,以便可以保存 usingsetPropertyValue(Strig propertyName, String value)方法,然后在第二个testCase中对其进行反序列化,如下代码必须有效:

测试用例 1

inspect()使用方法序列化地图并将其保存为属性:

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

测试用例2

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

// 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'
于 2016-08-30T08:29:38.017 回答