Pytest的夹具共享(2)

server/2025/3/24 8:02:49/

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
“”"

# 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

"""
这是夹具的共享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 found4、当用例的模块也有夹具和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("这是后置代码:进行数据清除...")
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


http://www.ppmy.cn/server/177366.html

相关文章

基于AT89C51单片机的自动贩卖机设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/90498300?spm1001.2014.3001.5503 C23 部分参考设计如下: 摘 要 自动售货机作为自动化技术的一个典型应用,已经成为现代生活中不可或缺的…

Web爬虫利器FireCrawl:全方位助力AI训练与高效数据抓取。本地部署方式

开源地址:https://github.com/mendableai/firecrawl 01、FireCrawl 项目简介 Firecrawl 是一款开源、优秀、尖端的 AI 爬虫工具,专门从事 Web 数据提取,并将其转换为 Markdown 格式或者其他结构化数据。 Firecrawl 还特别上线了一个新的功…

Qt搭配CLion:Mac电脑M芯片Qt开发环境

在当今的软件开发领域,跨平台应用的需求日益增长,Qt作为一款流行的C图形用户界面库,因其强大的功能和易用性而备受开发者青睐。与此同时,CLion作为一款专为C/C打造的强大IDE,提供了丰富的特性和高效的编码体验。本文将…

C/S模型-TCP

下图是基于TCP协议的客户端/服务器程序的一般流程: TCP协议通讯流程 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SY…

神思智飞无人机智能调度系统介绍

神思智飞无人机智能调度系统介绍 神思智飞是神思电子技术股份有限公司自主研发的无人机智能调度系统,定位为无人机的“智慧大脑”,通过AI、大数据与通信技术的融合,实现无人机集群的自主化、智能化调度与协同作业,广泛应用于智慧交通、森林防火、应急救援、城市治理等低空…

Vue学习汇总(JS长期更新版)

文章目录 一、开始  二、基础 目录 一、开始 1、[Vue]VsCode快捷键 二、基础 1、[Vue]模版语法        2、[Vue]属性绑定        3、[Vue]条件渲染        4、[Vue]列表渲染

github上传文件方法格式

echo "# myHtmlFirst1.0" >> README.md git init git add README.md(这条指令改成下面的) git add . git commit -m "first commit" git branch -M main git remote add origin gitgithub.com:xxxxxxxxx/myHtmlFirst1.0.git git push -u origin ma…

做到哪一步才算精通SQL

做到哪一步才算精通SQL-Structured Query Language 数据定义语言 DDL for StructCREATE:用来创建数据库、表、索引等对象ALTER:用来修改已存在的数据库对象DROP:用来删除整个数据库或者数据库中的表TRUNCATE:用来删除表中所有的行…