pytest使用记录

文章目录

pytest使用记录

  1. 前置处理
    一些操作的预处理,比如封装一些需要使用的接口
  2. 后置处理
  3. 创建测试用例
    1. 登录成功
    2. 登录失败(无用户名)
    3. 登录失败(密码错误)

在测试用例调用接口时,需要将数据转化为json格式,具体而言,有两种方法:
A. 在post请求中:

requests.post(url=self.url_login, json=test_data)

B. 写好请求体后直接dumps

       login_body = json.dumps(data)

两种区别在于:
第一种将默认请求头为

headers = {'Content-Type': 'application/json'} 

第二种虽然指定为json格式数据,但是未指定请求头,因此在post请求时需要将请求头加上

r = requests.post(self.loginUrl,body_data,headers= headers)
<think>我们正在讨论pytest自动化测试中的日志记录配置方法。根据用户的问题和提供的引用内容,我们可以总结出以下关键点:1.引用[2]展示了在pytest测试用例中使用Python标准库`logging`记录日志的示例,包括info、warning、error等不同级别的日志。2.引用[3]提供了在pytest配置文件中设置日志文件的方法,包括日志文件路径、日志级别、日志格式和日期格式。因此,配置pytest的日志记录主要有两种方式:-在测试用例或fixture中直接使用`logging`模块。-通过pytest配置文件(如pytest.ini)进行全局配置。此外,我们还可以使用pytest内置的日志功能,它基于`logging`模块,但提供了更简单的配置方式。接下来,我们将详细说明这两种方法,并给出示例。###方法一:在测试代码中使用`logging`模块我们可以直接在测试函数或fixture中导入`logging`模块,然后调用相应的方法记录日志。但是,为了全局配置日志,我们通常会在fixture中设置日志的格式和级别,或者使用pytest的配置功能。示例(引用[2]中的代码):```pythonimportpytestimportlogging#使用fixture设置日志@pytest.fixture(scope='module')defbegin():print('123')#记录不同级别的日志logging.info('这是测试用例的info')logging.warning('这是测试用例的warning')logging.error('这是测试用例的error')yieldprint('456')```但是,这种方法需要在每个测试模块或函数中重复配置日志格式和级别,不够灵活。因此,我们更推荐使用配置文件进行全局设置。###方法二:通过pytest.ini配置文件设置日志在pytest.ini文件中,我们可以配置日志的文件路径、日志级别、日志格式等。以下是一个配置示例(参考引用[3]):```ini[pytest]#日志文件配置log_file=pytest.loglog_file_level=infolog_file_format=%(levelname)-8s%(asctime)s[%(name)s:%(lineno)s]:%(message)slog_file_date_format=%Y-%m-%d%H:%M:%S```配置说明:-`log_file`:指定日志文件的路径。-`log_file_level`:设置日志文件记录的日志级别(如debug,info,warning,error,critical)。-`log_file_format`:定义日志的格式。这里的格式说明:-`%(levelname)-8s`:日志级别名称,左对齐,占8个字符。-`%(asctime)s`:日志记录的时间。-`%(name)s`:记录日志的模块名称。-`%(lineno)s`:记录日志的代码行号。-`%(message)s`:日志消息。-`log_file_date_format`:设置日志中日期时间的格式。此外,我们还可以在配置文件中设置控制台输出的日志(使用`-o`选项),但通常我们使用`log_file`将日志输出到文件。###方法三:使用pytest的内置日志功能(推荐)pytest从3.3版本开始支持内置的日志记录功能。我们可以使用`caplog`fixture来捕获日志,但更重要的是,我们可以通过pytest.ini配置日志的全局行为。配置示例(在pytest.ini中):```ini[pytest]log_level=INFOlog_format=%(levelname)-8s%(asctime)s[%(name)s:%(lineno)s]:%(message)slog_date_format=%Y-%m-%d%H:%M:%S```这样配置后,运行测试时,日志将按照指定的格式输出到控制台。如果同时需要输出到文件,我们可以使用`--log-file`命令行选项,或者在配置文件中使用`log_file`和`log_file_level`(如方法二)。###结合使用通常,我们会在配置文件中同时设置控制台日志和文件日志。但是,pytest的配置文件不支持同时定义多个日志处理器(handler)。因此,如果我们希望同时将日志输出到控制台和文件,可以结合使用pytest的配置和Python的logging配置文件(如`logging.conf`)或自定义设置。不过,更常见的做法是只配置文件日志(通过pytest.ini),而控制台输出则通过pytest的进度信息(使用`-v`等选项)和捕获的日志(通过`--log-cli`选项)来满足。例如,我们可以这样配置:```ini[pytest]log_level=INFOlog_format=%(levelname)-8s%(asctime)s[%(name)s:%(lineno)s]:%(message)slog_date_format=%Y-%m-%d%H:%M:%Slog_file=pytest.loglog_file_level=DEBUG```这样,控制台会显示INFO级别及以上的日志(由`log_level`控制),而文件日志则记录DEBUG级别及以上的日志(由`log_file_level`控制)。注意,这里控制台日志的格式由`log_format`和`log_date_format`定义,而文件日志的格式同样使用这些定义。###示例测试用例配置好日志后,在测试用例中,我们可以通过`logging`模块记录日志:```pythonimportloggingdeftest_example():logging.debug("这是一条debug信息,通常不会在控制台显示")logging.info("这是一条info信息")logging.warning("这是一条warning信息")assert1==1```###注意事项1.确保在测试代码中不要重复配置日志(如调用`logging.basicConfig`),因为pytest已经接管了日志配置。2.如果需要在fixture中记录日志,可以像引用[2]中那样使用`logging`模块。###总结在pytest中实现自动化日志记录,我们主要通过配置文件(pytest.ini)来设置日志的格式、级别和输出目标。同时,在测试代码中,我们直接使用`logging`模块记录日志即可。[^1]:Pytest教程:使用Pytest进行接口自动化测试[^2]:自动化学习3:日志记录及测试报告的生成--自动化框架搭建[^3]:pytest+yaml接口自动化测试框架封装§§相关问题§§1.如何在pytest中同时将日志输出到控制台和文件?2.pytest的日志配置和Python标准logging模块配置有何异同?3.如何根据不同的测试环境(如开发、测试、生产)配置不同的日志级别?</think>### 如何在 pytest 中配置自动化日志记录pytest 中配置自动化日志记录主要有三种方式,结合您的需求说明如下: #### 1. **通过 pytest.ini 全局配置(推荐)** 在项目根目录创建 `pytest.ini` 文件,配置日志参数: ```ini [pytest] log_file = pytest.log # 日志文件路径 log_file_level = info # 文件日志级别 log_file_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s log_file_date_format = %Y-%m-%d %H:%M:%S ``` - **参数说明**: - `log_file_level`:支持 `debug/info/warning/error/critical` - `log_format`:`%(name)s`=模块名,`%(lineno)s`=行号 - 日志会自动写入指定文件,无需代码调用[^3] #### 2. **在测试代码中使用 logging 模块** ```python import logging import pytest # 日志初始化配置 def setup_module(): logging.basicConfig( filename='test.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) # 在测试用例中记录日志 def test_api(): logging.info("开始执行API测试") # 测试逻辑... logging.warning("参数校验警告") assert response.status_code == 200 logging.info("API测试通过") ``` - **优点**:灵活控制日志内容和位置[^2] #### 3. **结合 conftest.py 实现自动化记录** 创建 `conftest.py` 实现全局日志管理: ```python # conftest.py import logging import pytest @pytest.fixture(autouse=True) def auto_log(request): logger = logging.getLogger(request.node.name) logger.info(f">>> 开始测试: {request.node.name}") yield logger.info(f"<<< 结束测试: {request.node.name}") # 测试用例中直接使用 def test_login(): logging.info("输入用户名密码") # 自动记录到日志 ``` - **特点**: - `autouse=True` 自动应用于所有测试用例 - 通过 `request.node.name` 获取测试用例名称[^4] #### 4. **日志与 Allure 报告集成** 在 `pytest.ini` 中添加: ```ini [pytest] addopts = --alluredir=./reports --log-file=pytest.log ``` 运行后日志会自动关联到 Allure 报告,在测试步骤中展示[^3] --- ### 关键注意事项 1. **日志级别控制**: - 开发环境建议 `log_level = debug` - 生产环境建议 `log_level = warning`[^2] 2. **日志文件管理**: ```ini [pytest] log_file = logs/test_%(d).log # 按日期生成日志文件 ``` `%(d)` 会自动替换为当前日期 3. **多模块日志分离**: ```python # 在测试模块顶部声明 logger = logging.getLogger(__name__) ``` 可在日志中区分不同模块的日志源[^4] [^1]: Pytest教程:使用Pytest进行接口自动化测试 [^2]: 自动化学习3:日志记录及测试报告的生成 [^3]: pytest+yaml接口自动化测试框架封装 [^4]: Selenium+Pytest自动化测试框架实战
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值