testing - 在发生错误的情况下附加进程 stderr

标签 testing logging robotframework stderr

我在单个可执行文件上运行一堆集成测试。该程序通过其返回代码指示错误情况,并可能将一些(不同但仍然有用的)输出打印到 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/

相关文章:

python - 机器人框架测试不运行

textarea - 无法通过机器人框架从文本区域获取文本

testing - 最有效、最现实的免费网络应用程序负载测试器?

c# - 如何在 C# 中加载我的测试数据?

unit-testing - 如何对与 Elasticsearch 交互的 go 代码进行单元测试

java - 定义 Java fatal error 日志在运行时的位置

java - 有没有办法告诉java总是创建一个新实例而不是实习

javascript - 单独的信息和错误日志

java - Vert.X SLF4J 日志记录

python - 如何访问 Robot Framework 中的 Python 对象属性?