2016-10-20 82 views
1

我在SoapUI中有一個Groovy腳本,用於每個TestStep記錄天氣的步驟已通過或失敗。我希望Groovy腳本記錄出錯的斷言信息。SoapUI Groovy Script,log.info有關測試步驟運行的詳細信息。

import com.eviware.soapui.model.testsuite.Assertable.AssertionStatus 

def TestCase = testRunner.getTestCase() 
def StepList = TestCase.getTestStepList() 
StepList.each{ 
    // check that testStep has assertionStatus 
    // (for example groovy testSteps hasn't this property since 
    // there is no asserts on its) 
    if(it.metaClass.hasProperty(it,'assertionStatus')){ 
     if(it.assertionStatus == AssertionStatus.FAILED){ 
      log.info "${it.name} FAILED"  

     }else if(it.assertionStatus == AssertionStatus.VALID){ 
      log.info "${it.name} Passed" 
     }else if(it.assertionStatus == AssertionStatus.UNKNOWN){ 
      log.info "${it.name} UNKNOWN (PROBABLY NOT ALREADY EXECUTED)" 
     } 
    } 
} 

目前,我得到這樣的輸出:

Thu Oct 20 11:31:06 BST 2016:INFO:TestStep_0051 Passed 
Thu Oct 20 11:31:06 BST 2016:INFO:TestStep_0052 FAILED 
Thu Oct 20 11:31:06 BST 2016:INFO:TestStep_0053 Passed 

我想失敗的斷言爲什麼它更多的細節無法顯示該消息。它的失敗步步測試本身我得到的消息:

assert node.toString().matches("(0|175.238|0)\\d*")  | |   |  | |   false   | 132.497286826667   132.497286826667 

此外,當我運行這個Groovy腳本,會彈出一個窗口,其標題爲「信息」,這只是有一個黑色的背景和如此廣泛我似乎無法找到它的右側。有人知道這是什麼嗎?

回答

2

您可以嘗試修改代碼了一下,讓我解釋一下:

相反的一步步測試結果雖然metaClass上,你可以使用getAssertionList(),以避免問題訪問了一步步測試,所有的斷言只能訪問最後AssertionStatus的testSteps不包含斷言,您可以使用metaClass檢查此方法是否存在。

然後對於此列表上的每個斷言,您都可以檢查狀態,如果發生錯誤,可以使用getErrors()方法獲取錯誤消息。

最後,以避免其因爲默認情況下所產生的Groovy返回最後一個實例對象(在你的腳本StepList)和SOAPUI提示它的提示信息,你可以添加一個return語句返回任何結果,避免提示效果。

import com.eviware.soapui.model.testsuite.Assertable.AssertionStatus 

def TestCase = testRunner.getTestCase() 
def StepList = TestCase.getTestStepList() 
StepList.each{ 

    // check that this kind of testStep 
    // can contain assertions (avoid errors with groovy testSteps) 
    if(it.metaClass.respondsTo(it,"getAssertionList")){ 

     def assertions = it?.getAssertionList() 

     assertions?.each{ assertion -> 

      if(assertion?.getStatus() == AssertionStatus.FAILED){ 
       log.info "${it.name} FAILED" 
       assertion?.getErrors()?.each{ error -> 
       log.info "Error message ${error.getMessage()}" 
       } 
      }else if(assertion?.getStatus() == AssertionStatus.VALID){ 
       log.info "${it.name} Passed" 
      }else if(assertion?.getStatus() == AssertionStatus.UNKNOWN){ 
       log.info "${it.name} UNKNOWN (PROBABLY NOT ALREADY EXECUTED)" 
      } 
     } 
    } 
} 
return 
+0

令人驚歎的謝謝 – Ross

+0

@羅斯很高興幫助你':)' – albciff

相關問題