如何在 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 "" 传递给 sqlcmd。在 Robot Framework 中,我尝试了以下语法:

|$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 中所有测试用例中使用的最失败的关键字创建报告?

如何使用 Robot Framework 从测试套件运行特定的测试用例

Robot Framework安装

python+robot framework接口自动化测试

python+robot framework接口自动化测试