pytest日志总结

pytest日志分为两类:

一、终端(控制台)打印的日志

1、指定-s,脚本中print打印出的信息会显示在终端;

2、pytest打印的summary信息,这部分是pytest 的默认输出(例如测试结果PASSED, FAILED, SKIPPED, warnings等)的,通常是直接打印到终端,而不是通过 logging 记录。

二、使用logging模块打印的信息

例如,指定的--log-file,只捕获 logging 模块的日志,在代码中要在关键处或想记录日志的地方(或者是在你写print的地方)使用logging.getLogger()记录:

python 复制代码
import logging


logger = logging.getLogger(__name__)


def test_login():
    try:
        rsp = requests.post(url, headers=HEADERS, data=data, timeout=(10, 10), verify=False)
        rsp.raise_for_status()

        g1_sid = rsp.json().get('data', {}).get('sid')
        g1_uid = rsp.json().get('data', {}).get('uid')

        decode_body = unquote(rsp.request.body.decode('utf-8') if isinstance(rsp.request.body, bytes) else rsp.request.body)

        logger.info("==== HTTP Request ====")
        logger.info(f"URL: {url}")
        logger.info(f"Method: POST")
        logger.info(f"Headers: {rsp.request.headers}")
        logger.info(f"Body: {decode_body}")

        logger.info("==== HTTP Response ====")
        logger.info(f"Status Code: {rsp.status_code}")
        logger.info(f"Body: {rsp.text}")

        return g1_sid, g1_uid

    except requests.RequestException as e:
        print(f"Request failed: {e}")
        logger.error(f"Request failed: {e}")

        return None, None

通过logging模块记录日志,可以在pytest.ini中进行配置,例如:

python 复制代码
[pytest]
log_cli = false
log_cli_level = INFO

log_format = %(asctime)s %(levelname)s %(name)s %(funcName)s %(lineno)d  %(message)s

log_date_format = %Y-%m-%d %H:%M:%S

log_file = pytest_project_log.txt
log_file_level = INFO

log_cli:打印在终端,即记录在文件里的日志也会原样的打印在终端上;

log_cli_level:日志级别

%(asctime)s:当前时间

%(levelname)s:日志级别

%(name)s:Logger的名称(通常是模块名或者类名)

%(funcName)s:当前执行的方法名

%(lineno)d:日志输出所在行号

%(message)s:日志信息内容

%(module)s:模块名称

%(pathname)s:文件的完整路径

%(threadName)s:当前线程名称

log_date_format:时间格式

log_file:日志文件名称

log_file_level:日志级别

具体内容是这样:

如果在pytest.ini中进行了配置,那么在pytest命令行中就不用指定--log-file 和 --log-level了,这样命令行就简化一些了,例如:

python 复制代码
pytest -q -s -ra --count=3 test_open_stream.py --alluredir=./report/CXL/resource

注:如果在代码中没有引入logging模块,或者引入了logging模块,没有使用logging.getLogger()记录日志,仅在命令行中指定--log-file和--log-level在日志文件中是不能记录日志的。

注:如果配置文件和命令行中同时指定了日志级别,以命令行指定的级别优先

日志的级别从低到高依次是:debug、info、warning、error、critical

【总结】

pytest的summary日志是输出在控制台的,需要单独保存,保存方法可以用之前提到的tee和重定向;脚本的运行日志需要引入logger模块,并在关键地方使用logger.getLogger()记录,保存在日志文件中,这两部分日志是分开处理的。

相关推荐
ThreeAu.2 天前
pytest 实战:用例管理、插件技巧、断言详解
python·单元测试·pytest·测试开发工程师
我的xiaodoujiao2 天前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 18--测试框架Pytest基础 2--插件和参数化
python·学习·测试工具·pytest
小小测试开发3 天前
pytest 库用法示例:Python 测试框架的高效实践
开发语言·python·pytest
know__ledge3 天前
Pytest+requests进行接口自动化测试8.0(Allure进阶 + 文件上传接口 + 单接口多用例)
pytest
川石课堂软件测试3 天前
CSS中常用的几种定位。
开发语言·css·python·网络协议·http·html·pytest
啊森要自信4 天前
【GUI自动化测试】Python 自动化测试框架 pytest 全面指南:基础语法、核心特性(参数化 / Fixture)及项目实操
开发语言·python·ui·单元测试·pytest
啊森要自信5 天前
【GUI自动化测试】YAML 配置文件应用:从语法解析到 Python 读写
android·python·缓存·pytest·pip·dash
我的xiaodoujiao5 天前
从 0 到 1 搭建完整 Python 语言 Web UI自动化测试学习系列 17--测试框架Pytest基础 1--介绍使用
python·学习·测试工具·pytest
程序员杰哥6 天前
Pytest与Unittest测试框架对比
自动化测试·软件测试·python·测试工具·测试用例·excel·pytest
软件测试小仙女6 天前
Pytest参数化实战:高效测试API接口
软件测试·测试开发·测试工具·pytest·接口测试·api·参数化