什么是fixture
fixture是pytest特有的功能,使用装饰器 @pytest.fixture 标记的函数在其他函数中能被当作参数传入并被调用。
fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。
fixture是基于模块来执行的,每个fixture的名字就可以触发一个fixture的函数,它自身也可以调用其他的fixture。
fixture作用是为了提供一种可靠和可重复的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步就显得很冗余。
fixture的参数
fixture的可用参数如下:
- scope:定义被fixture装饰方法的作用域。可用参数值如下:
- function(默认):作用域为每个函数或方法
- class:作用域为每个类。
- module:作用域为每个模块(每个py文件)。
- session:作用域为每次启动。
- autouse=True:自动执行被fixture装饰的方法。默认为False
- params:用于参数化,数据类型支持列表和元组。(比如:params=[“v1”, "v2", "v3"])
- ids:当使用params参数化时,将nodeid中的变量值替换为给定的值(很少使用)
- name:给被fixture标记的方法取别名。(很少使用,注:当取了别名后,原方法名就不可以用了)
scope参数完成前后置操作
function:作用于每个函数(与setup和teardown功能相似)
import pytest
# function作用范围为每个函数或方法
@pytest.fixture(scope="function")
def my_fixture():
# yield之前为前置操作,yield之后为后置操作
print("\n前置操作")
yield
print("\n后置操作")
class TestPractice1:
# 因为没使用autouse参数,使用时需要传入方法名
def test_001(self, my_fixture):
print("执行用例001")
def test_002(self):
print("执行用例002")
class TestPractice2:
def test_003(self, my_fixture):
print("执行用例003")
def test_004(self):
print("执行用例004")
执行结果

class:作用于每个类(与setup_class和teardown_class功能相似)
import pytest
# class作用范围为每个类
@pytest.fixture(scope="class")
d

fixture是pytest框架中的一个重要特性,用于创建可重用的测试环境,减少测试代码的冗余。它可以按函数、类、模块或会话级别定义作用域,并可通过参数化进行数据驱动测试。fixture函数在yield前执行前置操作,yield后执行后置操作。此外,autouse参数可以让fixture自动运行,params参数用于参数化测试,ids用于定制节点ID显示,而name可以为fixture指定别名。
最低0.47元/天 解锁文章
1625

被折叠的 条评论
为什么被折叠?



