• 【自动化测试】Pytest框架 —— 跳过测试和失败重试


    1、Pytest跳过测试用例

    自动化测试执行过程中,我们常常出现这种情况:因为功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了, 如果我们注释掉或删除掉这些测试用例,后面可能还要进行恢复操作,这时我们就可以配置跳过这些用例。

    Pytest测试框架中存在两个跳过测试的方法:skipskipif

    (1)无条件跳过skip

    skip方法为无条件跳过测试用例。

    使用方法:@pytest.mark.skip标记在需要跳过的测试用例上。

    (2)有条件跳过skipif

    skipif方法为有条件跳过测试用例,条件为真跳过。

    使用方法:@pytest.mark.skipif(condition=跳过的条件, reason=跳过的原因),

    标记在需要符合条件跳过的测试用例上。

    • 参数condition:跳过的条件,为True则跳过测试,为False则继续执行测试,默认为True。
    • 参数reason:标注跳过的原因,必填参数。

    (3)练习

    1. """
    2. 1.学习目标
    3. 掌握pytest中跳过测试方法
    4. 2.操作步骤
    5. skipif(condition=判断条件,reason=跳过原因)
    6. 使用时放置在需要跳过的用例之前
    7. @pytest.mark.skipif(条件,原因) # 当条件为真,跳过执行
    8. 3.需求
    9. """
    10. # 导入pytest
    11. import pytest
    12. # 编写测试用例
    13. def login_data():
    14. return "jerry", "123456"
    15. # 无条件跳过
    16. @pytest.mark.skip
    17. def test_register():
    18. """注册用例"""
    19. print("注册步骤")
    20. assert False
    21. # 当条件为真,跳过测试
    22. @pytest.mark.skipif(login_data()[0] == "jerry", reason="jerry用户不存在")
    23. def test_login():
    24. """不记住密码登录"""
    25. username = login_data()[0]
    26. password = login_data()[1]
    27. print(f"输入用户名{username}")
    28. print(f"输入密码{password}")
    29. print("点击登录按钮")
    30. assert username == "jerry"
    31. def test_shopping():
    32. """购物下单"""
    33. print("购物流程")
    34. assert True
    35. if __name__ == '__main__':
    36. pytest.main()
    37. """
    38. 执行结果:跳过一个用例 : 1通过,2跳过
    39. test_pytest_01.py::test_register
    40. test_pytest_01.py::test_login
    41. test_pytest_01.py::test_shopping
    42. ======================== 1 passed, 2 skipped in 0.04s =========================
    43. Process finished with exit code 0
    44. SKIPPED (unconditional skip)
    45. Skipped: unconditional skip
    46. SKIPPED (jerry用户不存在)
    47. Skipped: jerry用户不存在
    48. 购物流程
    49. PASSED
    50. """
    51. # 注:跳过的用例测试结果标识为s

    2、Pytest失败重试

    Pytest失败重试就是,在执行一次测试脚本时,如果一个测试用例执行结果失败了,则重新执行该测试用例。

    1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
    2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
    3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
    4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
    5. 可以免费学习!划重点!开源的!!!
    6. qq群号:110685036【暗号:csdn999

    前提:

    Pytest测试框架失败重试需要下载pytest-rerunfailures插件。

    安装方式:pip install pytest-rerunfailures

    Pytest实现失败重试的方式:

    方式一:在命令行或者main()函数中使用

    pytest.main(['-vs','test_a.py','--reruns=2'])(这种方式没有实现成功,可能自己环境的问题)

    或者:

    pytest -vs ./test_a.py --reruns 2 --reruns-delay 2(可以)

    表示:失败重试2次,在每次重试前会等到2秒。

    说明: reruns为重跑次数,reruns_delay为间隔时间,单位s

    方式二:在pytest.ini配置文件中使用(推荐)

    pytest.ini配置文件中addopts添加reruns重试参数

    1. [pytest]
    2. addopts = -s --reruns 2 --reruns-delay 2
    3. testpaths = scripts
    4. python_files = test_01.py
    5. python_classes = Test*
    6. python_functions = test*

    示例:使用第二种方式:

    1. """
    2. 1.学习目标
    3. 掌握pytest中用例失败重试方法
    4. 2.操作步骤
    5. 2.1 安装 pytest-rerunfailures
    6. pip install pytest-rerunfailures
    7. 2.2 使用 在pytest.ini文件中,添加一个命令行参数
    8. --reruns n # n表示重试次数
    9. 3.需求
    10. """
    11. # 1.导入pytest
    12. import pytest
    13. # 2.编写测试用例
    14. @pytest.mark.run(order=2)
    15. def test_login():
    16. """登录用例"""
    17. print("登录步骤")
    18. assert "abcd" in "abcdefg"
    19. @pytest.mark.run(order=1)
    20. def test_register():
    21. """注册用例"""
    22. print("注册步骤")
    23. assert False
    24. @pytest.mark.run(order=4)
    25. def test_shopping():
    26. """购物下单"""
    27. print("购物流程")
    28. assert True
    29. @pytest.mark.run(order=3)
    30. def test_cart():
    31. """购物车用例"""
    32. print("购物车流程")
    33. assert True
    34. if __name__ == '__main__':
    35. pytest.main(['-vs', 'test_01.py', '--reruns=2'])
    36. # pytest ./pytest_demo/test_01.py --reruns 10 --reruns-delay 1
    37. #
    38. """
    39. 执行结果:注意有两个:2 rerun
    40. ==================== 1 failed, 3 passed, 2 rerun in 0.09s =====================
    41. test_01.py::test_register 注册步骤
    42. RERUN
    43. test_01.py::test_register 注册步骤
    44. RERUN
    45. test_01.py::test_register 注册步骤
    46. FAILED
    47. pytest_demo\test_01.py:20 (test_register)
    48. @pytest.mark.run(order=1)
    49. def test_register():
    50. ""注册用例""
    51. print("注册步骤")
    52. > assert False
    53. E assert False
    54. test_01.py:25: AssertionError
    55. 登录步骤
    56. PASSED购物车流程
    57. PASSED购物流程
    58. PASSED
    59. """

    注意:如果设置失败重试5次,在重试的过程中成功了,就不用全部跑完5次重试,这里需要注意一下。 

    END今天的分享就到此结束了,点赞关注不迷路

  • 相关阅读:
    document对象概念介绍、验证用户名是否有效、正则表达式对象、两种常见的验证提示效果
    安卓实现简单砸地鼠游戏
    一文了解JPA、Hibernate、Spring Data JPA之间的爱恨情仇
    SpringBoot中如何实现业务校验,这种方式才叫优雅!
    逆地理编码-离线版-part1
    React环境搭建
    Spring MVC拦截器、文件上传和全局异常处理
    docker-Cgroups的资源限制
    PHP两个三元运算符“??” 和“?:”的用法和区别
    C++学习规划“的 PPT 大纲设计
  • 原文地址:https://blog.csdn.net/qq_43371695/article/details/134320134