[接口測試_B] 04 Pytest斷言處理_告警斷言

2021-01-08 開源優測

pytest中對告警進行斷言採用pytest.warns()方法,其斷言的方法與pytest.raises()類似。pytest.warns()除了能斷言告警外,還能夠捕獲告警信息,並對捕獲的告警信息進行分類處理,可以設定出現特定告警信息時,則用例執行失敗。

Pytest的pytest.warns()用法

pytest.warns()斷言告警信息pytest.warns()捕獲告警信息,並對告警信息進行判斷pytest.warns()記錄告警信息1、pytest.warns()斷言告警信息

pytest.warns()斷言,適用於被測方法會拋出特定告警,當出現這類告警則用例通過,否則用例失敗。

1.1採用pytest.warns()檢查代碼拋出的告警,如果沒有對應的告警拋出,則用例失敗.示例中設定了一個失敗用例和一個成功用例:

# make_warnings.pyimport warningsdeffxn(): warnings.warn("deprecated", DeprecationWarning)defnot_warn():pass對上面的2個方法進行測試:

import syssys.path.append(".")import pytestimport make_warningsclassTestWarns():deftest_depre(self):with pytest.warns(DeprecationWarning): make_warnings.fxn() deftest_not_warn(self):with pytest.warns(DeprecationWarning): make_warnings.not_warn()運行結果:

從運行結果中看出,第2個用例執行失敗,是因為該方法不會拋出告警。從失敗結果中The list of emitted warnings is: []看出,告警信息存儲在list中。

1.2 採用match正則匹配拋出的告警信息,若告警信息和告警類型不同時匹配,則用例執行失敗

import warningsimport pytestdefwarn_message(): warnings.warn("I'm a warning message", UserWarning)deftest_warn_match():with pytest.warns(UserWarning, match=r'^I.*e'): warn_message() # warn_message() # 加上這句,執行用例會看到拋出的告警1.3 將告警信息存入一個變量中,通過讀取這個變量中的信息進行斷言,包括:告警的個數、告警信息參數等。

import warningsimport pytestdefwarn_message(): warnings.warn("user", UserWarning) warnings.warn("runtime", RuntimeWarning)deftest_warn_match():with pytest.warns(UserWarning, match=r'.*t.*') as record: warn_message() assert len(record) == 2assert str(record[0].message) == "user"assert str(record[1].message) == "runtime"運行結果:

從運行結果中,可以看到,返回的list中存儲了2個warnings信息,即record是一個list,可以計算長度,並通過record[i].message獲取告警信息。PS:將示例中的match=r'.*t.*'更改為match=r'.*u.*'即可執行成功。

下面不是pytest.warns()的斷言介紹了

pytest捕獲告警信息

pytest默認捕獲除DeprecationWarning和PendingDeprecationWarning外的所有告警信息,可以在pytest.ini中進行配置,使出現這兩類告警時也會拋出告警信息:# pytest.ini[pytest]filterwarnings = once::DeprecationWarning once::PendingDeprecationWarning如果出現特定告警需要使用例執行失敗,可以採用-W命令:pytest -q test_show_warnings.py -W error::UserWarning可以在pytest.ini中設置過濾或者執行失敗,在這個過濾條件中,除UserWarning外的告警都會識別為錯誤進行處理。# pytest.ini[pytest]filterwarnings = error ignore::UserWarningpytest的標記函數處理告警信息# 忽略function中的告警@pytest.mark.filterwarnings('ignore:function')# 將用例中所有的告警都轉換為錯誤,將裝飾器作用於測試類,則測試類中的所有用例出現告警都會失敗@pytest.mark.filterwarnings('error')不捕獲告警信息,可以在文件中進行配置,或者在命令行傳遞-p no:warnings,那麼當用例存在告警信息時,都不會在結果中輸出告警信息:# pytest.ini[pytest]addopts = -p no:warningspytest記錄告警信息

可以採用recwarn fixture記錄函數的全部告警信息每個告警記錄包含以下屬性:messagecategoryfilenamelinenofileline每個告警記錄具有list的屬性,可調用以下方法:

pop()clear()import warningsdeftest_hello(recwarn): warnings.warn("hello", UserWarning)assert len(recwarn) == 1 w = recwarn.pop(UserWarning)assert issubclass(w.category, UserWarning) assert str(w.message) == "hello"assert w.filename assert w.lineno

