pytest上一个用例失败后,跳过下一个用例(用例a失败,跳过与之关联的b用例)。pytest.mark.dependency用例依赖。

这篇具有很好参考价值的文章主要介绍了pytest上一个用例失败后,跳过下一个用例(用例a失败,跳过与之关联的b用例)。pytest.mark.dependency用例依赖。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实际写代码的时候会遇到这样的问题,以登录登出为例,登录失败后我们怎么跳过登出的用例,因为登录失败后测试登出没有意义结果里的报错也没有意义。

这里使用到了pytest的三方插件,dependency方法。官方文档大家可以参考下:Using pytest-dependency — pytest-dependency

注:此方法仅能用于pytest框架,如要使用unittest框架,请移步我的另一篇文章,传送门:unittest跳过用例-----上一个测试用例失败后跳过下一个测试用例

1、安装

pip install pytest-dependency

2、基本用法

语法

@pytest.mark.dependency(name=None, depends=0, scope='module')


参数解释:

  • name(str):依赖测试所引用的测试名称。如果未设置,则默认为pytest定义的节点ID。名称必须唯一。
  • depends(iterable of str) : 依赖项,该测试所依赖的测试名称列表。除非所有依赖项都已成功运行,否则将跳过测试。依赖项也必须已被标记修饰。依赖项的名称必须适应范围。
  • scope(str):搜索依赖项的范围。必须是'session'、'package'、'module'或'class',默认为module
     

使用注意点:

  1. 首先我们需要在用例开始的位置打上一个装饰器@pytest.mark.dependency(),这是代表这条用例作为主条件,如果这条用例失败,关联它的用例会跳过执行。
  2. 在被关联的用例上,也打上带参数的装饰器@pytest.mark.dependency(),depends接受的参数是关联的依赖用例名。
  3. 在depends也可以用别名的方式指定用例名。
import pytest

@pytest.mark.dependency()  # 代表这条用例为主条件
@pytest.mark.xfail(reason="deliberate fail")  # 标记为xfail
def test_a():
    assert False  # 故意让test_a失败,后续依赖于test_a的用例均会跳过

@pytest.mark.dependency()
def test_b():
    pass  # test_b成功,后续依赖于test_b的用例均会执行,不会跳过

@pytest.mark.dependency(depends=["test_a"])
def test_c():
    pass  # test_c依赖于test_a,所以直接跳过

@pytest.mark.dependency(depends=["test_b"])
def test_d():
    pass  # test_d依赖于test_b,由于b是成功的,所以test_d会执行通过

@pytest.mark.dependency(depends=["test_b", "test_c"])
def test_e():
    pass  # test_e取决于test_b和test_c。test_b确实成功了,但test_c已被跳过。所以这一个也将被跳过。

pytest上一个用例失败后,跳过下一个用例(用例a失败,跳过与之关联的b用例)。pytest.mark.dependency用例依赖。

从结果得知

test_a 故意失败。

test_b 成功。

测试_c 被跳过,因为它取决于test_a。

测试_d 取决于成功的test_b。它也将运行并成功。

test_e 取决于test_b和test_c。 test_b确实成功了,但test_c已被跳过。所以这一个也将被跳过

 3、依赖范围scope

  • scope=class, 作用于所属的类,外部类不会被关联
import pytest

class Test1(object):

    @pytest.mark.dependency()
    @pytest.mark.xfail()
    def test_a(self):
        assert False

class Test2(object):

    @pytest.mark.dependency()
    def test_a(self):
        pass

    @pytest.mark.dependency(depends=["test_a"], scope="class")
    def test_b(self):
        pass

pytest上一个用例失败后,跳过下一个用例(用例a失败,跳过与之关联的b用例)。pytest.mark.dependency用例依赖。 这种情况下,依赖的test_a为当前class Test2中的test_a,所以test_b的结果是pass。

如果想让其依赖于class Test1中的test_a可以将depends=["test_a"],修改为depends=["Test1::test_a"],代码就不贴了,大家改下就行,执行结果如下,test_b就会变为skippytest上一个用例失败后,跳过下一个用例(用例a失败,跳过与之关联的b用例)。pytest.mark.dependency用例依赖。

  • scope=module,不传递scope参数时,默认参数是'module',作用于当前文件,且只会查找当前文件的符合条件的函数名,类里同名的方法不会被依赖

我们将上面的代码稍微改下,新增一个test_a的函数,将Test1的test_a改为pass,代码如下

import pytest

@pytest.mark.dependency()
@pytest.mark.xfail()
def test_a():
    assert False

class Test1(object):

    @pytest.mark.dependency()
    def test_a(self):
        pass

class Test2(object):

    @pytest.mark.dependency()
    def test_a(self):
        pass

    @pytest.mark.dependency(depends=["test_a"], scope="module")
    def test_b(self):
        pass

pytest上一个用例失败后,跳过下一个用例(用例a失败,跳过与之关联的b用例)。pytest.mark.dependency用例依赖。

 从结果得知,test_b跳过了,其依赖的test_a为最上面的函数test_a。

经本人多次试验,其依赖关系是本py文件内第一个运行的test_a(本类中同名的test_a除外),大家有兴趣的话可以依次删除最上方的函数test_a和class Test1中的test_a试一下。

