前言

当用例a失败的时候,如果用例b和用例c都是依赖于第一个用例的结果,那可以直接跳过用例b和c的测试,直接给他标记失败xfail
用到的场景,登录是第一个用例,登录之后的操作b是第二个用例,登录之后操作c是第三个用例,很明显三个用例都会走到登录。
如果登录都失败了,那后面2个用例就没测试必要了,直接跳过,并且标记为失败用例,这样可以节省用例时间。

用例设计

1.pytest里面用xfail标记用例为失败的用例,可以直接跳过。实现基本思路

  • 把登录写为前置操作
  • 对登录的账户和密码参数化,参数用canshu = [{"user":"amdin", "psw":"111"}]表示
  • 多个用例放到一个Test_xx的class里
  • test_01,test_02, test_03全部调用fixture里面的login功能
  • test_01测试登录用例
  • test_02和test_03执行前用if判断登录的结果,登录失败就执行,pytest.xfail("登录不成功, 标记为xfail")
  1. # content of test_05.py
  2.  
  3. # coding:utf-
  4. import pytest
  5.  
  6. canshu = [{"user":"amdin", "psw":""}]
  7.  
  8. @pytest.fixture(scope="module")
  9. def login(request):
  10. user = request.param["user"]
  11. psw = request.param["psw"]
  12. print("正在操作登录,账号:%s, 密码:%s" % (user, psw))
  13. if psw:
  14. return True
  15. else:
  16. return False
  17.  
  18. @pytest.mark.parametrize("login", canshu, indirect=True)
  19. class Test_xx():
  20.  
  21. def test_01(self, login):
  22. '''用例1登录'''
  23. result = login
  24. print("用例1:%s" % result)
  25. assert result == True
  26.  
  27. def test_02(self, login):
  28. result = login
  29. print("用例3,登录结果:%s" % result)
  30. if not result:
  31. pytest.xfail("登录不成功, 标记为xfail")
  32.  
  33. assert ==
  34.  
  35. def test_03(self, login):
  36. result = login
  37. print("用例3,登录结果:%s" %result)
  38. if not result:
  39. pytest.xfail("登录不成功, 标记为xfail")
  40.  
  41. assert ==
  42.  
  43. if __name__ == "__main__":
  44. pytest.main(["-s", "test_05.py"])

上面传的登录参数是登录成功的案例,三个用例全部通过

  1. ============================= test session starts =============================
  2. platform win32 -- Python 3.6., pytest-3.6., py-1.5., pluggy-0.6.
  3. rootdir: D:\, inifile:
  4. plugins: metadata-1.7., html-1.19., allure-adaptor-1.7.
  5. collected items
  6.  
  7. ..\..\..\..\..\..\YOYO\peizhi\test_05.py 正在操作登录,账号:amdin, 密码:
  8. 用例1True
  9. .用例3,登录结果:True
  10. .用例3,登录结果:True
  11. .
  12.  
  13. ========================== passed in 0.02 seconds ===========================

标记为xfail

1.再看看登录失败情况的用例,修改登录的参数

  1. # content of test_05.py
  2. # coding:utf-
  3. import pytest
  4.  
  5. canshu = [{"user":"amdin", "psw":""}]
  6.  
  7. @pytest.fixture(scope="module")
  8. def login(request):
  9. user = request.param["user"]
  10. psw = request.param["psw"]
  11. print("正在操作登录,账号:%s, 密码:%s" % (user, psw))
  12. if psw:
  13. return True
  14. else:
  15. return False
  16.  
  17. @pytest.mark.parametrize("login", canshu, indirect=True)
  18. class Test_xx():
  19.  
  20. def test_01(self, login):
  21. '''用例1登录'''
  22. result = login
  23. print("用例1:%s" % result)
  24. assert result == True
  25.  
  26. def test_02(self, login):
  27. result = login
  28. print("用例3,登录结果:%s" % result)
  29. if not result:
  30. pytest.xfail("登录不成功, 标记为xfail")
  31.  
  32. assert ==
  33.  
  34. def test_03(self, login):
  35. result = login
  36. print("用例3,登录结果:%s" %result)
  37. if not result:
  38. pytest.xfail("登录不成功, 标记为xfail")
  39.  
  40. assert ==
  41.  
  42. if __name__ == "__main__":
  43. pytest.main(["-s", "test_05.py"])

运行结果:

  1. ============================= test session starts =============================
  2. platform win32 -- Python 3.6., pytest-3.6., py-1.5., pluggy-0.6.
  3. rootdir: D:\, inifile:
  4. plugins: metadata-1.7., html-1.19., allure-adaptor-1.7.
  5. collected items
  6.  
  7. ..\..\..\..\..\..\YOYO\peizhi\test_05.py 正在操作登录,账号:amdin, 密码:
  8. 用例1False
  9. F
  10. self = <YOYO.peizhi.test_05.Test_xx object at 0x00000000045ACF98>, login = False
  11.  
  12. def test_01(self, login):
  13. '''用例1登录'''
  14. result = login
  15. print("用例1:%s" % result)
  16. > assert result == True
  17. E assert False == True
  18.  
  19. D:\YOYO\peizhi\test_05.py:: AssertionError
  20. 用例3,登录结果:False
  21. x
  22. Test ignored.用例3,登录结果:False
  23. x
  24. Test ignored.
  25.  
  26. ================================== FAILURES ===================================
  27. ___________________________ Test_xx.test_01[login0] ___________________________
  28.  
  29. self = <YOYO.peizhi.test_05.Test_xx object at 0x00000000045ACF98>, login = False
  30.  
  31. def test_01(self, login):
  32. '''用例1登录'''
  33. result = login
  34. print("用例1:%s" % result)
  35. > assert result == True
  36. E assert False == True
  37.  
  38. D:\YOYO\peizhi\test_05.py:: AssertionError
  39. ===================== failed, xfailed in 0.06 seconds =====================

