一、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)
基本的斷言方法提供了測試結果是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和高可用最實用的技能培訓
● 題目解答若有不當之處,還望各位朋友批評指正,共同進步
歡迎讚賞哦!有您的支持,小麥粒一定會越來越好!
您的讚賞是我持續更新的動力哦