2016-06-21 63 views
1

我想使用Groovy做以下的SOAPUI測試用例之間傳遞地圖:如何使用屬性

在TestCase1選擇值(姓,名)從數據庫中,並創建一個動態值Mapdef Map = [Login :"$Login", Nom: "$Nom"]

我需要我的地圖被轉移到另一個TestCase的,對於這個 我試圖把我的地圖到屬性:

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

但我有錯誤:

groovy.lang.MissingMethodException: No signature of method: com.eviware.soapui.impl.wsdl.WsdlTestCasePro.setPropertyValue() is applicable for argument types: (java.lang.String, java.util.LinkedHashMap) values: [OuvInfoPersoMap, [Login:dupond0001, Nom:Dupond]] Possible solutions: setPropertyValue(java.lang.String, java.lang.String), getPropertyValue(java.lang.String) error at line: 123

我在互聯網上找到了一些職位,建議使用metaClass常規屬性

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

但我不認爲它足夠的在我的情況。

我希望能夠通過使用地圖Testcase2:

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

希望你能幫助我解決這個問題。

感謝推進

+0

我不知道你的使用情況是什麼。測試用例應該是獨立的一般慣例。你能告訴你的用例是什麼嗎?另外,你只是想只有兩個值或更多?順便說一句,映射不能被設置爲測試用例屬性的值。 – Rao

+0

只有在您使用上下文的方式使用「第二個測試用例」的groovy腳本運行第一個測試用例時纔有可能。但不通過屬性。 – Rao

+0

而不是地圖,您可以將每個屬性設置爲字符串值。 – Rao

回答

1

由於@SiKing在評論正確地解釋,setPropertyValue方法需要和String的屬性名稱和屬性值。

請注意,@Rao建議一般testCase執行應該是獨立的,但從技術上講,這可能會做你所要求的。

因此,對於你的情況可能的解決方案是在第一測試用例序列化MapString,以便有可能使用setPropertyValue(Strig propertyName, String value)方法保存,然後在第二測試用例 deserialitze它,像後續代碼必須工作:

的TestCase 1

使用inspect() method序列化映射並將其保存爲一個屬性:

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

TestCase2

Deserialitze的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'