从结果可以看出用例1失败了,用例2和3没执行,直接标记为xfail了

用例a失败,跳过测试用例b和c并标记失败xfail的更多相关文章

  1. pytest十:用例 a 失败,跳过测试用例 b 和 c 并标记失败 xfail

    当用例 a 失败的时候,如果用例 b 和用例 c 都是依赖于第一个用例的结果,那可以直接跳过用例 b 和 c 的测试,直接给他标记失败 xfail用到的场景,登录是第一个用例,登录之后的操作 b 是第 ...

  2. pytest文档16-用例a失败,跳过测试用例b和c并标记失败xfail

    前言 当用例a失败的时候,如果用例b和用例c都是依赖于第一个用例的结果,那可以直接跳过用例b和c的测试,直接给他标记失败xfail 用到的场景,登录是第一个用例,登录之后的操作b是第二个用例,登录之后 ...

  3. pytest_用例a失败,跳过测试用例b和c并标记失败xfail

    前言 当用例a失败的时候,如果用例b和用例c都是依赖于第一个用例的结果,那可以直接跳过用例b和c的测试,直接给他标记失败xfail用到的场景,登录是第一个用例,登录之后的操作b是第二个用例,登录之后操 ...

  4. 【pytest官方文档】解读Skipping test functions,跳过测试用例详解

    有时候,为了满足某些场景的需要,我们知道有些测试函数在这时候肯定不能执行,或者执行了也会失败.那么我们 可以选择去跳过这个测试函数,这样也就不会影响整体的测试函数运行效果,不至于在你运行的众多绿色通过 ...

  5. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-跳过测试用例(6)

    初始化.跳过测试用例 # test_class_6.py import unittest from mock import mock from day_20200208_mooc.base.inter ...

  6. 『德不孤』Pytest框架 — 4、Pytest跳过测试用例

    目录 1.无条件跳过skip 2.有条件跳过skipif 3.练习 自动化测试执行过程中,我们常常出现这种情况:因为功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了, 如果我们注释掉或删除掉这 ...

  7. VMWare虚拟机提示:锁定文件失败,打不开磁盘...模块"Disk"启动失败的解决办法

    我出现该问题的原因: 昨天电脑一下子卡死,于是我就重启了电脑,重启之后我没有打开VMware虚拟机,结果第二天一上班打开VMware就发现出现了“锁定文件失败,打不开磁盘......模块"D ...

  8. 测者的测试技术手册:Junit执行单元测试用例成功,mvn test却失败的问题和解决方法

    今天遇见了一个奇怪的问题,在IDE中run unit test,全部cases都成功了,但是后来通过mvn test运行case确保错了.在寻求原因的同时也找到了对应的解决方法. Run Unit T ...

  9. pytest 10 skip跳过测试用例

    pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者你希望失败的测试功能 skip意味着只有在满足某些条件时才希望测试通过,否则pytest应该跳过运行测试.常见事例时非win ...

随机推荐

  1. 32-第3章 数据链路层--抓包分析数据帧格式-ISO一图了然-小结

    OSI理论模型 层级 名称 事物举例 功能 数据单位 别名 数据组成 协议举例 7 应用层 QQ.OA 网络通信 上层数据 上层数据 HTTP/FTP/DNS 6 表示层 web数据压缩.https加 ...

  2. Hibernate 最简单实例

    我从网上下载了 hibernate-release-4.3.0.Final.zip,解压缩,把/lib/required文件夹下的所有jar包加入到eclipse项目中的Referenced Libr ...

  3. Laravel session的保存机制

    与$_SESSION不同Laraver中的session是在当次程序执行完毕时保存到文件或其他存储引擎中的,也就是说如果使用了die等强制结束程序的函数将不会自动保存session导致session失 ...

  4. 一、Core授权-2 之.net core 基于Jwt实现Token令牌

    一.Startup类配置 ConfigureServices中 //添加jwt验证: services.AddAuthentication(JwtBearerDefaults.Authenticati ...

  5. DevExpress中的gridControl选择问题

    在Dev控件中,gridControl是最常用的一个了. //直接通过gridView获取当前行 dr=this.gridView1.GetDataRow(this.gridView1.Focused ...

  6. Zookeeper客户端使用(使用原生zookeeper)

    Zookeeper客户端使用 一.使用原生zookeeper 在pom.xml中加入依赖 <dependency> <groupId>org.apache.zookeeper& ...

  7. [BZOJ1299]巧克力棒(博弈论,线性基)

    [BZOJ1299]巧克力棒 Description TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. ...

  8. 通过shell监控网页是否正常,然后促发邮件告警

    最近在网上找了下通过shell编写一个脚本来监控网页是否正常,如果不正常则促发邮件告警,修复后有一个修复的通知邮件:但一直没有找到全面的,所以自己研究了下,写了一个linux对接邮箱和通过shell写 ...

  9. 【HDU3308】LCIS

    题目大意:维护一个长度为 N 的序列,支持单点修改,区间查询最长连续上升子序列的长度. 题解: 线段树维护一段区间左端点开始的 LCIS 长度,右端点开始的 LCIS 长度以及区间最优解.考虑进行合并 ...

  10. 透彻的了解Linux系统故障并解决

    透彻的了解Linux系统故障并解决 2009-12-25 10:24 佚名 NET130 字号:T | T 经常应用Windows操作系统时,我们会很多的系统故障,于是很多人开始应用Linux操作系统 ...