Pytest框架 conftest.py文件的使用详解
作者:测试-八戒 发布时间:2023-06-20 08:16:52
标签:Pytest,conftest.py,文件
conftest.py文件特点
所有同目录测试文件运行前都会执行conftest.py文件 不需要import导入
conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在该package内有效,可有多个conftest.py
conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture
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()
装饰器结合使用,作用于全局用例的前后置。
来源:https://blog.csdn.net/m0_59868866/article/details/125083466
猜你喜欢
ps:不曾想还有那么好用的方法。汗一个先。Div即父容器不根据内容自适应高度,我们看下面的代码:<div id="main&
为什么PHP7的性能可以提高这么多?1. JIT 2. Zval的改变 3. 内部类型zend_string 4. PHP数组的变化(Has
本文实例讲述了Python计算一个文件里字数的方法。分享给大家供大家参考。具体如下:这段程序从所给文件中找出字数来。from string
QMainWindow基本介绍QMainWindow主窗口为用户提供了一个应用程序框架,它有自己的布局,可以在布局中添加控件。窗口类型介绍P
Python获取图片的大小了解过Pillow的都知道,Pillow是一个非常强大的图片处理器,这篇文章主要记录一下Pillow对图片信息的获
动机: 查询功能是我们在网站上见过的最普遍也是最常用的一个功能模块了。以往的信息查询都是连接到数据库的,每一次点击都必须要后台数据库的支持。
一、Django密码存储和加密方式#算法+迭代+盐+加密<algorithm>$<iterations>$<s
一、软件下载官方下载地址:https://download.jetbrains.8686c.com/webstorm/WebStorm-20
一、c++调用Python将Python安装目录下的include和libs文件夹引入到项目中,将libs目录下的python37.lib复
我就废话不多说了,直接上代码吧!import syssys.path.append("..")from datetime
因为使用python+selenium有时候需要获取当前文件的上一级目录,找了一段时间找到了,在此记录下来;os.path.dirname(
Django配合python进行requests请求前言在我们写代码的时候,经常会用到前后端分离开发的方法,例如微信小程序,安卓,网站等等&
新上的一台服务器出现了一个现象:ASP程序中,调用函数Now(),显示的时间总是形如“2009-07-12 上午 08:12:56”这样的,
本文实例讲述了Python实现的本地文件搜索功能。分享给大家供大家参考,具体如下:偶尔需要搜索指定文件,不想每次都在windows下面去搜索
本文分析了PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别。分享给大家供大家参考,具
本文实例讲述了mysql中的sql_mode模式。分享给大家供大家参考,具体如下:mysql数据库的中有一个环境变量sql_mode,定义了
一、插件是什么?插件是遵循一定规范的应用程序接口编写出来的程序,而chrome插件则是运行在chrome浏览器上的小程序,能帮我们解决一下工
结构图:为什么?var data [][]intfor _, rangeSlice := range [][]int{{1}, {2}, {
scipy.interpolate插值方法1 一维插值from scipy.interpolate import interp1d1维插值算
一、问题的提出随着互连网的发展,网站的数量以惊人的数字增加。网站的作用除了给广大网友们提供信息资讯服务外,还应该成为网友们上传与下载文件的场