最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pytest失敗重跑機(jī)制pytest-rerunfailures的實(shí)現(xiàn)

 更新時(shí)間:2025年06月29日 10:20:52   作者:Tom Boom  
pytest-rerunfailures插件是解決自動(dòng)化測(cè)試偶發(fā)故障的有效工具,通過(guò)--reruns設(shè)置重試次數(shù)和--reruns-delay配置間隔時(shí)間,具有一定的參考價(jià)值,感興趣的可以了解一下

在自動(dòng)化測(cè)試中,偶發(fā)性失敗是常見痛點(diǎn)。本文將深入解析如何通過(guò)pytest-rerunfailures插件優(yōu)雅解決偶發(fā)故障問(wèn)題。

一、核心命令解析

安裝命令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest-rerunfailures
  • -i:指定鏡像源(國(guó)內(nèi)加速)
  • pypi.tuna.tsinghua.edu.cn:清華大學(xué)PyPI鏡像
  • pytest-rerunfailures:失敗重跑插件

基礎(chǔ)重跑命令

pytest -s testcases/test_rerun.py --reruns 5
  • --reruns 5:最大重試次數(shù)(失敗后自動(dòng)重跑最多5次)

延遲重跑命令

pytest -s testcases/test_rerun.py --reruns 5 --reruns-delay 1
  • --reruns-delay 1:每次重試間隔1秒

二、為什么需要失敗重跑?

偶發(fā)性失敗的常見原因

失敗類型占比典型場(chǎng)景
環(huán)境波動(dòng)40%網(wǎng)絡(luò)抖動(dòng)、資源競(jìng)爭(zhēng)
時(shí)序問(wèn)題30%異步操作未完成
第三方依賴20%API限流、服務(wù)不穩(wěn)定
隨機(jī)因素10%隨機(jī)數(shù)據(jù)沖突

重跑機(jī)制的價(jià)值

graph LR
    A[首次失敗] --> B{是否可重跑?}
    B -->|是| C[自動(dòng)重試]
    B -->|否| D[標(biāo)記失敗]
    C --> E{重試成功?}
    E -->|是| F[報(bào)告成功]
    E -->|否| D

三、實(shí)戰(zhàn)演示:重跑機(jī)制應(yīng)用

測(cè)試場(chǎng)景:支付結(jié)果查詢

# test_payment.py
import pytest
import random

def test_payment_status():
    """ 模擬第三方支付接口的不穩(wěn)定響應(yīng) """
    result = random.choice([True, False])  # 50%失敗率
    assert result, "支付狀態(tài)查詢失敗"

執(zhí)行結(jié)果對(duì)比

無(wú)重跑機(jī)制

$ pytest test_payment.py
============================
1 failed in 0.12s

啟用重跑機(jī)制

$ pytest test_payment.py --reruns 3 --reruns-delay 0.5
============================
rerun test_payment.py::test_payment_status
Rerun #1: 失敗
Rerun #2: 成功

1 passed, 2 rerun in 0.87s

四、進(jìn)階使用技巧

1. 標(biāo)記特定測(cè)試重跑

@pytest.mark.flaky(reruns=3, reruns_delay=1)
def test_api_connection():
    response = requests.get("https://unstable-api.com")
    assert response.status_code == 200

優(yōu)勢(shì):針對(duì)不穩(wěn)定API單獨(dú)設(shè)置重試策略

2. 條件重跑(僅重試特定異常)

@pytest.mark.flaky(
    reruns=3, 
    condition=TypeError  # 僅當(dāng)捕獲TypeError時(shí)重試
)
def test_data_processing():
    # 可能因數(shù)據(jù)類型錯(cuò)誤失敗
    process_data(get_external_data())

3. 重跑結(jié)果報(bào)告增強(qiáng)

pytest --reruns 2 --reruns-delay 1 --html=report.html

報(bào)告效果

測(cè)試用例      狀態(tài)     重試次數(shù)
test_login   PASSED   0
test_payment PASSED   2 (首次失敗)

五、重跑機(jī)制原理剖析

執(zhí)行流程

1. pytest收集測(cè)試用例
2. 執(zhí)行原始測(cè)試
   - 成功 → 記錄結(jié)果
   - 失敗 → 觸發(fā)重試機(jī)制
3. 重試執(zhí)行(最多N次)
   - 任意成功 → 標(biāo)記為passed
   - 全部失敗 → 標(biāo)記為failed
4. 生成最終報(bào)告

注意事項(xiàng)

  1. setup/teardown:每次重試都會(huì)重新執(zhí)行
  2. 測(cè)試狀態(tài):只有最終狀態(tài)計(jì)入報(bào)告
  3. 耗時(shí)計(jì)算:包含所有重試時(shí)間總和

六、最佳實(shí)踐指南

1. 重試策略配置建議

場(chǎng)景類型rerunsreruns-delay說(shuō)明
網(wǎng)絡(luò)依賴3-51-3s等待網(wǎng)絡(luò)恢復(fù)
異步操作2-30.5-1s給操作完成時(shí)間
高負(fù)載服務(wù)5+隨機(jī)延遲避免雪崩效應(yīng)
數(shù)據(jù)庫(kù)競(jìng)爭(zhēng)30.3s減少鎖沖突

2. 避免濫用重跑

不應(yīng)使用重跑的場(chǎng)景

  • 邏輯性錯(cuò)誤(永遠(yuǎn)失敗)
  • 環(huán)境配置錯(cuò)誤
  • 數(shù)據(jù)一致性問(wèn)題
  • 性能不達(dá)標(biāo)場(chǎng)景

3. 結(jié)合其他機(jī)制

# 重跑+分布式執(zhí)行
pytest -n auto --reruns 3

# 重跑+失敗截圖
pytest --reruns 2 --screenshot-on-failure

# 重跑+性能監(jiān)控
pytest --reruns 1 --perf-monitor

七、企業(yè)級(jí)應(yīng)用案例

案例1:電商支付系統(tǒng)測(cè)試

挑戰(zhàn):支付網(wǎng)關(guān)接口偶發(fā)超時(shí)(發(fā)生率約5%)
解決方案

pytest tests/payment/ --reruns 3 --reruns-delay 2

效果

  • 測(cè)試穩(wěn)定性從95%提升至99.9%
  • 誤報(bào)缺陷減少90%
  • 團(tuán)隊(duì)信任度顯著提升

案例2:微服務(wù)集成測(cè)試

問(wèn)題:服務(wù)啟動(dòng)順序?qū)е屡及l(fā)失敗
重跑策略

@pytest.mark.flaky(
    reruns=2, 
    reruns_delay=5,  # 等待服務(wù)注冊(cè)完成
    condition=ConnectionError
)
def test_service_integration():
    # 測(cè)試服務(wù)間調(diào)用

案例3:移動(dòng)App自動(dòng)化測(cè)試

特殊需求

  • 首次安裝權(quán)限彈窗干擾
  • 應(yīng)用啟動(dòng)時(shí)間波動(dòng)
    定制方案
pytest mobile_tests/ --reruns 1 --reruns-delay 10

首次失敗后等待10秒重試,避開初始化階段

八、常見問(wèn)題解決方案

Q1:重跑導(dǎo)致測(cè)試時(shí)間過(guò)長(zhǎng)

解決方案

# 只對(duì)標(biāo)記為flaky的測(cè)試重跑
pytest -m flaky --reruns 3

# 使用智能延遲(指數(shù)退避)
@pytest.mark.flaky(reruns=3, reruns_delay="exponential")

Q2:如何區(qū)分重跑日志?

# conftest.py
def pytest_runtest_logstart(nodeid, location):
    if hasattr(request.node, "execution_count"):
        count = request.node.execution_count
        print(f"\n[重試 #{count}] {nodeid}")

Q3:重跑后如何清理狀態(tài)?

@pytest.fixture(autouse=True)
def cleanup_after_retry(request):
    yield
    if hasattr(request.node, "execution_count"):
        # 每次重試后清理
        reset_test_state()

九、重跑機(jī)制核心價(jià)值

核心優(yōu)勢(shì)矩陣

維度傳統(tǒng)模式重跑機(jī)制
穩(wěn)定性偶發(fā)失敗導(dǎo)致誤報(bào)過(guò)濾偶發(fā)故障
可信度報(bào)告可信度低真實(shí)反映質(zhì)量
維護(hù)成本大量時(shí)間排查偽缺陷聚焦真實(shí)問(wèn)題
執(zhí)行效率手動(dòng)重跑浪費(fèi)時(shí)間自動(dòng)恢復(fù)執(zhí)行

最佳實(shí)踐口訣

偶發(fā)失敗不用慌,rerun插件來(lái)幫忙
--reruns 設(shè)次數(shù),--delay 定間隔
標(biāo)記注解更精準(zhǔn),避免濫用記心上
結(jié)合報(bào)告分布式,測(cè)試穩(wěn)定又高效

通過(guò)合理應(yīng)用pytest-rerunfailures,您可以將自動(dòng)化測(cè)試的穩(wěn)定性提升到新的高度。記?。?strong>重跑是應(yīng)對(duì)偶發(fā)故障的利器,但不是代碼質(zhì)量問(wèn)題的遮羞布。當(dāng)測(cè)試頻繁重試時(shí),仍需深入分析根本原因!

