断言语

时间:2017-06-01 14:55:40

标签: groovy soapui assertion

问题陈述:在“脚本断言”步骤中,未通过测试步骤并在文件中写入内容。

描述:我在SoapUI中使用脚本断言。我正在验证API响应,如果成功,则命中DB并获取值,如果API和DB值的响应不匹配,则写入文件并使测试步骤失败 - 如果匹配,则不执行任何操作。

我当前的代码,写入文件,但它不会使测试步骤失败。

def response = "test:testrunnwer"
if (status == "200 OK")
        {
            def splitResponse = (response.split(':',2))
            def finalResult = splitResponse[1].substring(2,splitResponse[1].length()-3)
                def sql = Sql.newInstance(context.expand( '${#Project#dbName}' ), context.expand( '${#Project#dbUser}' ), context.expand( '${#Project#dbPassword}' ), context.expand( '${#Project#sqlDriver}' ))
                sql.eachRow('select <<column_name>> as result from <<table_name>>') {
                    rw -> if (!(rw.result == finalResult)){
                            wfFail.append(rawRequest+"  "+status+"  "+splitResponse[1]+"\r\n")
                        }
                    }
                sql.close()
            }

testRunner.fail()在这里不起作用。我在某处读过“脚本断言”中无法访问testRunner

我尝试的其他方法是:

sql.eachRow(context.expand( '${emarketingDataTagsList#SQLquery}' )) {
                    rw -> assert(rw.result == finalResult) : wfFail.append(rawRequest+" "+status+"  "+splitResponse[1]+"\r\n")
                    }

这也不会产生结果(步骤失败,但文件中没有写入任何内容),我得到了这个信息 enter image description here

1 个答案:

答案 0 :(得分:0)

  

在断言声明后执行操作

如果断言通过,该操作将起作用。否则,它会因断言失败时停止执行而失败。

有另一种方法可以实现这一目标。这里使用if..else代替assert

说:

//Doing negative comparison Since nothing to do when equal
if (rw.result != finalResult) { 
 wfFail.append(rawRequest+" "+status+"  "+splitResponse[1]+"\r\n")
}
//Do other stuff or repeach eachRow of sql
//After completion
if(wfFail.toString()) {
  threw new Error(wfFail.toString()
}
  

testRunner.fail()在这里不起作用。我在某处读过在Script Assertion中无法访问testRunner。

这是正确的。 testRunner对象在 Groovy脚本测试步骤中初始化,但不在脚本断言中初始化。 但是,您可以在下面使用相同的内容:

更改:testRunner.fail()
context.testRunner.fail()

希望这有用。