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

相关推荐
羚羊角uou1 分钟前
【Linux】system V共享内存
linux·运维·服务器
林克爱塞尔达12 分钟前
Linux入门(二)
linux·运维·chrome
破烂儿15 分钟前
Ubuntu Server 安装图形界面和通过Window远程桌面连接服务器(Xrdp)
linux·服务器·ubuntu
Hello.Reader18 分钟前
Kafka 运维实战基本操作含命令与最佳实践
运维·kafka·linq
存储服务专家StorageExpert36 分钟前
手搓一个 DELL EMC Unity存储系统健康检查清单
linux·运维·服务器·存储维护·emc存储
小虾米vivian1 小时前
达梦:将sql通过shell脚本的方式放在后台执行
服务器·数据库·sql
SonOfWind03111 小时前
CentOS搭建本地源
linux·运维·centos
IT成长日记1 小时前
【Nginx开荒攻略】Nginx主配置文件结构与核心模块详解:从0到1掌握nginx.conf:
linux·运维·nginx·配置文件
代码的余温2 小时前
Web服务器VS应用服务器:核心差异解析
运维·服务器·前端
NiKo_W3 小时前
Linux 开发工具(1)
linux·运维·服务器