到此這篇關(guān)于Pytest失敗重跑機(jī)制pytest-rerunfailures的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Pytest失敗重跑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Python實(shí)現(xiàn)批量修改文件的修改日期功能

    使用Python實(shí)現(xiàn)批量修改文件的修改日期功能

    在日常的文件管理中,您可能需要批量修改文件的修改日期,比如,您可能希望將某個(gè)文件夾中的所有文件的修改日期隨機(jī)設(shè)置為6到8月份之間的日期,這在數(shù)據(jù)整理中可能非常有用,本文將詳細(xì)介紹如何使用Python實(shí)現(xiàn)這一功能,需要的朋友可以參考下
    2024-10-10
  • Python淺析多態(tài)與鴨子類型使用實(shí)例

    Python淺析多態(tài)與鴨子類型使用實(shí)例

    python是一門解釋語(yǔ)言,但是同java等靜態(tài)語(yǔ)言一樣,是可以通過(guò)繼承的方式實(shí)現(xiàn)多態(tài)。而且python還有一個(gè)自己的特殊實(shí)現(xiàn)多態(tài)的方法,就是通過(guò)鴨子類型,來(lái)實(shí)現(xiàn)多態(tài)
    2022-10-10
  • Python字典和集合講解

    Python字典和集合講解

    這篇文章主要給大家假關(guān)節(jié)的是Python字典和集合,字典是Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,是一個(gè)無(wú)序的序列;而集合是python語(yǔ)言提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu),沒(méi)有value的字典,集合類型與其他類型最大的區(qū)別在于,它不包含重復(fù)元素。想具體了解有關(guān)python字典與集合,請(qǐng)看下面文章內(nèi)容
    2021-10-10
  • 在anaconda中配置graphviz包的詳細(xì)過(guò)程

    在anaconda中配置graphviz包的詳細(xì)過(guò)程

    graphviz是貝爾實(shí)驗(yàn)室開發(fā)的一個(gè)開源的工具包,它使用一個(gè)特定的DSL(領(lǐng)域特定語(yǔ)言):dot作為腳本語(yǔ)言,然后使用布局引擎來(lái)解析此腳本,并完成自動(dòng)布局,這篇文章主要介紹了如何在anaconda中配置graphviz包,需要的朋友可以參考下
    2023-02-02
  • python opencv 讀取圖片 返回圖片某像素點(diǎn)的b,g,r值的實(shí)現(xiàn)方法

    python opencv 讀取圖片 返回圖片某像素點(diǎn)的b,g,r值的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇python opencv 讀取圖片 返回圖片某像素點(diǎn)的b,g,r值的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Vscode使用matplotlib顯示圖像詳細(xì)圖文教程

    Vscode使用matplotlib顯示圖像詳細(xì)圖文教程

    最近使用python里的matplotlib庫(kù)繪圖,想在代碼結(jié)束時(shí)顯示圖片看看,下面這篇文章主要給大家介紹了關(guān)于Vscode使用matplotlib顯示圖像的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Python表示當(dāng)前時(shí)間的方法合集

    Python表示當(dāng)前時(shí)間的方法合集

    在 Python 中獲取當(dāng)前時(shí)間是許多與時(shí)間有關(guān)的操作的一個(gè)很好的起點(diǎn)。一個(gè)非常重要的用例是創(chuàng)建時(shí)間戳。在本教程中,你將學(xué)習(xí)如何用 datetime 模塊獲取、顯示和格式化當(dāng)前時(shí)間
    2023-01-01
  • 輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI

    輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI

    這篇文章主要教大家如何輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python 自定義裝飾器實(shí)例詳解

    python 自定義裝飾器實(shí)例詳解

    這篇文章主要介紹了python 自定義裝飾器,結(jié)合實(shí)例形式分析了Python自定義裝飾器的功能、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-07-07
  • python Tcp協(xié)議發(fā)送和接收信息的例子

    python Tcp協(xié)議發(fā)送和接收信息的例子

    今天小編就為大家分享一篇python Tcp協(xié)議發(fā)送和接收信息的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07

最新評(píng)論

深圳市| 广南县| 泰宁县| 柳林县| 日喀则市| 潞城市| 丰顺县| 大邑县| 抚远县| 郴州市| 吴旗县| 黎平县| 五莲县| 长丰县| 道孚县| 青海省| 察隅县| 虎林市| 瑞昌市| 安丘市| 罗源县| 胶南市| 元氏县| 华亭县| 惠来县| 绩溪县| 迁西县| 淳化县| 从江县| 蓬莱市| 普陀区| 陇南市| 阿克陶县| 车致| 新兴县| 安阳县| 喀什市| 漳州市| 和政县| 滨州市| 石景山区|