I have a Script Assertion that compares value A from the XML response to value B, C, and D. If Value A is equal to any of value B, C, or D then the assertion passes, else it fails.
// get the xml response
def response = messageExchange.getResponseContent()
// parse it
def xml = new XmlSlurper().parseText(response)
// find your node by name
def node = xml.'**'.find { it.name() == 'total-premium' }
// assert
(assert node.toString().matches("(36.476|38.395|40.315)\\d*"))
At the moment for a passed assertion I get this string in the log:
Step 1 [TestStep_0001] OK: took 2296 ms
And a failed assertion I get this string in the log:
-> [Script Assertion] assert node.toString().matches((36.476|38.395|40.315)\\d*") | | | | 37.6033658 false 37.6033658
As you can see it is a bit messy and I'm trying neaten up the test suite logs.
Is there a way to set customized response in the logs?
I'm not sure that this is what you're looking for, but you can customize your assert
passing a string as a message which will be displayed or logged when assert
fails.
Something like:
assert node.toString().matches("(36.476|38.395|40.315)\\d*"), 'Assert fail custom message'
This way when you execute the TestCase if the assert
fail in the log you will see this instead:
[Script Assertion] Assert fail custom message. Expression: node.toString().matches((36.476|38.395|40.315)\d*)
UPDATE BASED ON COMMENT:
You don't have a method to remove a part of the assert
message, if as shown in the previous solution the custom message using assert expression, 'custom fail message'
it's not enough for your case (since seems that you also want to remove Expression:
part in the result message); a possible solution to customize totally your message is to catch the java.lang.AssertionError
exception thrown by the assert
and print in the log the desired message:
def node = 3
try {
assert node.toString().matches("(36.476|38.395|40.315)\\d*")
} catch (AssertionError e) {
log.info "Your custom message without expression"
}