Pytest中conftest.py的用法

conftest.py文件到底该如何使用呢,下面我们就来详细了解一下conftest.py文件的特点和使用方法吧

Posted in Python onJune 27, 2021

前言

在之前介绍fixture的文章中,我们使用到了conftest.py文件,那么conftest.py文件到底该如何使用呢,下面我们就来详细了解一下conftest.py文件的特点和使用方法吧

什么是conftest.py

我们之前了解了fixture,fixture可以直接定义在测试脚本中,但是有些时候,我们希望一个fixture可以被复用,这就需要对fixture进行集中管理,Pytest使用文件conftest.py集中管理固件.在复杂的项目中,可以在不同的目录层级定义conftest.py,其作用域为其所在的目录和子目录,通常情况下,conftest.py@pytest.fixture()会结合使用,来实现全局的前后置处理。

conftest.py特点

  • conftest.py文件的名称是固定的,不能修改
  • conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
  • 不需要import导入conftest.py文件,pytest用例会自动识别该文件,放到根目录下可以全局目录调用,放在某个package下,那就在该package内有效
  • 不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
  • pytest会默认读取conftest.py里面的所有fixture,所有同目录测试文件运行前都会执行conftest.py文件

conftest.py用法

在我们实际的测试中,conftest.py文件需要结合fixture来使用,所以fixture中参数scope也适用conftest.py中fixture的特性,这里再说明一下

  • conftest中fixture的scope参数为session,所有的测试文件执行前(后)执行一次conftest.py文件中的fixture。
  • conftest中fixture的scope参数为module,每一个测试.py文件执行前(后)都会执行一次conftest.py文件中的fixture
  • conftest中fixture的scope参数为class,每一个测试文件中的测试类执行前(后)都会执行一次conftest.py文件中的fixture
  • conftest中fixture的scope参数为function,所有文件的测试用例执行前(后)都会执行一次conftest.py文件中的fixture

conftest.py实际案例

我们按照这样的目录新建一个项目

Pytest中conftest.py的用法

在根目录conftestdemo下

根目录中的conftest.py文件中,一般写全局的fixture,比如登录

conftest.py

import pytest


@pytest.fixture(scope="session")
def login():
    print("***登录成功,返回用户名***")
    name = "rockche"
    yield name
    print("***退出登录***")


@pytest.fixture(autouse=True)
def get_name(login):
    name = login
    print(f"--每个用例都调用外层fixiture:打印用户name:{name}--")

根目录下的测试用例

test_1.py

def test_get_name(login):
    name = login
    print("***基础用例:获取用户name***")
    print(f"用户名:{name}")

运行conftestdemo下的所有用例

run.py

import pytest

if __name__ == '__main__':
    pytest.main(["-s", "../conftestdemo/"])

test_baidu目录下

配置针对baidu网站的测试用例独有的fixture

conftest.py

import pytest


@pytest.fixture(scope="module")
def open_baidu(login):
    name = login
    print(f"用户 {name} 打开baidu")

test_case1.py

def test_case2_01(open_baidu):
    print("搜索pytest")


def test_case2_02(open_baidu):
    print("搜索博客园")

test_cnblogs目录下

没有__init__.py文件也没有conftest.py文件

test_case1.py

def test_no_fixture(login):
    print("没有__init__文件,直接进入cnblogs", login)

test_taobao目录下

配置针对taobao网站的测试用例独有的fixture

conftest.py

import pytest


@pytest.fixture(scope="function")
def open_taobao(login):
    name = login
    print(f"用户 {name} 进入淘宝")

test_case1.py

class TestTaobao:
    def test_case1_01(self, open_taobao):
        print("选购商品")

    def test_case1_02(self, open_taobao):
        print("进入结算界面")

运行run.py

Pytest中conftest.py的用法

到此这篇关于Pytest中conftest.py的用法的文章就介绍到这了,更多相关Pytest conftest.py内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
centos系统升级python 2.7.3
Jul 03 Python
用Python编写简单的微博爬虫
Mar 04 Python
python 实时遍历日志文件
Apr 12 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
Python实现中一次读取多个值的方法
Apr 22 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
python数据挖掘需要学的内容
Jun 23 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
python和go语言的区别是什么
Jul 20 Python
Python实现8种常用抽样方法
Python基于百度API识别并提取图片中文字
Python基于百度AI实现抓取表情包
Python道路车道线检测的实现
浅析Django接口版本控制
浅析Python实现DFA算法
解析目标检测之IoU
You might like
Access数据库导入Mysql的方法之一
2006/10/09 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
javaScript如何生成xmlhttp
2013/12/16 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
基于jQuery拖拽事件的封装
2020/11/29 jQuery
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
python 统计代码行数简单实例
2017/05/04 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
在django模板中实现超链接配置
2019/08/21 Python
NumPy中的维度Axis详解
2019/11/26 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
python实现简单的tcp 文件下载
2020/09/16 Python
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
《盘古开天地》教学反思
2014/02/28 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
领导干部考核评语
2015/01/04 职场文书
青岛海底世界导游词
2015/02/11 职场文书
民主评议党员个人总结
2015/02/13 职场文书
行政处罚听证告知书
2015/07/01 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL