【143】python 之斷言assert用法

2021-02-23 python寶

內容目錄(原文見公眾號python寶)

一、Python之單元測試以及斷言assert二、單元測試的基本寫法三、資料庫測試四、基本assert斷言方法

一、Python之單元測試以及斷言assert

  所有的程序開發過程一般包括以下幾個階段:[需求分析,設計階段,實現階段,測試階段]。其中測試階段通過人工或自動來運行測試某個系統的功能。目的是檢驗其是否滿足需求,並得出特定的結果,以達到弄清楚預期結果和實際結果之間的差別的最終目的。

        測試的分類(測試從軟體開發過程可以分為):

單元測試:對單獨的代碼塊(例如函數)分別進行測試,以保證它們的正確性

集成測試:對大量的程序單元的協同工作情況做測試

系統測試:同時對整個系統的正確性進行檢查,而不是針對獨立的片段

          Python assert(斷言)用於判斷一個表達式,在表達式條件為 false 的時候觸發異常。

        斷言可以在條件不滿足程序運行的情況下直接返回錯誤,而不必等待程序運行後出現崩潰的情況,例如我們的代碼只能在 Linux 系統下運行,可以先判斷當前系統是否符合條件。

        在眾多的測試中,與程序開發人員最密切的就是單元測試,因為單元測試是由開發人員進行的,而其他測試都由專業的測試人員來完成。所以我們主要學習單元測試。

二、單元測試的基本寫法

        setUp:表示前置條件,它在每一個用例執行之前必須會執行一次 

        setUp可以理解為我們需要自動化測試時,需要打開網頁窗口,輸入對應測試地址,這一些屬於前置條件。

        tearDown:表示釋放資源,它在每次用例執行完之後會執行一次

        tearDown可以理解為我們測試完畢後,需要關閉瀏覽器。

        1. 每次執行函數方法時,必須先執行一次setUp()函數,執行完一個函數方法後,必須再執行一次tearDown()函數

        2. 執行函數的時候有序號時,例如testxx1,testxx2 會根據序號來進行執行

        3. 當函數方法不是以test開頭是,不執行該方法。

        若我想要改變setUp()在所有用例執行之前只執行一次,和tearDown()函數在所有用例執行之後只執行一次的話

        1. 需要使用python中的@classmethod內置裝飾器

        2. 需要把函數名改為setUpClass(cls) / tearDownClass(cls)  


#!/usr/bin/env/python
# -*-coding:utf-8-*-

import pytest

"""
只對函數用例生效,不在類中
setup_function
teardown_function
"""


def setup_function():
    print "setup_function():每個方法之前執行"


def teardown_function():
    print "teardown_function():每個方法之後執行"


def test_01():
    print "正在執行test1"
    x = "this"
    assert 'h' in x


def test_02():
    print "正在執行test2"
    x = "hello"
    assert hasattr(x,"hello")


def add(a,b):
    return a+b


def test_add():
    print "正在執行test_add()"
    assert add(3,4) == 7

if __name__=="__main__":
    pytest.main(["-s","test_function.py"])

# 運行結果為:(-s為了顯示用例的列印信息   -q只顯示結果不顯示過程)

三、資料庫測試

#coding=utf-8import unittestfrom author_book import *#自定義測試類,setUp方法和tearDown方法會分別在測試前後執行。# 以test_開頭的函數就是具體的測試代碼。# class DatabaseTestCase(unittest.TestCase):
    def setUp(self):
        app.config['TESTING'] = True
        app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@localhost/test0'
        self.app = app
        db.create_all()    def tearDown(self):
        db.session.remove()
        db.drop_all()    #測試代碼
    def test_append_data(self):
        au = Author(name='itcast')
        bk = Book(info='python')
        db.session.add_all([au,bk])
        db.session.commit()
        author = Author.query.filter_by(name='itcast').first()
        book = Book.query.filter_by(info='python').first()        #斷言數據存在
        self.assertIsNotNone(author)
        self.assertIsNotNone(book)

四、基本assert斷言方法

        基本的斷言方法提供了測試結果是True還是False。所有的斷言方法都有一個msg參數,如果指定msg參數的值,則將該信息作為失敗的錯誤信息返回。

