Pytest的夹具共享(2)

1、问题:夹具跟用例都是写在一个py文件中,在自动化框架中,测试用例、夹具在不同的文件中,跨文件夹具使用呢?

"""

在XXX测试用例模块中,使用夹具?

如何跨文件调用?

-1)导包:from d5_pytest的夹具的作用域 import setup_teardown -- 不推荐,每个模块都要导包

-2)夹具共享:如果要直接实现多个模块(py文件)共享夹具,可以用conftest。不需要导包。

1、创建一个conftest.py文件,把夹具代码复制进去

  • 注意文件名不能改,只能是这个名字 conftest

2、调用conftest里的夹具,不需要导入conftest.py模块,可以自动查找fixture。

另外一个Python文件的测试用例直接调用这个夹具,不需要导入,直接调用可以运行

3、conftest.py的作用范围: conftest.py所在文件夹下面的所有用例。一般放在根目录下。

也可以在同一个项目中不同的目录下创建conftest.py文件,放在testcases下;那么只在它目录下生效;

超出了范围就会报错:E fixture 'class_setup_teardown' not found

"""

python 复制代码
# from d5_pytest的夹具的作用域 import setup_teardown

# 测试用例函数
def test_cart(setup_teardown):
    print("这是购物车的用例执行...")
    get_token, get_id = setup_teardown  # 定义变量得到夹具返回值
    print(f"获取到夹具的返回值token为:{get_token}, id为{get_id}")
    assert "加入购物车成功" == "加入购物车成功"

conftest.py

python 复制代码
"""
这是夹具的共享conftest文件
1、创建一个conftest.py文件,把夹具代码复制进去
 - 注意文件名不能改,只能是这个名字 conftest
2、调用conftest里的夹具,不需要导入conftest.py模块,可以自动查找fixture。
另外一个Python文件的测试用例直接调用这个夹具,不需要导入,直接调用可以运行
3、conftest.py的作用范围: conftest.py所在文件夹下面的所有用例。一般放在根目录下。
也可以在同一个项目中不同的目录下创建conftest.py文件,放在testcases下;那么只在它目录下生效;
超出了范围就会报错:E fixture 'class_setup_teardown' not found

4、当用例的模块也有夹具和conftest优先会用哪个夹具?--就近原则
-名字不一样,按照名字区分
-名字一样,就近原则,优先用自己的夹具。
1)  先在用例所在的测试文件(py文件)中 找fixture,找到了就用
2)如果1)中没有找到,就去当前py文件所在目录下conftest.py找,找到了就用
3)如果2)中没有找到,就去【当前文件所在目录的上一级目录】下contest.py找,找到了就用
4)一直找到rootdir下面截止,没有找到 就报错。
"""
import pytest

# 函数级别的夹具
@pytest.fixture
def setup_teardown():
    print("这是前置代码:进行登录操作...")
    yield "token999", "id999"
    print("这是后置代码:进行数据清除...")
python 复制代码
class TestDemo2:
    def test_order1(self, setup_teardown):  # 类级别的夹具,直接测试方法传参,作用域:整个类:先执行前置-再类下面的所有用例-再执行后置
        print("这是订单1的用例执行...")
        get_token, get_id = setup_teardown  # 定义变量得到夹具返回值
        print(f"获取到夹具的返回值token为:{get_token}, id为{get_id}")
        assert "提交订单成功" == "提交订单成功"

    def test_order2(self):
        print("这是订单2的用例执行...")
        assert "提交订单为空" == "提交订单为空"

注意: 7.4.0及以后的的pytest版本里,更新一个机制:如果没有指定新的参数

【confcutdir】而且当前的py文件里没有配置fixture,那么就会去testcase目录下

找conftest,不会去根目录找conftest文件

解决方案3个 :

1、把conftest文件放到testcase目录下

2、在根目录下加一个pytest.ini文件 文件里不需要加内

容。就会去根目录下搜索conftest文件;

3、降低pytest版本 : 7.3.1版本 pip install

pytest==7.3.1

相关推荐
山里幽默的程序员1 分钟前
DevOps 必备:盘点2026 年最强RESTful API 接口测试方案
运维·restful·devops·api开发·api开发工具
happymaker06262 分钟前
Linux常见命令总结
linux·运维·服务器
加农炮手Jinx4 分钟前
Flutter for OpenHarmony:pub_updater 命令行工具自动更新专家(DevOps 运维必备) 深度解析与鸿蒙适配指南
android·运维·网络·flutter·华为·harmonyos·devops
不念霉运5 分钟前
Gitee领跑2025中国DevOps市场:本土力量崛起
运维
无心水5 分钟前
【Hermes:团队、企业、生态与边界】47、Hermes 在 CI/CD 中的完整 DevOps 流水线:从 PR 审查到自动部署,让 Agent 接管你的发布流程
运维·人工智能·devops·openclaw·养龙虾·hermes·honcho
开源量化GO18 分钟前
期货 K 线算信号 tick 级止损:天勤双序列 wait_update 触发规则
linux·运维·服务器·python
m0_7381207219 分钟前
HVV应急溯源基础——Linux 系统安全加固配置指南(一)
linux·运维·服务器·安全·网络安全·系统安全
武子康23 分钟前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose
github_czy43 分钟前
更加优雅的类型检查与传参---mcp源码分析
java·服务器·开发语言
旅僧1 小时前
Ubantu docker环境配置(前置)
运维·docker·容器