前言

在之前介绍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实际案例

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

在根目录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

整理参考

小菠萝的测试笔记

最新文章

  1. 解析大型.NET ERP系统 设计通用Microsoft Excel导入功能
  2. 任意半径局部直方图类算法在PC中快速实现的框架。
  3. SQLServer 数据库查看死锁、堵塞的SQL语句
  4. Frag(匹配跟踪)
  5. C++ 通过WIN32 API 获取逻辑磁盘详细信息
  6. Windows Server 2012 R2 设置
  7. 第一篇:groovy对DSL的语法支持
  8. Android Studio:You need to use a Theme.AppCompat theme (or descendant) with this activity. AlertDialog
  9. Qt之QComboBox(基本应用、代理设置)
  10. VS2015配置内核WDK7600环境,32位下.
  11. SimpleAdapter和Baseadapter填充listActivity-android学习之旅()
  12. PuppeteerSharp+AngleSharp的爬虫实战之汽车之家数据抓取
  13. Go变量逃逸分析
  14. 039 在weblogic下部署jndi的多数据源
  15. python安装scrapy
  16. python3 urllib.parse 常用函数
  17. VS从数据库表生成Model代码
  18. JS应用实例1:注册页面表单校验
  19. RIP配置详解
  20. jQuery----各版本

热门文章

  1. MySQL查看及杀掉链接方法大全
  2. [DB] SQL 必知必会
  3. 搭建LAMP环境部署opensns微博网站
  4. Python爬虫 小白[3天]入门笔记
  5. Linux内存带宽的一些测试笔记
  6. JQuery 动态加载 HTML 元素时绑定点击事件无效问题
  7. IDEA中配置maven 全解析教程(Day_08)
  8. kylin的rowkey优化之按维度分片
  9. 第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难
  10. 关于一类docker容器闪退问题定位