如何在 Robot Framework 测试用例的命令行参数中传递 Tab?
Posted
技术标签:
【中文标题】如何在 Robot Framework 测试用例的命令行参数中传递 Tab?【英文标题】:How to pass Tab in a command line argument in a Robot Framework test case? 【发布时间】:2015-11-20 00:14:32 【问题描述】:我通过 ssh 从 Robot Framework 测试用例中查询 SQL Server 表,并希望在查询结果中使用 Tab 作为分隔符,因此我尝试将选项 -s "
|$result =|run process|ssh|admin@$SRV_IP|sqlcmd|-S|.\\\\SQLEXPRESS|-d|$DB_NAME|-s|\t|-W|-Q|"select ..."|
但显然 \t 序列没有像我在日志中看到的那样扩展为 Tab 字符
10:47:32.411 INFO Starting process: ['ssh', 'admin@192.168.77.129', 'sqlcmd', '-S', '.\\\\SQLEXPRESS', '-d', 'test_main', '-s', '\t', '-W', '-Q', '"select ...;"']
并在stderr包含的命令执行后
Sqlcmd:'-s':缺少参数。进入 '-?'寻求帮助。
我也尝试用\x09 代替\t,但是\t 还是出现在日志中。 Tab 的语法是什么,以便在将其作为命令行参数传递给进程时展开?
我假设我可以通过指定 shell=True 并将整个命令行写入一个字符串来做到这一点,但是对于 Python 语法手动转义字符一次,对于 shell 语法手动转义两次变得很麻烦,所以我不会立即去这边。
【问题讨论】:
您是否尝试过添加额外的`s? The backslash is removed by robot before the command line is run. Perhaps using
\\t` 会起作用,因为机器人会转换\` to a single
`,这样shell 就会看到\t
。你可能需要更多的反斜杠,我不知道run process
在幕后做什么。
您 100% 正确,\\\t
(三个反斜杠)是我问题的答案,尽管我不太明白为什么。非常感谢。
【参考方案1】:
解决方案是添加更多反斜杠。第一个反斜杠早在 sqlcmd 看到它之前就被 Robot Framework 吃掉了。你可能需要两个反斜杠,你可能需要三个或四个。这取决于在命令最终执行之前还有什么替换。由于您有调用 sqlcmd 的机器人框架调用 ssh,因此您可能需要几个。
虽然反斜杠的数量是确定的,但经验告诉我,有时最简单的方法就是不断添加更多,直到它起作用。
【讨论】:
以上是关于如何在 Robot Framework 测试用例的命令行参数中传递 Tab?的主要内容,如果未能解决你的问题,请参考以下文章
学习使用Robot Framework自动化测试框架——简单组合测试例子
是否可以为 Robot Framework 中所有测试用例中使用的最失败的关键字创建报告?