pytest学习系列_pytest-rerunfailures插件之失败重试

一、前言

  我们在做接口自动化的时候,经常遇到网络波动而引起的用例失败问题,比如超时失败,我们就需要一种自定义对所有的由于网络波动而造成失败的用例的重试机制,以更好的帮助我们的自动化工程提高稳定性。这不是用例或者是功能的问题,是第三方因素引起的。pytest的第三方插件pytest-rerunfailures给我们提供一个很好的解决方案。

二、安装

  pip install pytest-rerunfailures

三、使用方法

  1.命令行参数形式------命令行参数是针对于所有的测试用例(使用的比较多)

  • 命令:pytest --reruns 重试次数

  比如:pytest --reruns 2  表示:运行失败的用例可以重新运行2次

  --only-rerun AssertionError --only-rerun ValueError     还可以增加只针对断言或者是值错误的类型

  • 命令:pytest --reruns 重试次数 --reruns-delay 次数之间的延时设置(单位:秒)     

  比如:pytest --reruns 2 --reruns-delay 5  表示:(译:瑞软四、地类)运行失败的用例可以重新运行2次,第一次和第二次的间隔时间为5秒钟

  2.使用装饰器------装饰器是针对于单个的测试用例(使用的比较少) 

   @pytest.mark.flaky(reruns=重试次数, reruns_delay=次数之间的延时设置(单位:秒))

四、代码示例

  1、代码

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
"""
@author:durant.zeng
@Description:描述
@file:test_rerun.py
@time:2020/12/11
"""

import requests

def test_taobao():
    url = "https://taobao.com"
    r = requests.post(url=url,timeout=0.80)
    print(r.elapsed.total_seconds())

  上面的请求淘宝,客户端主动设置一个超时时间,那么执行结果就随机有两种情况,就比较好的模拟出线上环境由于网络波动而引起的用例概率性失败问题

用例成功

(CloudStorage) D:learnIOTCloudStorageunit>pytest
Test session starts (platform: win32, Python 3.7.2, pytest 6.0.1, pytest-sugar 0.9.4)
rootdir: D:learnIOTCloudStorageunit
plugins: Faker-4.1.3, rerunfailures-9.1.1, sugar-0.9.4, tavern-1.11.1, allure-pytest-2.8.18, base-url-1.4.2, forked-1.3.0, xdist-2.1.0
collecting ... 
 test_rerun.py ✓                                                                                                                             100% ████
██████
==================================================================== warnings summary =====================================================================
c:usersdurant.zeng.virtualenvscloudstoragelibsite-packagespykwalifycore.py:7
  c:usersdurant.zeng.virtualenvscloudstoragelibsite-packagespykwalifycore.py:7: DeprecationWarning: the imp module is deprecated in favour of import
lib; see the module's documentation for alternative uses
    import imp

-- Docs: https://docs.pytest.org/en/stable/warnings.html

Results (0.87s):
       1 passed

用例失败

==================================================================== warnings summary =====================================================================
c:usersdurant.zeng.virtualenvscloudstoragelibsite-packagespykwalifycore.py:7
  c:usersdurant.zeng.virtualenvscloudstoragelibsite-packagespykwalifycore.py:7: DeprecationWarning: the imp module is deprecated in favour of import
lib; see the module's documentation for alternative uses
    import imp

-- Docs: https://docs.pytest.org/en/stable/warnings.html
================================================================= short test summary info =================================================================
FAILED test_rerun.py::test_taobao - requests.exceptions.ConnectionError: ('Connection aborted.', OSError(0, 'Error'))

Results (0.97s):
       1 failed
         - test_rerun.py:12 test_taobao

  2、使用插件的命令行参数

  pytest --reruns 2

(CloudStorage) D:learnIOTCloudStorageunit>pytest --reruns 2
Test session starts (platform: win32, Python 3.7.2, pytest 6.0.1, pytest-sugar 0.9.4)
rootdir: D:learnIOTCloudStorageunit
plugins: Faker-4.1.3, rerunfailures-9.1.1, sugar-0.9.4, tavern-1.11.1, allure-pytest-2.8.18, base-url-1.4.2, forked-1.3.0, xdist-2.1.0
collecting ... 
 test_rerun.py ✓                                                                                                                             100% ████
██████
==================================================================== warnings summary =====================================================================
c:usersdurant.zeng.virtualenvscloudstoragelibsite-packagespykwalifycore.py:7
  c:usersdurant.zeng.virtualenvscloudstoragelibsite-packagespykwalifycore.py:7: DeprecationWarning: the imp module is deprecated in favour of import
lib; see the module's documentation for alternative uses
    import imp

-- Docs: https://docs.pytest.org/en/stable/warnings.html

Results (0.96s):
       1 passed

(CloudStorage) D:learnIOTCloudStorageunit>pytest --reruns 2
Test session starts (platform: win32, Python 3.7.2, pytest 6.0.1, pytest-sugar 0.9.4)
rootdir: D:learnIOTCloudStorageunit
plugins: Faker-4.1.3, rerunfailures-9.1.1, sugar-0.9.4, tavern-1.11.1, allure-pytest-2.8.18, base-url-1.4.2, forked-1.3.0, xdist-2.1.0
collecting ... 
 test_rerun.py R✓                                                                                                                            100% ████
██████
==================================================================== warnings summary =====================================================================
c:usersdurant.zeng.virtualenvscloudstoragelibsite-packagespykwalifycore.py:7
  c:usersdurant.zeng.virtualenvscloudstoragelibsite-packagespykwalifycore.py:7: DeprecationWarning: the imp module is deprecated in favour of import
lib; see the module's documentation for alternative uses
    import imp

-- Docs: https://docs.pytest.org/en/stable/warnings.html

Results (1.39s):
       1 passed
       1 rerun

  上面的结果可以看出,用例整体执行通过,重试了1次,可以很好的帮助我们解决了由于网络波动引起的用例概率性问题

五、注意事项

  • 不可以和fixture装饰器一起使用: @pytest.fixture()
  • 该插件与pytest-xdist的 --looponfail 标志不兼容
  • 该插件与核心--pdb标志不兼容
知道、想到、做到、得到
原文地址:https://www.cnblogs.com/Durant0420/p/14106310.html