2017-03-31 64 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