我在单个可执行文件上运行一堆集成测试。该程序通过其返回代码指示错误情况,并可能将一些(不同但仍然有用的)输出打印到 stderr。
我目前使用的流程库如下:
${result} = Run Process ${prog} ${src}
Should Be Equal As Integers ${result.rc} 0
这在成功测试的情况下工作正常,但在错误的情况下它不会产生任何有意义的信息。在测试失败的情况下,有没有办法将 stderr 流附加到日志文件?我不愿意为每个测试用例添加内容以免弄乱日志文件,但如果那是唯一的选择,我也希望得到有关如何以正统方式执行此操作的提示。
最佳答案
来自 Process documentation 处的文档,您可以将 stderr
重定向到一个文件:
标准输出和错误流
默认情况下,进程运行时会将它们的标准输出和标准错误流保存在内存中。这通常工作正常,但如果有大量输出,输出缓冲区可能会变满,程序可能会挂起。 此外,在 Jython 上,如果进程终止,写入这些内存缓冲区的所有内容都可能丢失。 为避免上述问题,可以使用 stdout 和 stderr 参数指定文件系统上的文件重定向输出的位置。如果其他进程或其他关键字需要以某种方式读取或操作输出,这也很有用。 给定的 stdout 和 stderr 路径是相对于当前工作目录的。给定路径中的正斜杠在 Windows 上会自动转换为反斜杠。 作为一项特殊功能,可以使用 stderr=STDOUT 将标准错误重定向到标准输出。 无论输出是否重定向到文件,都可以通过进程结束时返回的结果对象访问它们。命令应使用控制台编码写入输出,但如果需要,可以使用 output_encoding 参数配置输出编码。
例子:
${result} = Run Process program stdout=${TEMPDIR}/stdout.txt stderr=${TEMPDIR}/stderr.txt
Log Many stdout: ${result.stdout} stderr: ${result.stderr}
${result} = Run Process program stderr=STDOUT
Log all output: ${result.stdout}
请注意,创建的输出文件不会在测试运行后自动删除。如果需要,用户有责任删除它们。
关于testing - 在发生错误的情况下附加进程 stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44406216/