问题陈述:在“脚本断言”步骤中,未通过测试步骤并在文件中写入内容。
描述:我在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
答案 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()
希望这有用。