pytest简易教程(06):fixture作用域(scope)详解

全栈测试笔记 / 2024-02-24 / 原文

 

pytest简易教程汇总,详见

scope参数

表示被@pytest.fixture标记的函数的作用域:

"function":默认值,作用于每个测试用例(包含函数/方法),每个用例执行前都会运行一次

"class":作用于整个类,每个测试类/测试函数执行前都会运行一次

"module":作用于整个模块(多个类),每个module(每个py文件)执行前都会运行一次;可以实现多个.py跨文件共享前置

"package":每个python包执行前都会运行一次

"session":作用于整个session,整个测试前运行一次

  

如果fixture放conftest.py中,可以这么说:

scope参数为function:每一个测试文件中的所有测试用例执行前都会执行一次conftest文件中的fixture

scope参数为class:每一个测试文件中的测试类执行前都会执行一次conftest文件中的fixture

scope参数为module:每一个测试文件执行前都会执行一次conftest文件中的fixture

scope参数为session:所有测试py文件执行前执行一次conftest文件中的fixture

 

一些总结:

默认是function

执行顺序遵循:sesstion->package->module->class->function

每一个函数前后均会执行模块中的class

模块中的fixture对函数、方法均有效

测试类中的fixture只对方法有效

在模块和类中有同名的fixture存在时:局部优先,也就是类中fixture优先

 

下面逐一验证。

 

默认是function

设置默认运行,未指定scope

  

结果:作用域默认是function

 

执行顺序遵循:sesstion->package->module->class->function

 

运行结果:

 

每一个函数前后均会执行模块中的class

运行结果:

 

模块中的fixture对函数、方法均有效

运行结果:

 

测试类中的fixture只对方法有效

  

结果:对函数无效

 

在模块和类中有同名的fixture存在时:局部优先,也就是类中fixture优先

 

结果: