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 相关文章推荐
Python THREADING模块中的JOIN()方法深入理解
Feb 18 Python
浅谈python jieba分词模块的基本用法
Nov 09 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
python实现LRU热点缓存及原理
Oct 29 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
python 实现两个npy档案合并
Jul 01 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Python实现8种常用抽样方法
Python基于百度API识别并提取图片中文字
Python基于百度AI实现抓取表情包
Python道路车道线检测的实现
浅析Django接口版本控制
浅析Python实现DFA算法
解析目标检测之IoU
You might like
How do I change MySQL timezone?
2008/03/26 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
javascript抖动元素的小例子
2013/10/28 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
跟老齐学Python之Import 模块
2014/10/13 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
Python3计算三角形的面积代码
2017/12/18 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
如何利用python查找电脑文件
2018/04/27 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
三维科技面试题
2013/07/27 面试题
质检部职责
2013/12/28 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
运动会加油稿
2015/07/22 职场文书
同学聚会开幕词
2019/04/02 职场文书
导游词之清晏园
2019/11/22 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS