『德不孤』Pytest框架 — 13.Fixture装饰器的使用(三)

6、带返回值的Fixture

上面例子是带返回值并且还要实现teardown()后置函数的Fixture写法。

这里就是单纯的说明带返回值的Fixture。

我们可以选择让Fixture返回我们需要的东西,如果Fixture需要配置一些数据,读个文件,或者连接一个数据库,那么你可以让Fixture返回这些数据或资源。

示例:

"""
1.学习目标
    掌握带返回值的fixture
2.操作步骤
    2.1 编写带返回值fixture
    2.2 使用测试用例调用
3.需求
"""
import pytest


# 编写fixture
@pytest.fixture()
def data():
    print("准备好的测试数据")
    return 3 # 返回数据


def test_data(data):
    print("执行用例步骤")
    print(f"得到参数{data}")  # 可以使用在用例步骤中
    assert data == 3  # 使用在断言中
    
"""
执行结果:

test_01.py::test_data 准备好的测试数据
执行用例步骤
得到参数3
PASSED
"""

说明:Fixture装饰类中,也可以实现数据的准备。

7、Fixture实现参数化

Fixture修饰的函数可以通过添加params参数来实现参数化。(实际工作中,不常用此方式)

(1)params参数的使用

request代表Fixture的调用状态,request.param作为返回值供测试使用。

示例:

"""
1.学习目标
    掌握带参数化fixture编写
2.操作步骤
    @pytest.fixture(params=[列表格式数据])
    request是pytest中内置关键字

"""
import pytest

# 编写fixture,带参数
data = [666, 888, 1000]

# request会接收到params=data的参数
# 然后request.param(固定写法)每次传递一个参数
@pytest.fixture(params=data)
def need_data(request):
    return request.param


def test_data(need_data):
    print(f"测试数据:{need_data}")
    assert 666 == need_data

if __name__ == '__main__':
    pytest.main()

"""
test_01.py::test_data[666] 测试数据:666
PASSED
test_01.py::test_data[888] 测试数据:888
FAILED
test_01.py::test_data[1000] 测试数据:1000
FAILED
"""

说明:上面的例子,通过assert简单判断下拿到的request.param值,有没有在原来的参数列表中。实际上就相当于遍历了一遍参数列表,们可以看到测试方法被调用了3次。

(2)进阶使用

参数是一个元组列表格式的数据

"""
1.学习目标
    掌握带参数化fixture编写
2.操作步骤
    @pytest.fixture(params=[列表格式数据])
    request是pytest中内置关键字
3.需求
4.总结
    1.pytest fixture 主要是用来完成测试用例执行前后操作
        例如:测试前后对数据库连接/断开;打开/关闭浏览器APP
    2.fixture还可以用来准备测试数据
        带参数fixture
        有返回值fixture  (在实际工作中返回数据比较灵活,推荐使用)
    3.fixture中的参数
        scope: 确定fixture作用范围 默认function,class,module,session
        autouse:当值true时,相当于setup
        name: 对fixture重命名
"""
import pytest


# 编写fixture,带参数
@pytest.fixture(params=[("孙悟空", 666), ("猪八戒", 777), ("沙和尚", 888)])
def need_data(request):
    return request.param


def test_data(need_data):
    print(f"测试人物:{need_data[0]}")
    print(f"测试分数:{need_data[1]}")



if __name__ == '__main__':
    pytest.main()

"""
执行结果:

测试人物:孙悟空
测试分数:666
PASSED测试人物:猪八戒
测试分数:777
PASSED测试人物:沙和尚
测试分数:888
PASSED
"""

总结:params参数支持的格式

  • 列表[ ]
  • 元组( )
  • 元素列表[(),(),()]
  • 字典列表[{},{},{}],提示:只能取{}整体。
  • 字典元祖({},{},{}),提示:只能取{}整体。

8、@pytest.mark.usefixtures()的使用

@pytest.mark.usefixtures("fixturename")装饰类也是一种调用Fixture的方式。

@pytest.mark.usefixtures("fixturename")装饰类可以装饰模块、类、函数、方法。

usefixtures与传fixture区别:

如果Fixture有返回值,则不能用`@pytest.mark.usefixtures("fixturename")装饰器修饰用例。

如果Fixture没有返回值,用@pytest.mark.usefixtures("fixturename")装饰器和`@pytest.fixture()装饰器作用一样。

示例:

import pytest


# 步骤1
@pytest.fixture()
def login():
    print("打开APP")
    print("输入账号,密码,进行登录")
    yield  # 当用例执行完成后,执行yield后的代码
    print("关闭APP")

# 方式一:
def test_add_cart(login):
    print("添加购物车--需要登录")


# 方式二:就是把fixture方法传入usefixtures装饰器中
@pytest.mark.usefixtures("login")
def test_add_address():  #
    print("添加收货地址--需要登录")


if __name__ == '__main__':
    pytest.main()

"""
执行结果:

test_01.py::test_add_cart 打开APP
输入账号,密码,进行登录
添加购物车--需要登录
PASSED关闭APP

test_01.py::test_add_address 打开APP
输入账号,密码,进行登录
添加收货地址--需要登录
PASSED关闭APP
"""
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容