前言

当用例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"

test_login.py

  1. import pytest
  2. import requests
  3.  
  4. s = requests.session()
  5. canshu = [{'user':'xxxx',
  6. 'paw':111111,
  7. 'uri':'xxxxxxxxxx'}]
  8.  
  9. @pytest.fixture(scope='module')
  10.  
  11. def login(request):
  12. user = request.param['user']
  13. paw = request.param['paw']
  14. uri = request.param['uri']
  15.  
  16. url = uri + "/global/do-login.action"
  17. body = {
  18. "loginName": "%s" % user,
  19. "password": "%s" % paw,
  20. "pcCodeForFocusMedia": 0
  21. }
  22. a = s.post(url, data=body, verify=False)
  23. data = a.json()
  24. print(data['status'])
  25. if data['status'] == 202:
  26. return True
  27. else:
  28. return False

test_parametrize.py

  1. import pytest, requests, urllib3
  2. from s14.pytest_learn import test_login
  3. urllib3.disable_warnings()
  4.  
  5. canshu = test_login.canshu
  6. login = test_login.login
  7.  
  8. tenantId = xxx # 租户ID
  9. encryptionKey = "xxxxxxxxx" # 保持登陆的key
  10. passport_id = xxxxx # 跟据账号进行填写,同一个账户下的多个租户,passport.id不用更改
  11. uri = 'xxxx'
  12. user = 'xxxx'
  13.  
  14. @pytest.mark.parametrize('login', canshu, indirect=True)
  15. class Test_xxxx():
  16.  
  17. s = requests.session()
  18. def test_01(self, login):
  19. '''登陆'''
  20. result = login
  21. print("用例1: %s" % result)
  22. assert result == True
  23.  
  24. def test_02(self, login):
  25. result = login
  26. print("用例2: %s" % result)
  27. url1 = uri + "/global/login-entry.action"
  28. body1 = {
  29. "tenantId": "%s" % tenantId,
  30. "passport.id": passport_id,
  31. "encryptionKey": "%s" % encryptionKey,
  32. "loginName": "%s" % user
  33. }
  34. b = self.s.post(url1, data=body1, verify=False)
  35. data = b.json()
  36. a = data['status']
  37. if not result:
  38. pytest.xfail("登陆不成功,标记为xfail")
  39. else:
  40. print("用例2运行结果为 :True , data['status']状态为:%s" % a)
  41. assert data['status'] == 0
  42.  
  43. if __name__ == '__main__':
  44. pytest.main(['-s', 'test_parametrize.py'])

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

  1. ============================= test session starts =============================
  2. platform win32 -- Python 3.6.2, pytest-3.7.4, py-1.6.0, pluggy-0.7.1
  3. rootdir: D:\python_auto\s14\pytest_learn, inifile:
  4. collected 2 items
  5.  
  6. test_parametrize.py 202
  7. 用例1: True
  8. .用例2: True
  9. 用例2运行结果为 True , data['status']状态为:0
  10. .
  11.  
  12. ========================== 2 passed in 0.55 seconds ===========================

标记为xfail

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

  1. import pytest
  2. import requests
  3.  
  4. s = requests.session()
  5. canshu = [{'user':'xxxxx',
  6. 'paw':'',
  7. 'uri':'xxxxxx'}]
  8.  
  9. @pytest.fixture(scope='module')
  10.  
  11. def login(request):
  12. user = request.param['user']
  13. paw = request.param['paw']
  14. uri = request.param['uri']
  15.  
  16. url = uri + "/global/do-login.action"
  17. body = {
  18. "loginName": "%s" % user,
  19. "password": "%s" % paw,
  20. "pcCodeForFocusMedia": 0
  21. }
  22. a = s.post(url, data=body, verify=False)
  23. data = a.json()
  24. print(data['status'])
  25. if data['status'] == 202:
  26. return True
  27. else:
  28. return False

