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

Groovy 如果任何断言失败,请保存测试用例属性,groovy,soapui,Groovy,Soapui,如果任何断言在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.getPrope

如果任何断言在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脚本
,它比较给定的属性集,并且在任何断言失败时,将属性写入给定的文件

  • 您需要更改要为变量
    propFileName
    variable存储的属性文件名的值
  • 如果需要,以key:value对格式添加更多要断言的属性
//提供/编辑文件名以存储属性
def propFileName='/tmp/testCase.properties'
//定义要匹配或断言的属性;如果需要,添加更多属性
def props=['vTIDAPI':'vTIDDB','RefAPI':'RefDB','amountpi':'AmountDB','CurrencyAPI':'CurrencyDB']
/**
*请勿编辑超过此点的内容
*/
def writeTestCasePropertiesToFile={
//将测试用例属性作为properties对象获取
def properties=context.testCase.properties.keySet().inject([:]){map,key->map[key]=context.testCase.getPropertyValue(key);映射为属性}
log.info属性
断言属性属性的实例
属性?.store(新文件(propFileName).newWriter(),null)
}
def myAssert={arg1,arg2->
context.testCase.getPropertyValue(arg1)=context.testCase.getPropertyValue(arg2)?null:“${arg1}值与${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“断言失败:\n${failureMessage.toString()}”
writeTestCasePropertiesToFile()
抛出新错误(failureMessage.toString())
}否则{
log.info“已传递断言”
}
编辑:基于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}"
}

上述脚本中的问题在哪里?当任何断言失败时,您是否希望收集测试用例的所有属性?是的,我只希望在收集时收集所有属性并将其存储在文件中。我发布了我的当前代码,并删除了我的尝试版本,这样回答者就可以更容易地提供解决此问题的方法。Bruceybandit,你有机会尝试下面提供的解决方案吗?像always Rao一样再次感谢你。只是一个简短的问题。任何结尾带有“DB”的属性都需要.toString().replace(“,”)最后,由于被引号包围的属性值,断言将在没有它的情况下失败。您知道如何将其包含在代码中吗?您是否尝试过上述解决方案?失败时会看到什么消息?如果与显示的不同,您希望看到什么?错误:vTIDAPI值与vTIDDB RefAPI值不匹配带有RefDB CurrencyAPI值的tch与CurrencyDBSo不匹配如果我记录错误,我会得到什么?这是我比较的一组属性的示例:CurrencyAPI=“GBP“CurrencyDB=GBP。很抱歉,结尾有API的属性包含引号。这是因为当我们从API中提取数据时,它们都包含引号,但从DB中它们没有收到一个错误,说明这一点:CurrencyAPI值与CurrencyDB-API“GBP”与DB GBP不匹配