『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件
1、conftest.py文件介绍
conftest.py文件是Pytest框架里面一个很重要的东西,它可以在这个文件里面编写Fixture函数,这个Fixture函数的作用,就相当于Unittest框架里面的setup()前置函数和teardown()后置函数,虽然Pytest框架也有setup()前置函数和teardown()后置函数,但是在实际工作中没必要写在测试用例文件中,直接写在conftests.py里面就好了,Pytest框架会自动去找conftest.py文件里面的东西,这样更灵活。
总结:在实际工作中,通常
conftest.py和@pytest.fixture()结合使用,实现全局的前后置应用。
2、conftest.py的注意事项
conftest.py文件是单独存放的一个夹具(Fixture)配置文件,名称是不能更改。- 可以在不同的
.py文件中使用同一个Fixture函数。 - 原则上
conftest.py需要和运行的用例放到同一目录中,并且有__init__.py文件,那么conftest.py作用于整个目录。
如果希望Fixture(夹具)共享给所有测试,则可以把conftest.py文件放在测试框架的根目录下。 conftest.py文件中的内容,不需要做任何的imprt导入的操作就能够读取到,因为Pytest用例会自动查找。- 建议把测试项目的所有Fixture都存放在
conftest.py文件中,把conftest.py当作Pytest的Fixture仓库。
3、conftest.py的使用
(1)测试框架的根目录或者包中创建conftest.py文件
"""
1.学习目标
掌握conftest.py文件编写格式
2.操作步骤
2.1 conftest.py文件名不能修改
conftest.py文件中存放项目所有的fixture
方便对fixture管理和维护
2.2 在conftest.py定义函数
在函数前添加@pytest.fixture()装饰器
在测试用例的函数中传入fixture标识的函数名。
提示:conftest.py文件放在项目的根目录,作用域是全局的。
conftest.py文件放在某一个包下,作用域只在该包内。
"""
import pytest
from selenium import webdriver
@pytest.fixture()
def login():
print("打开APP")
print("登录成功")
yield # 当用例执行完成后,执行yield后的代码
print("关闭APP")
@pytest.fixture()
def driver(request): # request是Pytest中的一个关键字,固定写法。
# 步骤1:创建浏览器驱动对象
driver = webdriver.Chrome()
# 步骤3:定义用例执行后要执行的代码,封装到一个函数中
def end(): # 这个end函数命是自定义的
driver.quit()
# 步骤4:执行上面封装的代码。
# 通过request关键字,结束上面的函数。
request.addfinalizer(end) # 终结函数
# 步骤2:返回浏览器驱动对象,给测试用例
return driver
(2)测试用例文件如下
import pytest
# 注意:要把conftest.py文件中定义的fixture方法添加到用例中
def test_add_cart(login): # 把conftest.py文件中的fixture函数传入用例
print("添加购物车--需要登录")
def test_add_address(login):
print("添加收货地址--需要登录")
if __name__ == '__main__':
pytest.main()
"""
执行结果:
test_01.py::test_add_cart 打开APP
登录成功
添加购物车--需要登录
PASSED关闭APP
test_01.py::test_add_address 打开APP
登录成功
添加收货地址--需要登录
PASSED关闭APP
"""
4、不同位置conftest.py文件的优先级
其作用范围是当前目录包括子目录里的测试模块。
- 比如在测试框架的根目录创建
conftest.py文件,文件中的Fixture的作用范围是所有测试模块。 - 比如在某个单独的测试文件夹里创建
conftest.py文件,文件中Fixture的作用范围,就仅局限于该测试文件夹里的测试模块。
该测试文件夹外的测试模块,或者该测试文件夹外的测试文件夹,是无法调用到这个conftest.py文件中的Fixture。 - 如果测试框架的根目录和子包中都有
conftest.py文件,并且这两个conftest.py文件中都有一个同名的Fixture,实际生效的是测试框架中子包目录下的conftest.py文件中配置的Fixture。 - 提示:一个用例可以添加多个
conftest.py文件中定义的Fixture夹具,如下:# 注意:要把conftest.py文件中定义的fixture方法添加到用例中
def test_add_cart(login, driver):
print("添加购物车--需要登录")
5、conftest.py中Fixture(夹具)的作用域
Fixture的scope参数也适用conftest.py文件中Fixture的特性:
conftest.py文件中Fixture的scope参数为session,那么所有的测试文件执行前(后)执行一次conftest.py文件中的Fixture。conftest.py文件中Fixture的scope参数为module,那么每一个测试文件执行前(后)都会执行一次conftest.py文件中Fixture。conftest.py文件中Fixture的scope参数为class,那么每一个测试文件中的测试类执行前(后)都会执行一次conftest.py文件中Fixture。conftest.py文件中Fixture的scope参数为function,那么所有文件的测试用例执行前(后)都会执行一次conftest.py文件中Fixture。
6、总结
- Pytest框架中的
setup()/teardown()函数,setup_class()/teardown_class()函数。他们是作用于所有用例或者所有类的。 @pytest.fixtrue()的作用域是既可以部分用例,也可以全部用例的前后置。conftest.py文件和@pytest.fxtrue()装饰器结合使用,作用于全局用例的前后置。
参考:
『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件的更多相关文章
- Pytest框架中,conftest.py文件的作用?
conftest.py文件,它主要是实现fixture共享的. 第一,conftest.py文件当中,它储存的都是fixture,就是给用例提供做前置准备工作和后置清理工作的一个东西: 第二,conf ...
- 『德不孤』Pytest框架 — 13、Pytest中Fixture装饰器(三)
目录 9.ids参数说明 10.name参数说明 11.scope参数说明 (1)scope="function" (2)scope="class" (3)sc ...
- 『德不孤』Pytest框架 — 15、Pytest参数化
目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 1. ...
- pytest:conftest.py文件
一.fixture scope 为session 级别是可以跨 .py模块调用的,也就是当我们有多个 .py文件的用例时,如果多个用例只需调用一次fixture,可以将scope='session', ...
- python2中的__init__.py文件的作用
python2中的__init__.py文件的作用: 1.python的每个模块的包中,都必须有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module. 2.__init_ ...
- 『德不孤』Pytest框架 — 11、Pytest中Fixture装饰器(一)
目录 1.Fixture装饰器的用途 2.Fixture参数说明 3.Fixture装饰器简单应用 4.yield执行后置函数 1.Fixture装饰器的用途 做测试前后的初始化设置,如测试数据准备, ...
- 『德不孤』Pytest框架 — 12、Pytest中Fixture装饰器(二)
目录 5.addfinalizer关键字 6.带返回值的Fixture 7.Fixture实现参数化 (1)params参数的使用 (2)进阶使用 8.@pytest.mark.usefixtures ...
- 『德不孤』Pytest框架 — 1、Pytest测试框架介绍
目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...
- 『德不孤』Pytest框架 — 2、Pytest的基本使用
目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...
随机推荐
- Apache——网页优化与安全
Apache--网页优化与安全 1.Apache 网页优化概述 2.网页压缩 3.网页缓存 4.隐藏版本信息 5.Apache 防盗链 1.Apache 网页优化概述: 企业中,部署Apache后只采 ...
- MySQL-MMM高可用架构
MySQL-MMM高可用架构 目录 MySQL-MMM高可用架构 一.MMM 1. MMM的概述 2. MMM的应用场景 3. MMM的特点 4. 关于MMM高可用架构的说明 5. 用户及授权 二.案 ...
- MyBatis加强(1)~缓存机制(一级缓存、二级缓存、第三方缓存技术redis、ehcache)
一.缓存机制 使用缓存可以使应用更快地获取数据,避免频繁的数据库交互操作,尤其是在查询越多,缓存命中率越高 的情况下,缓存的作用就越明显. 1.缓存原理:Map ■ 查询时,先从缓存区查询:找到,返回 ...
- 模块random+os+sys+json+subprocess
模块random+os+sys+json+subprocess 1. random 模块 (产生一个随机值) import random 1 # 随机小数 2 print(random.rando ...
- PHP面试常考之会话控制
你好,是我琉忆,欢迎您来到PHP面试专栏.本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面试常考之会话控制周三:PHP面试常考之网络协议周五:PHP面试常考题之会话控制和网络 ...
- 38、python并发编程之IO模型
目录: 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 异步IO(Asynchron ...
- Solution -「CF 1391E」Pairs of Pairs
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的无向图,在其上找到一条包括不少于 \(\lceil\frac{n}2\rceil\ ...
- 暑假撸系统5- Thymeleaf 常用标签的
上次博客已经是三天前了,后期修补和细化的东西多了,进度没有前几天那么明显了.因为原来工作大多是后端居多,如果非要前台也会选择一些相对对ui依赖比较小的框架,比如extjs,所以这次的基础排版就费劲了, ...
- Spring Data JPA应用之常规CRUD操作初体验
基于对于一个陌生的技术框架,先使用后研究其实现的原则(大部分本人如此,就如小朋友学习骑自行车不会先研究自行车是怎么动起来的而是先骑会了),对于Spring JPA先通过案例实践其怎么用吧. 用之前得明 ...
- 解决POI多线程导出时数据错乱问题
项目里有一个导出功能,但随着数据量大量上涨,导出时间长到不可忍受,遂重写此接口,多线程导出的代码并不复杂,每页有一条线程负责写入,利用线程池去调度,用countdownLatch保证在所有数据写完后再 ...