如果任何断言失败,请保存测试用例属性

Save test case properties if any of the assertions fail

如果任何断言在此 groovy 脚本步骤中失败,如何保存测试用例属性?

下面是示例代码:

// 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

这里是 Groovy Script,它比较给定的属性集,并在任何断言失败时将属性写入给定文件。

  • 您需要更改 属性 文件名的值以存储变量 propFileName 变量。
  • 如果需要,添加更多要以 key:value 对格式声明的属性
//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}"
}