作者: 樂大爺博客聲明:本文已獲作者授權轉載,著作權歸作者所有。

相關焦點

  • [接口測試_B] 03 Pytest斷言處理_assert和異常斷言
    >斷言預期的異常斷言預期的告警利用上下文信息進行斷言自定義斷言方式使用assert語句進行斷言>pytest允許使用python的標準assert語句進行斷言處理採用assert斷言時,可添加備註信息,當斷言失敗時,備註信息會以assertionerror拋出,並在控制臺輸出import requests
  • Pytest中斷言的重要性,就不需要我重複了吧
    出品 | 51Testing軟體測試網前言 我們在寫自動化的過程中,用例的斷言也是至關重要的,斷言可以幫助我們判斷用例測試點是否成功和失敗。當然在我們這麼強大的Pytest框架中,斷言也是比較強大的。為什麼?繼續往下看 。
  • Pytest丨如何使用全功能的Python測試框架?小白必看
    關注我,每周分享軟體測試技術乾貨、面試經驗,想要進入軟體測試學習交流群的可以直接私信我哦~~我們在寫自動化的過程中,用例的斷言也是至關重要的,斷言可以幫助我們判斷用例測試點是否成功和失敗。當然在我們這麼強大的pytest框架中,斷言也是比較強大的。為什麼?繼續往下看。
  • JMeter接口測試之斷言實現
    在接口測試中,我們預設接口響應結果中會出現一個片段,我們稱之為預期值,斷言會在接口調用後嘗試捕捉這個預期值,如果能捕捉到,則判定接口成功,否則判定接口為失敗。用過loadrunner的朋友一定記得檢查點這個概念,斷言和檢查點實質上是一樣的。為什麼需要斷言?因為JMeter默認接口響應碼200即為成功:
  • pytest封神之路第六步 斷言技巧
    pytest的斷言把Python語言簡潔的優點發揮的淋漓盡致,因為它用的就是Python的標準斷言assert。pytest.raisespytest.raises用於斷言異常。示例,斷言會拋出ZeroDivisionError,如果拋出了測試結果是pass,如果沒拋出,測試結果是failedimport pytestdef test_zero_division():    with pytest.raises
  • Python 中不盡如人意的斷言 Assertion
    假如你是一名測試汪,有成千上萬的測試案例需要做斷言做驗證,相信你面對以上做法,心中一定有千萬隻那種馬奔騰而過。改進方案 #2不管你是你是搞測試還是開發的,想必聽過不少測試框架。你猜到我要說什麼了吧?對,不用測試框架裡的斷言機制,你是不是灑。
  • itest(愛測試) 6.6.0 發布,新增拖拽生成接口測試斷言
    其中包含同類接口測試中首創的拖拽的方式生成斷言,對不會編碼的測試人員來說,這絕對是個好消息;另外BUG處理流程做了優化;同時解決一個偶發的重要BUG;另外還優化了用例包執行用例,支持按用例標籤和模塊名二次查詢;鏡像支持,mysql 8以及鏡像增加和宿主機時間同步等等。
  • python pytest接口自動化框架搭建
    此時,在執行pytest命令時,會自動從當前目錄及子目錄中尋找符合上述約束的測試函數來執行。3.測試用例搜索定義是:搜索測試文件和測試用例的過程稱為測試搜索.-k 選項重要功能是利用你使用的表達式來 指定希望運行的測試用例.比如:你用 pytest -k 「表達式」pytest 根據 你輸入的表達式內容進行去匹配 測試用例的名字裡是否有這個表達式內容進行過濾.然後再運行. 如果想查找多個內容,可以用 or 進行連接 ,請看下邊的截圖:
  • 【143】python 之斷言assert用法
    內容目錄(原文見公眾號python寶)一、Python之單元測試以及斷言assert二、單元測試的基本寫法三、資料庫測試四、基本assert
  • Pytest的基本應用(一)
    pytest就顯得自由,它把每一個以test_開頭或者是_test結尾的都看成是一個測試對象,同時它的斷言是Python的原生斷言assert,這樣使用起來更加的自由,只要編寫的不管是模塊還是類,符合它的要求,都是可以執行的。
  • 用Groovy處理JMeter斷言和日誌
    本來想弄個斷言就好了,沒想到日誌模塊比較簡單,也就順手寫個Demo。查閱完官方文檔得出結論,腳本語言如:Groovy,在jmeter體系中基本說是全能的,例如:處理請求、響應、參數、變量以及收集器和監聽器(這些以後有機會再寫文章,有需求的請異步官方Demo)。
  • 基於Pytest框架的自動化測試開發實踐(萬字長文入門篇)
    測試框架的作用是,幫助我們管理測試用例、執行測試用例、參數化、斷言、生成測試報告等基礎性工作,讓我們將精力用在測試用例的編寫上。好的測試框架應該具有很高的擴展性,支持二次開發,並能夠支持多種類型的自動化測試。
  • 全網獨家的 Jmeter 循環斷言
    前言 對於使用 jmeter 工具完成接口測試的測試工程師而言。在工作中,或者在面試中,都會遇到一個問題。 CSV 文檔做了一大筆測試數據後,怎麼去校驗這個結果呢?
  • 實戰 | 接口自動化測試框架開發(Pytest+Allure+AIOHTTP+用例自動生成)
    ,然而接口的數量一般都很多,而且會越來越多,所以提高執行效率很有必要;接口測試的用例其實也可以用來兼做簡單的壓力測試,而壓力測試需要並發;接口測試的用例有很多重複的東西,測試人員應該只需要關注接口測試的設計,這些重複勞動最好自動化來做;Pytest 和 Allure 太好用了,新框架要集成它們;接口測試的用例應該儘量簡潔,最好用 yaml,這樣數據能直接映射為請求數據
  • 技術面試沒過,居然是因為沒用過 pytest 單元測試框架
    unittest 和 pytest 都是單元測試框架。單元測試指的是在編程過程當中形成的對函數或者是類下面的方法進行測試的一個過程。在不使用任何框架的前提下,其實也是可以進行單元測試的。比如我們可以通過 if 判斷異常處理或者是其他的流程控制來表示測試是否通過。
  • 自動化測試面試題(附答案)
    1)必填欄位:請求參數必填項、可選項2)合法性:輸入輸出合法、非法參數3)邊界:請求參數邊界值等4)容錯能力:大容量數據、頻繁請求、重複請求(如:訂單)、異常網絡等的處理5)響應數據校驗:斷言、數據提取傳遞到下一級接口…6)邏輯校驗:如兩個請求的接口有嚴格的先後順序,需要測試調轉順序的情況
  • Golang 類型斷言 vs 類型轉換
    在Go中,類型斷言和類型轉換是一個令人困惑的事情,他們似乎都在做同樣的事情。這篇文章,我們將看到類型斷言和類型轉換實際上是如何截然不同的,並深入了解在Go中使用它們會發生什麼。類型斷言顧名思義,類型斷言用於斷言變量是屬於某種類型。類型斷言只能發生在interface{}類型上。上面類型斷言的例子,greeting是一個interface{}類型,我們為其分配了一個字符串。現在,我們可以認為greeting實際上是一個string,但是對外展示的是一個interface{}。
  • DOClever 5.5.0 自動化測試支持斷言,支持多接口快速聯調
    無論你是前端工程師,還是後端工程師,接口永遠都是兩者交互的橋梁,所以 DOClever 專為中小型團隊量身打造,旨在解決接口的管理,測試與數據生成,實現真正的一體化解決方案。目前DOClever已經完成了文檔,接口和測試三位一體的生態搭建,擁有線上用戶1w+,接口數10w+,每天日活600+,成功為滴滴,同程,58等網際網路公司提供了接口管理和自動化測試服務,我們接下來的發展方向是讓DOClever立志成為一個項目中後階段的掌舵手,從項目的接口,文檔,測試三個方面為開發者們提供更強大,更快捷的服務!
  • PostMan接口測試(很全面的接口測試教程)
    前言在前後端分離開發時,後端工作人員完成系統接口開發後,需要與前端人員對接,測試調試接口,驗證接口的正確性可用性。而這要求前端開發進度和後端進度保持基本一致,任何一方的進度跟不上,都無法及時完成功能模塊的測試。
  • java基礎之斷言細談
    斷言是JDK1.4中引入的一個新的關鍵字,是一種錯誤處理機制,是在程序的開發和測試階段使用的工具。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;(程式設計師認為這個狀態是true。)如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告並且退出。