2017-03-31 63 views
-1

如果在此常規腳本步驟中任何斷言失敗時如何保存測試用例屬性?如果任何斷言失敗,請保存測試用例屬性

下面是示例代碼:

// define properties required for the script to run. 
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def dataFolder = groovyUtils.projectPath 

def vTIDAPI = testRunner.testCase.getPropertyValue("vTIDAPI") 
def vTIDDB = testRunner.testCase.getPropertyValue("vTIDDB") 
def RefAPI = testRunner.testCase.getPropertyValue("RefAPI") 
def RefDB = testRunner.testCase.getPropertyValue("RefDB") 
def AmountAPI = testRunner.testCase.getPropertyValue("AmountAPI") 
def AmountDB = testRunner.testCase.getPropertyValue("AmountDB") 
def CurrencyAPI = testRunner.testCase.getPropertyValue("CurrencyAPI") 
def CurrencyDB = testRunner.testCase.getPropertyValue("CurrencyDB") 


assert vTIDAPI == vTIDDB 
assert RefAPI == RefDB 
assert AmountAPI == AmountDB 
assert CurrencyAPI == CurrencyDB 
+0

上述腳本中的問題在哪裏?當任何斷言失敗時,是否要收集測試用例的所有屬性? – Rao

+0

是的,我只是想要收集所有屬性並將其存儲在文件中。我發佈了當前的代碼並刪除了我的嘗試版本,以便回答的人更容易提供解決方案的方法 – BruceyBandit

+0

http://chat.stackoverflow.com/rooms/139652/room-for- rao-and-bruceybandit – Rao

回答

1

這裏是一個確實比較給定的屬性,並在任何斷言失敗的Groovy Script,寫入性能到指定的文件。

  • 您需要更改要存儲的變量propFileName變量的屬性文件名的值。
  • 添加更多屬性,以在鍵的形式被斷言:值對格式,如果需要
//Provide/edit the file name to store properties 
def propFileName = '/tmp/testCase.properties' 

//Define the properties to be matched or asserted ; add more properties if needed 
def props = [ 'vTIDAPI':'vTIDDB', 'RefAPI':'RefDB', 'AmountAPI': 'AmountDB', 'CurrencyAPI': 'CurrencyDB'] 

/** 
* Do not edit beyond this point 
*/ 
def writeTestCasePropertiesToFile = { 
    //Get the test case properties as Properties object 
    def properties = context.testCase.properties.keySet().inject([:]){map, key -> map[key] = context.testCase.getPropertyValue(key); map as Properties} 
    log.info properties 
    assert properties instanceof Properties 
    properties?.store(new File(propFileName).newWriter(), null) 
} 

def myAssert = { arg1, arg2 -> 
    context.testCase.getPropertyValue(arg1) == context.testCase.getPropertyValue(arg2) ? null : "${arg1} value does not match with ${arg2}" 
} 
def failureMessage = new StringBuffer() 
props.collect{ null == myAssert(it.key, it.value) ?: failureMessage.append(myAssert(it.key, it.value)).append('\n')} 
if(failureMessage.toString()) { 
    log.error "Assertion failures:\n ${failureMessage.toString()}" 
    writeTestCasePropertiesToFile() 
    throw new Error(failureMessage.toString()) 
} else { 
    log.info 'Assertions passed' 
} 

編輯:基於所述OP評論

替換def myAssert = ...與下面的代碼片段。

def myAssert = { arg1, arg2 -> 
    def actual = context.testCase.getPropertyValue(arg1) 
    def expected = context.testCase.getPropertyValue(arg2) 
    actual == expected ? null : "${arg1} value does not match with ${arg2} - api ${actual} vs db ${expected}" 
} 
+0

再次像饒一樣再次感謝你。只是一個小問題。任何帶有'DB'的屬性最後都需要一個.toString()。replace(''','')作爲斷言,否則將失敗,因爲屬性值被引用引起。可以在代碼中包含這個嗎? – BruceyBandit

+0

您是否嘗試了上述解決方案?您看到什麼樣的失敗信息?如果與顯示的信息不同,您需要什麼? – Rao

+0

錯誤:vTIDAPI值與vTIDDB不匹配RefAPI值不匹配RefDB CurrencyAPI值與CurrencyDB不匹配 – BruceyBandit