2014-09-02 84 views
0

我是soapui測試的初學者。希望你能幫我解決這個問題。SoapUI:將屬性值傳遞給被調用的測試用例

在我的測試項目中,我有一個包含多個測試用例的測試套件。多個測試用例將啓動相同的測試用例。爲了運行這個測試用例,我需要將一些屬性值傳遞給這個測試用例。

我試圖通過兩種方式來實現這一點。但我都失敗了。

  1. 我試圖調用測試用例並在測試用例中設置所需的屬性。我從Groovy腳本開始測試用例。但是我找不到一個很好的例子來說明如何在被調用的測試用例中設置屬性。

  2. 我試圖在被調用的測試用例中獲取調用父測試用例的屬性值。它看起來像調用測試用例的父測試用例在運行測試用例的上下文中不可用。

測試的情況下,將調用相同的測試情況下,將並行運行。所以,我認爲這不是一個解決方案,首先設置屬性值,然後啓動測試用例,因爲它們將被同時運行的其他測試用例覆蓋。由於並行運行測試用例,因此對這些值使用測試套件屬性將不起作用。

我的測試項目看起來像這樣。

MyProject 
    TestSuite_APLtests 
     TestCase_user_01 
     Properties test step 
     Run_test <groovy script> 
     Step_01 
     ….. 
    TestCase_user_02 
     Properties test step 
     Run_test <groovy script> 
     Step_01 
     ….. 
    TestCase_General 
     Properties test step 
     POST sessions 
     Step_01 
     ….. 

每個「TestCase_user_」的「屬性測試步驟」包含在測試用例需要「TestCase_General」用戶和密碼,將每個測試情況不同。

def myTestSuite = testRunner.testCase.testSuite.project.getTestSuiteByName("TestSuite_APLtests") 
def myTestCase = myTestSuite.getTestCaseByName("TestCase_General") 
myTestCase.run(null, false) 

我如何添加到啓動測試情況來看評論的屬性用戶名和密碼: 在每個「TestCase_user_」測試案例「TestCase_General」的「RUN_TEST」常規腳本是以開始了嗎?

如果我嘗試在測試用例'TestCase_General'中使用groovy腳本獲取屬性值,我不知道如何確定哪個測試用例調用了'TestCase_General'。我在互聯網上發現了一些建議使用:context.getProperty("#CallingRunTestCaseStep#")來確定調用測試用例的帖子。但是這個值是空的。當我嘗試使用:context.hasProperty("#CallingRunTestCaseStep#")來檢查調用測試用例是否在上下文中可用時,這是錯誤的,所以這找不到調用測試用例。

有人可以告訴我什麼解決方案將是這個工作。

感謝,

+0

才澄清......你想知道如何在你的groovy腳本中運行之前設置你的testCase的屬性? – albciff 2014-09-04 06:55:14

+0

我在每個測試用例的屬性測試步驟中設置屬性'user'和'password'的值。在這些測試用例的Groovy腳本中,我將這個測試用例稱爲「TestCase_General」。在我開始測試用例的時刻,屬性'user'和'password'的值需要傳遞給測試用例'TestCase_General'中的屬性。我不知道如何將屬性從調用測試用例傳遞到被調用的測試用例。 – Deduur 2014-09-06 00:33:14

回答

3

您可以從常規腳本setPropertyValue(name,value)方法,如果您並行運行測試用例集測試用例的屬性,然而,這種性質像你說的都將被覆蓋每個測試用例調用TestCase_General。因此,不要使用setPropertyValue,您可以通過屬性通過WsdlTestCase.java類中的run(StringToObjectMap properties, boolean async)方法。你的Groovy代碼中調用TestCase_General可能是:

import com.eviware.soapui.support.types.StringToObjectMap 

// get test suite 
def myTestSuite = testRunner.testCase.testSuite.project.getTestSuiteByName("TestSuite_APLtests") 
// get your test case 
def myTestCase = myTestSuite.getTestCaseByName("TestCase_General") 
// set the user and password properties in the context 
context.setProperty("user","userTestCaseN") 
context.setProperty("password","passwordTestCaseN") 
// run the testCase passing the context 
def contextMap = new StringToObjectMap(context) 
myTestCase.run(contextMap,false); 

要訪問context性能在TestCase_General使用Groovy腳本驗證碼:

context.getProperty("userPassword") 

或者,如果你喜歡使用context.expand

context.expand('${#user}') 

請注意,使用#取決於您如何訪問屬性。

如果您還需要以這種方式${#propetryName}即SOAP測試請求您TestCase_General使用使用context屬性:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> 
    <Header/> 
    <Body> 
    <request> 
     <user>${#user}</user> 
    </request> 
    </Body> 
</Envelope> 

希望這有助於

+0

謝謝。我可以嘗試這種方式。但是,如果我平行運行測試用例,恐怕它不會起作用。如果在運行測試之前在測試用例中設置屬性值,這些測試用例是否會被另一個測試用例覆蓋?例如,測試用例1和測試用例2同時運行。他們使用不同的用戶和密碼並啓動TestCase_General。我認爲在這些測試用例的值被另一個測試用例設置後,值會被這些測試用例中的一個改變。或者我錯了,不會發生這種情況?我會嘗試一下,如果它能以這種方式工作的話。但也許有人知道一個很好的解決方案。 – Deduur 2014-09-09 21:42:18

+0

Hi @Deddur,首先我很抱歉沒有意識到你想要並行地執行你的測試,正如你所說的那樣,每個調用TestCase_General的TestCase都會覆蓋這些屬性。爲了平行運行,你必須使用你在問題中提出的上下文屬性。我更新我的答案以符合此要求。試試':)'。 – albciff 2014-09-17 22:51:16

+0

嗨@albciff謝謝你的解釋。我離開了一些日子,所以花了一些時間才能嘗試你的建議。我已經在互聯網上發現我必須使用上下文來解析屬性。但在這些解釋中,我錯過了我首先要在上下文中設置屬性。我做了一個錯誤的假設,即測試用例中使用的屬性已經是上下文的一部分。 用你解釋的方式完美的工作(Y)。 – Deduur 2014-09-21 13:35:01

相關問題