test_parametrize.py

  1. import pytest, requests, urllib3
  2. from s14.pytest_learn import test_login
  3. urllib3.disable_warnings()
  4.  
  5. canshu = test_login.canshu
  6. login = test_login.login
  7.  
  8. tenantId = xxx # 租户ID
  9. encryptionKey = "xxxxxxxxx" # 保持登陆的key
  10. passport_id = xxxxx # 跟据账号进行填写,同一个账户下的多个租户,passport.id不用更改
  11. uri = 'xxxx'
  12. user = 'xxxx'
  13.  
  14. @pytest.mark.parametrize('login', canshu, indirect=True)
  15. class Test_xxxx():
  16.  
  17. s = requests.session()
  18. def test_01(self, login):
  19. '''登陆'''
  20. result = login
  21. print("用例1: %s" % result)
  22. assert result == True
  23.  
  24. def test_02(self, login):
  25. result = login
  26. print("用例2: %s" % result)
  27. url1 = uri + "/global/login-entry.action"
  28. body1 = {
  29. "tenantId": "%s" % tenantId,
  30. "passport.id": passport_id,
  31. "encryptionKey": "%s" % encryptionKey,
  32. "loginName": "%s" % user
  33. }
  34. b = self.s.post(url1, data=body1, verify=False)
  35. data = b.json()
  36. a = data['status']
  37. if not result:
  38. pytest.xfail("登陆不成功,标记为xfail")
  39. else:
  40. print("用例2运行结果为 :True , data['status']状态为:%s" % a)
  41. assert data['status'] == 0
  42.  
  43. if __name__ == '__main__':
  44. pytest.main(['-s', 'test_parametrize.py'])

运行结果

  1. ============================= test session starts =============================
  2. platform win32 -- Python 3.6.2, pytest-3.7.4, py-1.6.0, pluggy-0.7.1
  3. rootdir: D:\python_auto\s14\pytest_learn, inifile:
  4. collected 2 items
  5.  
  6. test_parametrize.py 401
  7. 用例1: False
  8. F用例2: False
  9. x
  10.  
  11. ================================== FAILURES ===================================
  12. __________________________ Test_xxxx.test_01[login0] __________________________
  13.  
  14. self = <test_parametrize.Test_xxxx object at 0x03A4C730>, login = False
  15.  
  16. def test_01(self, login):
  17. '''登陆'''
  18. result = login
  19. print("用例1: %s" % result)
  20. > assert result == True
  21. E assert False == True
  22.  
  23. test_parametrize.py:22: AssertionError
  24. ===================== 1 failed, 1 xfailed in 0.51 seconds =====================

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

作者:含笑半步颠√

博客链接:https://www.cnblogs.com/lixy-88428977

声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。

pytest_用例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. 用例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. Pytest_用例分组(6)

    用例分组 pytest进行分组测试的方法是使用装饰器 @pytest.mark.标记名称,被标记为相同名称的用例可以看做为同一个组. 分组用例的运行方式是在执行命令中追加 -m "标记名称& ...

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

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

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

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

随机推荐

  1. shell 空语句

    在shell脚本中“:”是空命令,表示什么都不做类似于python中的pass

  2. ubuntu下Java通过JNI调用C

    下面看一个实例,如下: public class TestJNI { static { System.loadLibrary("diaoyong"); // 程序在加载时,自动加载 ...

  3. Tensorflows安装(cpu版安装方法)

    一.说明 首先声明,本人系统是Windows10 64位,Win7未试. 本文旨在帮助园友以更简单的方式安装Tensorflow,下面介绍的是如何安装Python的Tensorflow cpu版本. ...

  4. buddo源码分析-transport组件之Netty(一)

    dubbo 2.5.10 版本,netty仍然使用的是netty的3.10.5版本,我们从下面的代码可以看出,SPI默认使用的是“netty”,而不是“netty4”. package com.ali ...

  5. git clone指定branch或tag

    git clone指定branch或tag发布时间:October 28, 2018 // 分类: // No Comments 取完整: git clone https://github.com/a ...

  6. MQTT研究之EMQ:【eclipse的paho之java客户端使用注意事项】

    这里,简单记录一下自己在最近项目中遇到的paho的心得,这里也涵盖EMQX的问题. 1. cleanSession 这个标识,是确保client和server之间是否持久化状态的一个标志,不管是cli ...

  7. redis创建集群至少需要几个节点?至少需要几个master节点?

    描述: 这也算个思考吧,通过redis-trib.rb可创建redis集群,然后通过--replicas后面接的数字,表示1个主节点对应几个从节点,那么我就做了如下的测试,想要达到的效果就是有6个节点 ...

  8. Html表格和表头文字不换行

    [本文出自天外归云的博客园] 希望表头中的文字和表格中的文字不换行,只需要在th和td标签加上: nowrap="nowrap"

  9. 【原】QuickTime安装时,提示CAB文件"QuickTime.cab"中找不到此文件

    卸载安装程序:apple software updateapple mobile device supportapple 应用程序支持32apple 应用程序支持64 再重新安装quicktime

  10. SDN实验---Ryu的应用开发(四)北向接口RESTAPI

    一:推文 软件定义网络基础---REST API概述 软件定义网络基础---REST API的设计规范 二:掌握Ryu基本RESTAPI使用方法 (一)Ryu的RESTAPI (二) REST应用样例 ...