早上好,
我很抱歉,但我被困在RobotFramework上。 我目前正在尝试将 JSON 中的系统输出与预期的输出进行比较。
预期的 JSON 输出,采用机器人框架格式:
${expected_output}= Catenate SEPARATOR=n
... "id": "AAAAA-2017-07-21",
... "version": "2",
... "creationDateTime": "1500636720",
... "passengers": {
... "1": {
... "names": [{
... "firstName": "TOTO",
... "lastName": "TUTU"
... }],
... },
... "2": {
... "id": "1",
... "names": [{
... "firstName": "TATA",
... "lastName": "TUTU"
... }],
... }
... },
执行以下操作效果很好,
Should Be Equal As Integers ${output.rc} 0
Should Be Equal As Strings ${output.stdout} ${expected_output}
Should Match Regexp ${output.stdout} "(names|1)"
但我的观点是,我希望能够解析多行,例如,我只想比较第一个乘客信息,我真的不关心输出消息的其余部分。
... "1": {
... "names": [{
... "firstName": "TOTO",
... "lastName": "TUTU"
... }],
... },
我只想确保在我的整个消息中,上面的行是正确的,而不是检查我的消息的其余部分。
我真的不知道该怎么做,我已经看到我可以使用(?m(进行多行检查, 但我不知道如何使用它,它根本不起作用:(
应该是这样的:
Should Match Regexp (?m) ... "1": {
(?m) ... "names": [{
(?m) ... "firstName": "TOTO",
(?m) ... "lastName": "TUTU"
(?m) ... }],
(?m) ... },
我完全迷路了,你能帮帮我吗?
提前感谢, 问候。 托马斯
如果您要获取结构化数据,则正则表达式是错误的工具。
您不会说您使用哪个库来获取 JSON 数据。库很有可能有办法将 JSON 数据转换为 python 对象。例如,请求库允许您将输出转换为带有类似${result.json()}
的 python 对象。
将 JSON 对象转换为真实对象后,您可以使用机器人的扩展变量语法直接处理数据的任何部分。
以下示例使用 python 的 json 解码器将实际值转换为对象,然后验证第一位乘客的名字:
${actual}= evaluate json.loads('''${output.stdout}''') json
Should be equal ${actual["passengers"]["1"]["names"][0]["firstName"]} TOTO
您可以使用相同的技术来比较整个字典,方法是将预期值设置为要比较的值
${expected}= Catenate
... {
... "names": [{
... "firstName": "TOTO",
... "lastName": "TUTU"
... }]
... }
${expected}= evaluate json.loads('''${expected}''') json
${actual}= evaluate json.loads('''${output.stdout}''') json
Dictionaries should be equal ${actual["passengers"]["1"]} ${expected}
注意:Dictionaries should be equal
来自收藏库