Robot测试中因字符串含 导致比较失败的问题咨询
解决Robot Framework字符串比较失败与
\r字符问题 首先,你的核心思路(去除\r)是对的,但关键字调用的语法错误导致了第一个报错,另外还有更高效的处理方式。
为什么会出现\r字符?
从Docker容器执行MySQL命令返回的结果带\r(回车符),是因为跨终端环境的换行格式差异:Windows/DOS风格换行是\r\n,而Linux是\n,MySQL在这种场景下输出的结果附带了多余的回车符。
你的错误根源
你调用Fetch From Left的语法不符合Robot Framework的规范——关键字和参数、参数之间必须用空格分隔,不能连写在一起。正确的写法应该是:
${REQ_ID}= Fetch From Left ${REQ_ID} \r
(注意:变量与关键字之间、参数之间的空格,\r不需要加引号)
不过,Fetch From Left是截取到指定字符的左侧内容,虽然可行,但还有更通用的方案:
推荐的三种解决方案
1. 用String Strip一键移除空白字符(最推荐)
String Strip可以直接清除字符串首尾的所有空白字符(包括\r、\n、空格等),完全适配你的场景:
${REQ_ID}= String Strip ${REQ_ID}
这种方法不管是\r还是其他意外的空白字符,都能一次性处理,比截取更稳妥。
2. 正确使用Fetch From Left
如果你偏好这种截取方式,确保语法正确即可:
${REQ_ID}= Fetch From Left ${REQ_ID} \r
它会截取到第一个\r出现的位置之前的内容,刚好去掉末尾的回车符。
3. 从Docker命令源头解决
在获取数据的阶段就过滤掉\r,避免后续处理。修改Docker命令,用tr命令移除回车符:
docker exec -it 60493033cec6 /bin/sh -c 'mysql -uroot -ppassword -Bse "use requestdb; select REQUEST_ID from infra_active_requests limit 1;" | tr -d "\r"'
这样得到的req_id变量就不会带\r,Robot测试里无需额外处理。
验证字符串差异的小技巧
如果还是不确定两个字符串是否真的相同,可以用日志输出或长度检查来排查:
# 输出原始内容,查看隐藏字符 Log ${result} Log ${REQ_ID} # 对比长度,判断是否有多余字符 ${len_result}= Get Length ${result} ${len_req_id}= Get Length ${REQ_ID} Log "Result长度: ${len_result}, REQ_ID长度: ${len_req_id}"
通过这些日志就能直观看到两个字符串的差异了。
内容的提问来源于stack exchange,提问作者Shinu John
相关产品推荐
相关产品推荐