如果想指定依赖Test1中的test_a,与上面一样将depends=["Test1::test_a"]即可,依赖Test2中的test_a同理

  • scope=package或session

package作用于当前目录同级的依赖函数,跨目录无法找到依赖的函数,必须在同一目录层级下

使用方法:

session作用于全局,可跨目录调用。但被依赖的用例必须先执行,否则用例会执行跳过!!!!

代码如下

# 当前在B/testB2.py文件下的代码写法
@pytest.mark.dependency(depends=["B/testB1.py::Test1::test_a"], scope="package")
@pytest.mark.dependency(depends=["A/testA1.py::Test1::test_a"], scope="session")

pytest上一个用例失败后,跳过下一个用例(用例a失败,跳过与之关联的b用例)。pytest.mark.dependency用例依赖。文章来源地址https://www.toymoban.com/news/detail-408694.html

到了这里,关于pytest上一个用例失败后,跳过下一个用例(用例a失败,跳过与之关联的b用例)。pytest.mark.dependency用例依赖。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 测试框架pytest教程(5)运行失败用例-rerun failed tests

    运行这个文件,2个失败,48个通过。 要运行上次失败的测试用例,可以使用 --lf (或 --last-failed )选项来告诉pytest只运行上次运行时失败的测试。 命令行示例: 或者在pytest配置文件(比如pytest.ini)中设置: 这样,pytest会检测上次运行时失败的测试用例,并只运行这些失败

    2024年02月11日
    浏览(28)
  • 火爆全网,Pytest自动化测试框架-测试用例执行与失败重跑(实战详细)

    用例执行状态 用例执行完成后,每条用例都有自己的状态,常见的状态有 passed:测试通过 failed:断言失败 error:用例本身写的质量不行,本身代码报错(譬如:fixture不存在,fixture里面有报错) xfail:预期失败,加了 @pytest.mark.xfail() error例子1:参数不存在 为啥是error pwd参数

    2024年02月11日
    浏览(28)
  • 自动化用例编写思路 (使用pytest编写一个测试脚本)

    目录 一,明确测试对象 二,编写测试用例 构造请求数据 封装测试代码 断言设置 三,执行脚本获取测试结果 四,总结 经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索天气查询,会出现如下

    2024年02月16日
    浏览(44)
  • python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

    经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索 天气查询 ,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接口测试用例脚本。 针对某个功能做接口测试,首先我们需

    2024年02月04日
    浏览(43)
  • win11该文件没有与之关联的应用怎么办

    win11用户在使用电脑的时候遇到了“该文件没有与之关联的应用”的提示,这是怎么回事呢?应该怎么办呢?出现这个情况应该是注册表被误删了,大家需要新建一个文本文档,然后输入下文提供的指令,之后将其重命名为1.bat,以管理员身份运行它之后注册表就能恢复了。或

    2024年02月04日
    浏览(35)
  • Win10 出现“该文件没有与之关联的程序来执行该操作”解决方法

    方法一: 按WIN+R打开运行菜单,输入 gpedit.msc 回车; 展开“计算机配置”-“Windows设置”-“安全设置”-“本地策略”-“安全选项”; 在右侧找到“用户帐户控制:用于内置管理员帐户的管理员批准模式”,并双击打开; 设置为“已启用”,然后应用保存,最后重启系统即

    2024年02月04日
    浏览(47)
  • Win11提示该文件没有与之关联的应用来执行该操作该如何解决

            当我们在想办法 去除桌面图标左下角的箭头时 ,经常在网上搜到删除注册表中 IsShortcut 文件的方式,但是这样的方式只适用于win8或win10系统。如果是win11系统的话这样做也会消除 大多数 图标左下角的箭头,虽然桌面的图标可以正常打开但是会造成系统任务栏固定

    2023年04月08日
    浏览(39)
  • 【打开方式问题解决】该文件没有与之关联的应用来执行该操作。请安装应用,若已经安装应用,请在“默认应用设置“页面中创建关联。

    最近用了某款编辑右键菜单工具,清理了下冗长的右键内容,但是却出现了另一个奇奇怪怪的问题,就是对某一类型文件,在右键后,点击【打开方式】-【选择其他应用】,会弹出【该文件没有与之关联的应用来执行该操作。请安装应用,若已经安装应用,请在“默认应用设

    2024年02月05日
    浏览(109)
  • win11固定在任务栏的应用该文件没有与之关联的应用来执行该操作

    1. 问题现象 win11我们固定在任务栏的图标点击之后就出现这样的提示【该文件没有与之关联的应用来执行该操作……】弹窗,甚至连系统自带的文件管理器都打不开了。这是因为我们按照win10的方式去除快捷方式小箭头的方式对win11并不适用。按照win10去除小箭头之后,就会造

    2024年02月04日
    浏览(41)
  • win11点击任务栏快捷方式出现“该文件没有与之关联的应用来执行该操作”解决方法

        win11点击任务栏快捷方式出现“该文件没有与之关联的应用来执行该操作”大概率原因就是 我们在去掉桌面快捷图标的小箭头时,把 IsShortcut 文件删除了。因为这种方法适合win10,不适合win11。所以我们要恢复这个IsShortcut注册表文件。 恢复方法: 在桌面新建文本文档 把

    2023年04月15日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包