序號斷言方法斷言描述1assertEqual(arg1, arg2, msg=None)驗證arg1=arg2,不等則fail2assertNotEqual(arg1, arg2, msg=None)驗證arg1 != arg2, 相等則fail3assertTrue(expr, msg=None)驗證expr是true,如果為false,則fail4assertFalse(expr,msg=None)驗證expr是false,如果為true,則fail5assertIs(arg1, arg2, msg=None)驗證arg1、arg2是同一個對象,不是則fail6assertIsNot(arg1, arg2, msg=None)驗證arg1、arg2不是同一個對象,是則fail7assertIsNone(expr, msg=None)驗證expr是None,不是則fail8assertIsNotNone(expr, msg=None)驗證expr不是None,是則fail9assertIn(arg1, arg2, msg=None)驗證arg1是arg2的子串,不是則fail10assertNotIn(arg1, arg2, msg=None)驗證arg1不是arg2的子串,是則fail11assertIsInstance(obj, cls, msg=None)驗證obj是cls的實例,不是則fail12assertNotIsInstance(obj, cls, msg=None)驗證obj不是cls的實例,是則fail

參考:https://www.cnblogs.com/gcgc/p/11513184.html

● 本文作者:小麥粒,專注於python、數據分析、數據挖掘、機器學習相關技術,也注重技術的運用

● 作者博客地址:https://blog.csdn.net/u010986753

● 本系列題目來源於作者的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

● 個人微信號:pythonbao 聯繫我加微信群

●個人 QQ:87605025

● QQ交流群pythonbao :483766429

● 公眾號:python寶 或 DB寶

● 提供OCP、OCM和高可用最實用的技能培訓

● 題目解答若有不當之處,還望各位朋友批評指正,共同進步

歡迎讚賞哦!有您的支持,小麥粒一定會越來越好!

您的讚賞是我持續更新的動力哦

