flask框架單元測試原理與用法實例分析
本文實例講述了flask框架單元測試原理與用法。分享給大家供大家參考,具體如下:
為什么要測試?
Web程序開發(fā)過程一般包括以下幾個階段:[需求分析,設計階段,實現(xiàn)階段,測試階段]。其中測試階段通過人工或自動來運行測試某個系統(tǒng)的功能。目的是檢驗其是否滿足需求,并得出特定的結果,以達到弄清楚預期結果和實際結果之間的差別的最終目的。
測試的分類:
測試從軟件開發(fā)過程可以分為:單元測試、集成測試、系統(tǒng)測試等。在眾多的測試中,與程序開發(fā)人員最密切的就是單元測試,因為單元測試是由開發(fā)人員進行的,而其他測試都由專業(yè)的測試人員來完成。所以我們主要學習單元測試。
什么是單元測試?
程序開發(fā)過程中,寫代碼是為了實現(xiàn)需求。當我們的代碼通過了編譯,只是說明它的語法正確,功能能否實現(xiàn)則不能保證。 因此,當我們的某些功能代碼完成后,為了檢驗其是否滿足程序的需求??梢酝ㄟ^編寫測試代碼,模擬程序運行的過程,檢驗功能代碼是否符合預期。
單元測試就是開發(fā)者編寫一小段代碼,檢驗目標代碼的功能是否符合預期。通常情況下,單元測試主要面向一些功能單一的模塊進行。
舉個例子:一部手機有許多零部件組成,在正式組裝一部手機前,手機內部的各個零部件,CPU、內存、電池、攝像頭等,都要進行測試,這就是單元測試。
在Web開發(fā)過程中,單元測試實際上就是一些“斷言”(assert)代碼。
斷言就是判斷一個函數(shù)或對象的一個方法所產(chǎn)生的結果是否符合你期望的那個結果。 python中assert斷言是聲明布爾值為真的判定,如果表達式為假會發(fā)生異常。單元測試中,一般使用assert來斷言結果。
斷言方法的使用:
斷言語句類似于:
if not expression: raise AssertionError
常用的斷言方法:
assertEqual 如果兩個值相等,則pass
assertNotEqual 如果兩個值不相等,則pass
assertTrue 判斷bool值為True,則pass
assertFalse 判斷bool值為False,則pass
assertIsNone 不存在,則pass
assertIsNotNone 存在,則pass
如何測試?
簡單的測試用例:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,
def fibo(x): if x == 0: resp = 0 elif x == 1: resp = 1 else: return fibo(x-1) + fibo(x-2) return resp assert fibo(5) == 5
單元測試的基本寫法:
首先,定義一個類,繼承自unittest.TestCase
import unittest class TestClass(unitest.TestCase): pass
其次,在測試類中,定義兩個測試方法
import unittest class TestClass(unittest.TestCase): #該方法會首先執(zhí)行,方法名為固定寫法 def setUp(self): pass #該方法會在測試代碼執(zhí)行完后執(zhí)行,方法名為固定寫法 def tearDown(self): pass
最后,在測試類中,編寫測試代碼
import unittest class TestClass(unittest.TestCase): #該方法會首先執(zhí)行,相當于做測試前的準備工作 def setUp(self): pass #該方法會在測試代碼執(zhí)行完后執(zhí)行,相當于做測試后的掃尾工作 def tearDown(self): pass #測試代碼 def test_app_exists(self): pass
發(fā)送郵件測試:
#coding=utf-8 import unittest from Flask_day04 import app class TestCase(unittest.TestCase): # 創(chuàng)建測試環(huán)境,在測試代碼執(zhí)行前執(zhí)行 def setUp(self): self.app = app # 激活測試標志 app.config['TESTING'] = True self.client = self.app.test_client() # 在測試代碼執(zhí)行完成后執(zhí)行 def tearDown(self): pass # 測試代碼 def test_email(self): resp = self.client.get('/') print resp.data self.assertEqual(resp.data,'Sent Succeed')
數(shù)據(jù)庫測試:
#coding=utf-8 import unittest from author_book import * #自定義測試類,setUp方法和tearDown方法會分別在測試前后執(zhí)行。以test_開頭的函數(shù)就是具體的測試代碼。 class DatabaseTest(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() #斷言數(shù)據(jù)存在 self.assertIsNotNone(author) self.assertIsNotNone(book)
希望本文所述對大家基于flask框架的Python程序設計有所幫助。
相關文章
Python Tornado之跨域請求與Options請求方式
這篇文章主要介紹了Python Tornado之跨域請求與Options請求方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03詳解Python NumPy中矩陣和通用函數(shù)的使用
在NumPy中,矩陣是ndarray的子類,與數(shù)學概念中的矩陣一樣,NumPy中的矩陣也是二維的,可以使用 mat 、 matrix 以及 bmat 函數(shù)來創(chuàng)建矩陣。本文將詳細講解NumPy中矩陣和通用函數(shù)的使用,感興趣的可以了解一下2022-06-06python3.4用循環(huán)往mysql5.7中寫數(shù)據(jù)并輸出的實現(xiàn)方法
下面小編就為大家?guī)硪黄猵ython3.4用循環(huán)往mysql5.7中寫數(shù)據(jù)并輸出的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06Django重裝mysql后啟動報錯:No module named ‘MySQLdb’的解決方法
這篇文章主要給大家介紹了關于Django重裝mysql后啟動報錯:No module named ‘MySQLdb’的解決方法,分享出來,對同樣遇到這個問題的朋友們一個參考學習,需要的朋友們下面隨著小編來一起學習學習吧。2018-04-04