当前位置:网站首页>pytest 之 fixture的定义及作用域
pytest 之 fixture的定义及作用域
2022-08-09 13:06:00 【沉觞流年】
pytest 之 fixture的定义及作用域
在 unittest 中 的前置与后置,是有固定名称的,通常是和测试类一起
例如: setup、teardown;setupclass、teardownclass
而 pytest 中 的前置与后置,与 unittest 却有着很大的区别:
- 没有固定的名字。也就是没有像 unittest 中去调用
setup、teardown函数 - 前置后置放在一个函数里,通过
yield关键字区分前置和后置 - 独立的,不与测试类放在一起
pytest 中前置与后置的定义
pytest 中 的前置与后置,是通过定义函数实现的,在函数前加上 @pytest.fixture,那么这个函数就是 pytest 中 的前置与后置
@pytest.fixture
def init():
pass
前置后置放在一个函数里,通过 yield 关键字区分前置和后置, yield 关键字前的内容为前置, yield 关键字后的内容为后置
@pytest.fixture
def init():
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
yield
driver.quit
pytest 中前置与后置的作用域
pytest 中前置与后置的作用域可作用于 测试函数、类、模块、会话
@pytest.fixture(scope=?)
def init():
pass
作用域:
- function 默认值,作用于 测试函数。相当于unittest 中 的
setup、teardown,中间夹着一个对应函数的测试用例 - class 作用于测试类,相当于unittest 中 的
setupclass、teardownclass,中间夹着一个测试类下的一个或多个测试用例 - module 作用于测试模块(py文件)
- session 作用于测试会话(本次运行收集到的所有用例)例如用于接口自动化连接数据库,前置用于连接数据库,后置用于关闭数据库
作用于函数
test_demo.py
import pytest
@pytest.fixture
def func_init():
print("此处是用例的前置,作用于函数")
yield
print("此处是用例的后置,作用于函数")
def func(x):
return x
def func2(x):
return x+1
@pytest.mark.usefixtures("func_init")
def test_answer():
assert func(5)==5
class TestDemo:
@pytest.mark.usefixtures("func_init")
def test_answer2(self):
assert func(4) == 5
def test_answer3(self):
assert func2(4) == 5
在终端输入命令 pytest -s -v,可以发现
函数 test_answer 和 test_answer2 调用了前置和后置里的内容。
如果把标识加在类上面呢?
test_demo2.py
import pytest
@pytest.fixture
def func_init():
print("此处是用例的前置,作用于函数")
yield
print("此处是用例的后置,作用于函数")
def func(x):
return x
def func2(x):
return x+1
@pytest.mark.usefixtures("func_init")
class TestDemo2:
def test_answer4(self):
assert func(4) == 5
def test_answer5(self):
assert func2(4) == 5

可以发现,类里的每个函数,都调用了前置和后置。
所以说,pytest 中的函数或类通过打上 @pytest.fixture(scope=“function”) 标识时,只要执行了一次函数,就调用了前置和后置里的内容
作用于类
test_demo3.py
import pytest
@pytest.fixture(scope="class")
def class_init():
print("此处是用例的前置,作用于类")
yield
print("此处是用例的后置,作用于类")
def func(x):
return x
def func2(x):
return x+1
@pytest.mark.usefixtures("class_init")
class TestDemo3:
def test_answer6(self):
assert func(4) == 5
def test_answer7(self):
assert func2(4) == 5
在终端输入命令 pytest -s -v,可以发现,虽然这个类里有两个函数,但前置和后置只调用了一次
也就是说,pytest 中的类通过打上 @pytest.fixture(scope=“class”) 标识时,执行了一次类里的内容,就调用了前置和后置里的内容
pytest 中前置和后置调用,通常都是在执行函数或类的时候调用,其余两种作用域,并不常用,就不再一一举例说明
边栏推荐
- Deep Learning Based on R Language - Simple Regression Case
- IDEA Gradle 常遇问题(一)
- Sandbox中的进程/线程相关-1
- 【NVIDIA】Tesla V100安装NVIDIA-Driver驱动程序适配CUDA-Toolkit-11.6
- Final assignment of R language data analysis in a university
- ArcEngine(八) 选择要素并高亮显示
- render解析
- FFmpeg长时间无响应的解决方法
- The sword refers to Offer 57 - II. and is a continuous positive sequence of s (sliding window)
- FFmpeg相机花屏花图问题解决方法
猜你喜欢

FFmpeg多媒体文件处理(ffmpeg处理流数据的基本概念)

npm install失败

GIN a preliminary study, the environment is installed

FFmpeg相机花屏花图问题解决方法

Anta and Huawei Sports Health jointly verify the champion running shoes and lead Chinese sports with innovation

快来扔鸡蛋。

Unity3d_API_GPS_LocationService

19、学习MySQL 索引

Explanation of RTSP protocol

群组行动控制--自动队列化实现策略
随机推荐
ArcEngine(九)图形绘制
陈强教授《机器学习及R应用》课程 第十四章作业
利用信号灯和共享内存实现进程间同步通信
vim常用命令
自己做了个nodejs+epxress+mysql的小项目,怎么才能让别人通过互联网访问呢?
Unity3d_API_Gyroscope 陀螺仪的接口
FFmpeg多媒体文件处理(ffmpeg操作目录及list的实现)
Professor Chen Qiang's "Machine Learning and R Application" course Chapter 16 Assignment
The sword refers to Offer 57 - II. and is a continuous positive sequence of s (sliding window)
Ledong Fire Rescue Brigade was invited to carry out fire safety training for cadres
FFmpeg相机花屏花图问题解决方法
NC7 买卖股票的最好时机(一)
Professor Chen Qiang's "Machine Learning and R Application" course Chapter 14 Assignment
关于做2D游戏时,Canvas边界显示在Game窗口的问题
NC53 删除链表的倒数第n个节点
ArcEngine(八) 选择要素并高亮显示
陈强教授《机器学习及R应用》课程 第十三章作业
TCP三次握手和四次挥手及拥塞控制
Q_08 更多信息
The FPGA - work summary recently