相關焦點

  • 斷言(assert)的用法
    本文轉載自【微信公眾號:雲深之無跡,ID:TT1827652464】經微信公眾號授權轉載,如需轉載與原文作者聯繫斷言(assert)的用法我一直以為 assert 僅僅是個報錯函數,事實上,它居然是個宏,並且作用並非"報錯"。
  • Python assert斷言函數及用法
    Python assert 語句,又稱斷言語句,可以看做是功能縮小版的 if 語句,它用於判斷某個表達式的值,如果值為真,則程序可以繼續往下執行
  • [接口測試_B] 03 Pytest斷言處理_assert和異常斷言
    >斷言預期的異常斷言預期的告警利用上下文信息進行斷言自定義斷言方式使用assert語句進行斷言>pytest允許使用python的標準assert語句進行斷言處理採用assert斷言時,可添加備註信息,當斷言失敗時,備註信息會以assertionerror拋出,並在控制臺輸出import requests
  • Python 中不盡如人意的斷言 Assertion
    ,你可以在assert後面跟上任意判斷條件,如果斷言失敗則會拋出異常。py.testpy.test 是一個輕量級的測試框架,所以它壓根就沒寫自己的斷言系統,但是它對Python自帶的斷言做了強化處理,如果斷言失敗,那麼框架本身會儘可能多地提供斷言失敗的原因。那麼也就意味著,用py.test實現測試,你一行代碼都不用改。
  • Python每天一分鐘:pass與assert語句詳解
    今天為大家介紹的是python中兩個經典的語句:pass語句和assert語句!請注意我們這裡用的修飾詞是語句,表明其使用方式類似if,else,for等這樣的修飾語句,而不是函數。下面將為大家詳細介紹python中的pass和assert語句的功能與示例。
  • assert函數-論java中assert函數和Python、PHP、C語言assert函數
    assert函數廣泛在java、Python、PHP、C語言中存在,都有統一的意義,用業界語言稱之為"斷言"。assert函數assert函數 Java中,斷言關鍵字是從JAVA SE 1.4引入的。
  • C語言C++中assert的用法
    斷言assert原型 void assert(int expression);
  • C/C assert()函數用法總結與注意事項
    簡介assert宏的原型定義在中,其作用是如果它的條件返回錯誤,則終止程序執行。原型定義:#include void assert( int expression );assert的作用是先計算表達式 expression ,如果其值為假(即為0),那麼它先向stderr列印一條出錯信息,然後通過調用 abort 來終止程序運行。
  • Pytest丨如何使用全功能的Python測試框架?小白必看
    pytest斷言前面說到pytest的斷言比較強大,它直接可以使用python自帶的斷言內容,當然不止而已,pytest還有一個重要的功能是可以重寫assert關鍵字,pytest會截斷對python中自帶的assert的調用然後替換成自己定位的assert,從而可以獲取更多的錯誤信息,讓我們知道具體哪裡出現了問題
  • C語言的那些小秘密之斷言
    可能花了九六二虎之力寫出來的東西,因為摘要的失敗而前功盡棄,因為絕大多數的讀者看文章之前都會瀏覽下摘要,如果他們發現摘要「不對口」,沒有什麼特色和吸引人的地方,那麼輕則採用一目十行的方法看完全文,重則對文章判「死刑」,一篇文章的好壞雖然不能用摘要來衡量,但是它卻常常被讀者用來衡量一篇文章的好壞,從而成為了文章讀者數量多少的一個關鍵因素。
  • java基礎之斷言細談
    一旦完全測試了系統並將它移送到產品環境時,則希望禁用斷言,因為這樣做會略微改善性能。使用assert,只需一行代碼,並且不必從發布的代碼中刪除assert語句。不管怎樣,為了編制文檔的目的,斷言也應保留在代碼中。這樣,當以後更改代碼時,會提醒程式設計師要保持所有假設都是有效的,並且這也是可測試的。
  • [接口測試_B] 04 Pytest斷言處理_告警斷言
    pytest中對告警進行斷言採用pytest.warns()方法,其斷言的方法與pytest.raises()類似。pytest.warns()除了能斷言告警外,還能夠捕獲告警信息,並對捕獲的告警信息進行分類處理,可以設定出現特定告警信息時,則用例執行失敗。
  • Python代碼調試的那些「最少且必要」技巧
    用print()觀察變量的不足之處在於,調試完畢後,我們還得手動將它們刪掉,如果調試工作量較大,造成print()滿天飛,刪除大量print()語句的工作量也不容小覷。而且,如果程序中到處充斥著print()語句,輸出信息也會非常繁雜,給程式設計師造成困擾。因此,就有了第二種方法—斷言(assert)。凡是可用print()來輔助查看的,都可以用assert來替代。
  • python基礎 | 條件 循環 異常 斷言
    python為我們提供了兩個循環控制關鍵字 break 和 continue 。二者區別就是break會終止循環,continue不終止循環。Python中的常見異常如下表所示:異常描述信息AssertionError斷言語句失敗AttributeError嘗試訪問未知的對象屬性IndexError索引超出序列的範圍keyError
  • Python如何合理使用assert(新手必讀)
    講完了 assert 的基本語法之後,本節通過一些實際應用的例子,給大家演示一下 assert 在 Python 中的用法,並明確 assert
  • Python面試必刷題系列(5)
    (3)__xxx__ : python內置的專用特殊方法。像__init__()之類的。說說lambda表達式的應用場景?lambda 表達式的本質就是匿名的、函數體僅有一行的函數。python的assert是用來檢查一個條件,如果它為真,繼續往下執行。如果它為假,則會拋出AssertError 錯誤信息,並終止執行程序。
  • 每周·面試題 | Python 5題快問快答!
    所以這道題的正確答案是r前綴第4題:python中斷言方法舉例?assert 語句,在需要確保程序中的某個條件一定為真才能讓程序運行的話就非常有用下面做一些assert用法的語句供參考:assert 1==1assert 2+2==2*2assert len(['my boy',12
  • 從零開始學Python-Day50-單元測試
    由於unittest.TestCase提供了很多內置的條件判斷,我們只需要調用這些方法就可以斷言輸出是否是我們所期望的。最常用的斷言就是assertEqual():self.assertEqual(abs(-1),1)# 斷言函數返回的結果與1相等另一種重要的斷言就是期待拋出指定類型的Error,比如通過d[』empty』]訪問不存在的key時,斷言會拋出KeyError
  • python unittest使用基本過程
    前言unittest是python的標準的單元測試框架,能夠很好的和自動化測試相結合,並有獨立的測試報告框架。pass在demoTest新增一個測試方法:test_add_4_5, 測試方法名稱必須以test開始class demoTest(unittest.TestCase):    def test_add_4_5(self):        pass在新增的測試方法test_add_4_5中添加斷言驗證