pytest教程-22-用例依赖插件-pytest-dependency

领取资料,咨询答疑,请➕wei:  June__Go

上一小节我们学习了pytest失败重跑插件pytest-rerunfailures,本小节我们讲解一下pytest用例依赖插件-pytest-dependency。

用例依赖

编写用例的时候,我们会注意用例之间的独立性,但部分用例之间确实存在关联,无法做到彻底独立,那么我们就可以通过使用插件pytest-dependency设置用例之间的依赖关系。当用例A依赖于用例B时,若用例B执行失败,则用例A将会自动跳过不执行。如此,就可以避免去执行一个必定会失败的用例,相当于pytest.mark.skip。

安装插件

pip install pytest-dependency

使用方法

首先,在标记被依赖用例时,需要在被依赖的用例上添加装饰器pytest.mark.dependency(),且被依赖用例需要在关联用例前执行。也可以给被依赖用例设置别名,通过添加参数name实现。

在关联的依赖用例上,同样需要添加装饰器pytest.mark.dependency(depends=['用例名称']),与之前不同的是,装饰器必须要填写depends参数完成用例的关联,关联的被依赖用例存在多个时可以使用“,”隔开。

(1)在函数中执行

在test_01函数前我们加上了@pytest.mark.dependency(),
在test_02函数前也写了@pytest.mark.dependency(depends=["test_01"])

(2)在类中执行

在类中执行,不能直接写方法名,需要加上类名::方法名或者别名
在test_01函数前我们加上了@pytest.mark.dependency(),
在test_02函数前也写了@pytest.mark.dependency(depends=["类名::test_01"])

依赖范围

(1)class
作用于所属的类,外部类不会被关联
@pytest.mark.dependency(depends=["test_01"],scope="class")

(2)module
默认参数是’module’,作用于当前文件。只会查找当前文件的符合条件的文件名,类里同名的方法不会被依赖。
@pytest.mark.dependency(depends=["test_01"],scope="module")

(3)package
作用于当前目录同级的依赖函数,跨目录无法找到依赖的函数。
例如在dep2目录下,创建了test_dep_01.py和test_dep_02.py
@pytest.mark.dependency(depends=["xxx.py::类名::test_01"],scope="package")

(4)session
作用域全局,可跨目录调用。但被依赖的用例必须先执行
@pytest.mark.dependency(depends=["xx/xx.py::类名::test_01"],scope="session")
支持直接在类名上方添加,那么类下面所有方法都不执行

参考示例

import pytest
class TestCase:
    # 通过装饰器@pytest.mark.dependency()标记当前用例为被依赖用例,被依赖用例需要优先关联用例执行
    @pytest.mark.dependency()
    def test_01(self):
        print("测试用例01,执行失败")
        assert 1 == 2
    # 通过使用装饰器关联被依赖用例,通过depends参数指定用例名称关联用例
    @pytest.mark.dependency(depends=['test_01'])
    def test_02(self):
        print("测试用例02,跳过")
    # 标记被依赖用例时,可以通过name参数指定别名
    @pytest.mark.dependency(name="func_2")
    def test_03(self):
        print("测试用例03,执行成功!")
    # 使用depends参数指定定义的别名关联用例
    @pytest.mark.dependency(depends=['func_2'])
    def test_04(self):
        print("测试用例04,执行成功!")
    # depends参数可以关联多个测试用例,使用“,”分隔即可
    @pytest.mark.dependency(depends=['test_01', 'func_2'])
    def test_05(self):
        print("测试用例05,跳过")
if __name__ == '__main__':
    pytest.main(['-vs'])

运行结果:我们可以看出,只有依赖用例执行成功时,当前用例才会被执行,否则会被跳过。依赖多个用例时,只有全部成功,才会执行,否则一样会跳过。

============================= test session starts ==============================
collecting ... collected 5 items

test_demo.py::TestCase::test_01 FAILED                                   [ 20%]测试用例01,执行失败

test_demo.py:11 (TestCase.test_01)
1 != 2

Expected :2
Actual   :1
<Click to see difference>

self = <test_demo.TestCase object at 0x10cd01bb0>

    @pytest.mark.dependency()
    def test_01(self):
        print("测试用例01,执行失败")
>       assert 1 == 2
E       assert 1 == 2

test_demo.py:15: AssertionError
PASSED                                   [ 40%]测试用例02,跳过
PASSED                                   [ 60%]测试用例03,执行成功!
PASSED                                   [ 80%]测试用例04,执行成功!
PASSED                                   [100%]测试用例05,跳过



test_demo.py::TestCase::test_02 
test_demo.py::TestCase::test_03 
test_demo.py::TestCase::test_04 
test_demo.py::TestCase::test_05 

=================== 1 failed, 4 passed, 5 warnings in 0.04s ====================

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei:  June__Go

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值