RobotFramework执行Python脚本时如何将test.py日志输出到独立文件
Robot Framework 捕获Python脚本自定义logger日志的解决方案
你之前只配置
stdout参数无法捕获自定义logger输出,核心原因是Python默认的logging模块生成的日志默认输出到标准错误流(stderr),而非标准输出流(stdout),只有print()语句默认输出到stdout,所以单独捕获stdout会漏掉日志内容。
方案1:调整Start Process参数,同时捕获标准输出和错误流
直接在Start Process关键字的参数中同时配置stdout和stderr,或将stderr合并到stdout:
Test Case # 合并stdout和stderr到同一个日志文件 Start Process python ../Scripts/test.py ... stdout=/path/to/test_full.log ... stderr=STDOUT ... shell=True # 也可以分开存储两个流的内容 # Start Process python ../Scripts/test.py # ... stdout=/path/to/test_stdout.log # ... stderr=/path/to/test_stderr.log
方案2:修改Python脚本的logging配置
如果不想改测试用例,可以直接在test.py中调整自定义logger的输出目标:
方式A:强制日志输出到stdout
import logging import sys # 配置root logger输出到stdout,自定义logger如果继承root配置也会生效 logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", stream=sys.stdout ) # 如果是自定义的独立logger,单独添加Handler即可 custom_logger = logging.getLogger("my_custom_logger") handler = logging.StreamHandler(sys.stdout) custom_logger.addHandler(handler)
方式B:直接配置日志输出到指定文件
import logging logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", filename="/path/to/test.log" )
方案3:通过shell命令重定向所有输出
直接在执行的Python命令后加重定向语法,一次性捕获所有流输出:
Test Case Start Process python ../Scripts/test.py > /path/to/test.log 2>&1 ... shell=True
注意事项
- 做diff校验前建议先清空历史日志文件,或每次生成带唯一标识的日志文件,避免旧内容干扰校验结果
- 使用shell相关的语法(比如重定向符号、管道)时,必须给
Start Process加上shell=True参数,否则语法不生效
内容的提问来源于stack exchange,提问作者Skeol
相关产品推荐
相关产品推荐

