为什么即使使用 FailureHandling.CONTINUE_ON_FAILURE 测试用例也会停止
Why test case is stopped even if FailureHandling.CONTINUE_ON_FAILURE is used
我不明白为什么测试用例被停止,而我使用 FailureHandling_CONTINUE_ON_FAILURE
进入调用者。
调用方代码:
...
switch (testCaseName) {
case testCaseName:
WebUI.callTestCase(findTestCase(testCaseName), param, FailureHandling.CONTINUE_ON_FAILURE)
break
}
...
被调用方出错:
此错误发生在使用 WebUI.callTestCase(...)
调用的测试用例中
Caused by: com.kms.katalon.core.webui.exception.WebElementNotFoundException: Web element with id: ‘XXX’ located by ‘By.xpath: XXX’]’ not found
但是,如果我使用 FailureHandling_CONTINUE_ON_FAILURE
必须停止被调用者,而不是调用者,对吗?
感谢帮助
我能够部分重现该问题。我写了下面两个测试用例:
TC1:来电者
println ">>>> start caller"
if(!WebUI.callTestCase(findTestCase("Callee"), null, FailureHandling.OPTIONAL)){
println ">>>> success!"
}
println ">>>> end caller"
TC2:被叫方
println ">>>> start callee"
assert 0
这是我的控制台输出 FailureHandling.OPTIONAL
:
2019-07-03 12:43:41.851 DEBUG testcase.Caller - 1: println(">>>> start caller")
>>>> start caller
2019-07-03 12:43:41.855 DEBUG testcase.Caller - 2: if (!(callTestCase(findTestCase("Callee"), null, OPTIONAL)))
2019-07-03 12:43:41.934 INFO c.k.katalon.core.main.TestCaseExecutor - --------------------
2019-07-03 12:43:41.934 INFO c.k.katalon.core.main.TestCaseExecutor - CALL Test Cases/Callee
2019-07-03 12:43:42.086 DEBUG testcase.Callee - 1: println(">>>> start callee")
>>>> start callee
2019-07-03 12:43:42.087 DEBUG testcase.Callee - 2: assert 0
2019-07-03 12:43:42.095 ERROR c.k.katalon.core.main.TestCaseExecutor - ❌ Test Cases/Callee FAILED.
Reason:
Assertion failed:
assert 0
at Callee.run(Callee:18)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
....
2019-07-03 12:43:42.104 INFO c.k.katalon.core.main.TestCaseExecutor - END CALL Test Cases/Callee
2019-07-03 12:43:42.104 INFO c.k.katalon.core.main.TestCaseExecutor - --------------------
2019-07-03 12:43:42.109 WARN c.k.k.core.keyword.internal.KeywordMain - Unable to call Test Case 'Test Cases/Callee' (Root cause: com.kms.katalon.core.exception.StepFailedException: Call Test Case 'Test Cases/Callee' failed
at com.kms.katalon.core.keyword.builtin.CallTestCaseKeyword$_callTestCase_closure1.doCall(CallTestCaseKeyword.groovy:63)
....
Caused by: Assertion failed:
assert 0
at Callee.run(Callee:18)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
...
)
2019-07-03 12:43:42.110 DEBUG testcase.Caller - 1: println(">>>> success!")
>>>> success!
2019-07-03 12:43:42.111 DEBUG testcase.Caller - 3: println(">>>> end caller")
>>>> end caller
2019-07-03 12:43:43.067 INFO c.k.katalon.core.main.TestCaseExecutor - END Test Cases/Caller
因此,TC2 失败了,但是 WebUI.callTestCase()
抛出了一个异常,在日志中被解释为 WARN,所以 TC1通过了。
当我切换到 FailureHandling.CONTINUE_ON_FAILURE
时,这在日志中被解释为错误并且 TC1 和 TC2 都失败了.有关故障处理的更多信息 here.
我认为这是 Katalon Studio 中的错误。但是,我认为您可以使用 FailureHandling.OPTIONAL
作为获得所需结果的解决方法。
我不明白为什么测试用例被停止,而我使用 FailureHandling_CONTINUE_ON_FAILURE
进入调用者。
调用方代码:
...
switch (testCaseName) {
case testCaseName:
WebUI.callTestCase(findTestCase(testCaseName), param, FailureHandling.CONTINUE_ON_FAILURE)
break
}
...
被调用方出错:
此错误发生在使用 WebUI.callTestCase(...)
Caused by: com.kms.katalon.core.webui.exception.WebElementNotFoundException: Web element with id: ‘XXX’ located by ‘By.xpath: XXX’]’ not found
但是,如果我使用 FailureHandling_CONTINUE_ON_FAILURE
必须停止被调用者,而不是调用者,对吗?
感谢帮助
我能够部分重现该问题。我写了下面两个测试用例:
TC1:来电者
println ">>>> start caller"
if(!WebUI.callTestCase(findTestCase("Callee"), null, FailureHandling.OPTIONAL)){
println ">>>> success!"
}
println ">>>> end caller"
TC2:被叫方
println ">>>> start callee"
assert 0
这是我的控制台输出 FailureHandling.OPTIONAL
:
2019-07-03 12:43:41.851 DEBUG testcase.Caller - 1: println(">>>> start caller")
>>>> start caller
2019-07-03 12:43:41.855 DEBUG testcase.Caller - 2: if (!(callTestCase(findTestCase("Callee"), null, OPTIONAL)))
2019-07-03 12:43:41.934 INFO c.k.katalon.core.main.TestCaseExecutor - --------------------
2019-07-03 12:43:41.934 INFO c.k.katalon.core.main.TestCaseExecutor - CALL Test Cases/Callee
2019-07-03 12:43:42.086 DEBUG testcase.Callee - 1: println(">>>> start callee")
>>>> start callee
2019-07-03 12:43:42.087 DEBUG testcase.Callee - 2: assert 0
2019-07-03 12:43:42.095 ERROR c.k.katalon.core.main.TestCaseExecutor - ❌ Test Cases/Callee FAILED.
Reason:
Assertion failed:
assert 0
at Callee.run(Callee:18)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
....
2019-07-03 12:43:42.104 INFO c.k.katalon.core.main.TestCaseExecutor - END CALL Test Cases/Callee
2019-07-03 12:43:42.104 INFO c.k.katalon.core.main.TestCaseExecutor - --------------------
2019-07-03 12:43:42.109 WARN c.k.k.core.keyword.internal.KeywordMain - Unable to call Test Case 'Test Cases/Callee' (Root cause: com.kms.katalon.core.exception.StepFailedException: Call Test Case 'Test Cases/Callee' failed
at com.kms.katalon.core.keyword.builtin.CallTestCaseKeyword$_callTestCase_closure1.doCall(CallTestCaseKeyword.groovy:63)
....
Caused by: Assertion failed:
assert 0
at Callee.run(Callee:18)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
...
)
2019-07-03 12:43:42.110 DEBUG testcase.Caller - 1: println(">>>> success!")
>>>> success!
2019-07-03 12:43:42.111 DEBUG testcase.Caller - 3: println(">>>> end caller")
>>>> end caller
2019-07-03 12:43:43.067 INFO c.k.katalon.core.main.TestCaseExecutor - END Test Cases/Caller
因此,TC2 失败了,但是 WebUI.callTestCase()
抛出了一个异常,在日志中被解释为 WARN,所以 TC1通过了。
当我切换到 FailureHandling.CONTINUE_ON_FAILURE
时,这在日志中被解释为错误并且 TC1 和 TC2 都失败了.有关故障处理的更多信息 here.
我认为这是 Katalon Studio 中的错误。但是,我认为您可以使用 FailureHandling.OPTIONAL
作为获得所需结果的解决方法。