51Testing软件测试论坛

标题: 可能会影响你的项目,pytest7.4版本的一个变更 [打印本页]

作者: 韶光暗淡    时间: 2023-7-21 11:20
标题: 可能会影响你的项目,pytest7.4版本的一个变更
本帖最后由 韶光暗淡 于 2023-7-21 11:25 编辑

2.0准备工作
项目结构如下
  1. <font size="3">D:\Gitee\DemoRepo (17.97MB)
  2. +-- testCases (1.03KB)
  3. |   +-- conftest.py (252b)
  4. |   +-- pmCases (574b)
  5. |   |   +-- conftest.py (259b)
  6. |   |   `-- test_logout.py (315b)</font>
复制代码
顶层conftest.py内容
  1. <font size="3">import pytest

  2. @pytest.fixture(scope='session')
  3. def fix_all():
  4.     print('fix_all')</font>
复制代码
pmCases下的conftest.py内容
  1. <font size="3">import pytest

  2. @pytest.fixture(scope='session', autouse=True)
  3. def fix_all2():
  4.     print('fix_all2')
  5. </font>
复制代码
test_logout.py内容
  1. <font size="3">import pytest


  2. def test_logout(fix_all):
  3.     print('test_logout')

  4. if __name__ == '__main__':
  5.     pytest.main(['-sv',__file__])</font>
复制代码
3.0 Pytest7.4之前
用的Pytest7.3.1,而实际7.4.0之前也就只有一个7.3.2了


  1. <font size="3">test_logout.py::test_logout fix_all2
  2. fix_all
  3. test_logout
  4. PASSED</font>
复制代码
所以按照以前的认识
4.0 Pytest7.4.04.1执行效果
注意把pytest更新到pytest7.4.0

  1. <font size="3">E       fixture 'fix_all' not found</font>
复制代码


  1. <font size="3">def test_logout(fix_all):
  2.     print('test_logout')</font>
复制代码

[backcolor=rgba(255, 255, 255, 0.9)]终端下执行
  1. <font size="3">D:\Gitee\DemoRepo\testCases>pytest
  2. # 这是成功的</font>
复制代码
[backcolor=rgba(255, 255, 255, 0.9)]这样执行
  1. <font size="3">D:\Gitee\DemoRepo\testCases\pmCases>pytest
  2. # 报错跟上面一样  E       fixture 'fix_all' not found
  3. </font>
复制代码




作者: 韶光暗淡    时间: 2023-7-21 11:24
4.2 changlog Of pytest 7.4.0https://docs.pytest.org/en/7.4.x/changelog.html#
发布时间 (2023-06-23)
Features
ImprovementsBug Fixes
Improved Documentation
Trivial/Internal Changes

4.3抓重点[backcolor=rgba(255, 255, 255, 0.9)]原文
  1. <font size="3">When `--confcutdir` is not specified, and there is no config file present, the conftest cutoff directory (`--confcutdir`) is now set to the [rootdir](https://docs.pytest.org/en/7.4.x/reference/customize.html#rootdir). Previously in such cases, `conftest.py` files would be probed all the way to the root directory of the filesystem. If you are badly affected by this change, consider adding an empty config file to your desired cutoff directory, or explicitly set `--confcutdir`.
  2. </font>
复制代码
译文
当未指定--confcutdir并且没有配置文件存在时,conftest截断目录(--confcutdir)现在被设置为rootdir。在以前的情况下,conftest.py文件会一直被探测到文件系统的根目录。如果你受到这个变化的严重影响,考虑在所需的截断目录中添加一个空的配置文件,或者明确地设置--confcutdir

4.4解决方式
  1. <font size="3">import pytest


  2. def test_logout(fix_all):
  3.     print('test_logout')

  4. if __name__ == '__main__':
  5.     pytest.main(['-sv','--confcutdir=..',__file__]) # 意思是设定conftest.py的搜索根目录是当前目录上级</font>
复制代码



作者: 韶光暗淡    时间: 2023-7-21 11:24
示例2: 终端执行
  1. <font size="3"># 你在pmCases下执行
  2. # 如果在项目根目录下,本来就是ok的
  3. pytest --confcutdir=..</font>
复制代码

示例3: pytest.ini
  1. <font size="3">[pytest]
  2. # 改为实际的项目根目录即可
  3. addopts = --confcutdir="D:\Gitee\DemoRepo"</font>
复制代码



4.5补充说明
  1. <font size="3">  --confcutdir=dir Only load conftest.py's relative to specified dir</font>
复制代码







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2