pytest + yaml 框架 -9.logging日志输出和保存

2023-01-03 13:58:34 浏览数 (1)

前言

pytest 运行yaml 文件默认在控制台显示简短的信息,当我们需要排查问题时,需开启日志追踪更多的信息。

logging 日志开启

pytest 的日志分2个部分:

  • console 控制台输出的日志
  • log_file 保存到本地文件的日志

本插件默认情况下会记录运行日志保存在项目根目录logs下,以当前时间保存txt文本日志内容。 日志默认保存info级别。 console 控制台默认不输出日志

开启 console 控制台日志

控制台直接运行 pytest 是不会用日志输出的,因为默认仅输出 warning 以上的级别日志 有3种方式启动 console 日志

方法1:命令行带上--log-cli-level参数,设置日志级别

代码语言:javascript复制
>pytest --log-cli-level=info

方法2:pytest.ini 配置开启日志,并且设置日志级别

代码语言:javascript复制
[pytest]

log_cli = true
log_cli_level = info

方法3:pytest -o方式重写(即覆盖ini文件中的log相关的命令行参数)

代码语言:javascript复制
pytest -o log_cli=true -o log_cli_level=INFO

即可在控制台看到日志

代码语言:javascript复制
-------------------------------------------- live log call --------------------------------------------
2022-12-08 08:30:34 [INFO]: 执行文件-> test_demo.yml
2022-12-08 08:30:34 [INFO]: base_url-> None
2022-12-08 08:30:34 [INFO]: variables-> {}
2022-12-08 08:30:34 [INFO]: 运行 teststeps
2022-12-08 08:30:34 [INFO]: --------  request info ----------
POST http://httpbin.org/post
{
  "method": "POST",
  "url": "http://httpbin.org/post",
  "json": {
    "username": "test",
    "password": "123456"
  }
}
2022-12-08 08:30:35 [INFO]: ------  response info  200 OK  0.495961s------

自定义 console 控制台日志

日志的格式和时间格式也可以自定义设置

代码语言:javascript复制
[pytest]

log_cli = true
log_cli_level = info
log_cli_format = %(asctime)s %(filename)s:%(lineno)s [%(levelname)s]: %(message)s
log_cli_date_format = %Y-%m-%d %H:%M:%S

自定义保存日志文件

本插件默认情况下会记录运行日志保存在项目根目录logs下,以当前时间保存txt文本日志内容。 日志默认保存info级别。

如果你想改变这些默认的行为,自定义日志文件目录和名称,可以在pytest.ini 配置日志文件 (log_file 相关的结果是保存日志文件到本地)

代码语言:javascript复制
[pytest]

log_cli = true
log_cli_level = info
log_cli_format = %(asctime)s %(filename)s:%(lineno)s [%(levelname)s]: %(message)s
log_cli_date_format = %Y-%m-%d %H:%M:%S

log_file = ./yoyo.log
log_file_level = debug
log_file_format = %(asctime)s %(filename)s:%(lineno)s [%(levelname)s]: %(message)s
log_file_date_format = %Y-%m-%d %H:%M:%S

命令行参数配置

log日志的配置也可以用命令行参数配置(pytest -h可以查看)

代码语言:javascript复制
 --no-print-logs              disable printing caught logs on failed tests.
 --log-level=LOG_LEVEL         logging level used by the logging module
 --log-format=LOG_FORMAT      log format as used by the logging module.
 --log-date-format=LOG_DATE_FORMAT      log date format as used by the logging module.
 --log-cli-level=LOG_CLI_LEVEL        cli logging level.
 --log-cli-format=LOG_CLI_FORMAT        log format as used by the logging module.
 --log-cli-date-format=LOG_CLI_DATE_FORMAT      log date format as used by the logging module.
 --log-file=LOG_FILE               path to a file when logging will be written to.
 --log-file-level=LOG_FILE_LEVEL      log file logging level.
 --log-file-format=LOG_FILE_FORMAT      log format as used by the logging module.
 --log-file-date-format=LOG_FILE_DATE_FORMAT      log date format as used by the logging module.

还可以使用 pytest -o 方式重写(即覆盖 ini 文件中的 log 相关的命令行参数)

代码语言:javascript复制
pytest pytest  test_log.py -o log_cli=true -o log_cli_level=INFO

完整的教程已上传到gitee https://gitee.com/yoyoketang/pytest-yaml-yoyo上,如果觉得对你有帮助,可以给个 star

0 人点赞