flask框架單元測(cè)試原理與用法實(shí)例分析
本文實(shí)例講述了flask框架單元測(cè)試原理與用法。分享給大家供大家參考,具體如下:
為什么要測(cè)試?
Web程序開(kāi)發(fā)過(guò)程一般包括以下幾個(gè)階段:[需求分析,設(shè)計(jì)階段,實(shí)現(xiàn)階段,測(cè)試階段]。其中測(cè)試階段通過(guò)人工或自動(dòng)來(lái)運(yùn)行測(cè)試某個(gè)系統(tǒng)的功能。目的是檢驗(yàn)其是否滿(mǎn)足需求,并得出特定的結(jié)果,以達(dá)到弄清楚預(yù)期結(jié)果和實(shí)際結(jié)果之間的差別的最終目的。
測(cè)試的分類(lèi):
測(cè)試從軟件開(kāi)發(fā)過(guò)程可以分為:?jiǎn)卧獪y(cè)試、集成測(cè)試、系統(tǒng)測(cè)試等。在眾多的測(cè)試中,與程序開(kāi)發(fā)人員最密切的就是單元測(cè)試,因?yàn)閱卧獪y(cè)試是由開(kāi)發(fā)人員進(jìn)行的,而其他測(cè)試都由專(zhuān)業(yè)的測(cè)試人員來(lái)完成。所以我們主要學(xué)習(xí)單元測(cè)試。
什么是單元測(cè)試?
程序開(kāi)發(fā)過(guò)程中,寫(xiě)代碼是為了實(shí)現(xiàn)需求。當(dāng)我們的代碼通過(guò)了編譯,只是說(shuō)明它的語(yǔ)法正確,功能能否實(shí)現(xiàn)則不能保證。 因此,當(dāng)我們的某些功能代碼完成后,為了檢驗(yàn)其是否滿(mǎn)足程序的需求??梢酝ㄟ^(guò)編寫(xiě)測(cè)試代碼,模擬程序運(yùn)行的過(guò)程,檢驗(yàn)功能代碼是否符合預(yù)期。
單元測(cè)試就是開(kāi)發(fā)者編寫(xiě)一小段代碼,檢驗(yàn)?zāi)繕?biāo)代碼的功能是否符合預(yù)期。通常情況下,單元測(cè)試主要面向一些功能單一的模塊進(jìn)行。
舉個(gè)例子:一部手機(jī)有許多零部件組成,在正式組裝一部手機(jī)前,手機(jī)內(nèi)部的各個(gè)零部件,CPU、內(nèi)存、電池、攝像頭等,都要進(jìn)行測(cè)試,這就是單元測(cè)試。
在Web開(kāi)發(fā)過(guò)程中,單元測(cè)試實(shí)際上就是一些“斷言”(assert)代碼。
斷言就是判斷一個(gè)函數(shù)或?qū)ο蟮囊粋€(gè)方法所產(chǎn)生的結(jié)果是否符合你期望的那個(gè)結(jié)果。 python中assert斷言是聲明布爾值為真的判定,如果表達(dá)式為假會(huì)發(fā)生異常。單元測(cè)試中,一般使用assert來(lái)斷言結(jié)果。
斷言方法的使用:
斷言語(yǔ)句類(lèi)似于:
if not expression: raise AssertionError
常用的斷言方法:
assertEqual 如果兩個(gè)值相等,則pass
assertNotEqual 如果兩個(gè)值不相等,則pass
assertTrue 判斷bool值為T(mén)rue,則pass
assertFalse 判斷bool值為False,則pass
assertIsNone 不存在,則pass
assertIsNotNone 存在,則pass
如何測(cè)試?
簡(jiǎn)單的測(cè)試用例: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
單元測(cè)試的基本寫(xiě)法:
首先,定義一個(gè)類(lèi),繼承自u(píng)nittest.TestCase
import unittest class TestClass(unitest.TestCase): pass
其次,在測(cè)試類(lèi)中,定義兩個(gè)測(cè)試方法
import unittest class TestClass(unittest.TestCase): #該方法會(huì)首先執(zhí)行,方法名為固定寫(xiě)法 def setUp(self): pass #該方法會(huì)在測(cè)試代碼執(zhí)行完后執(zhí)行,方法名為固定寫(xiě)法 def tearDown(self): pass
最后,在測(cè)試類(lèi)中,編寫(xiě)測(cè)試代碼
import unittest class TestClass(unittest.TestCase): #該方法會(huì)首先執(zhí)行,相當(dāng)于做測(cè)試前的準(zhǔn)備工作 def setUp(self): pass #該方法會(huì)在測(cè)試代碼執(zhí)行完后執(zhí)行,相當(dāng)于做測(cè)試后的掃尾工作 def tearDown(self): pass #測(cè)試代碼 def test_app_exists(self): pass
發(fā)送郵件測(cè)試:
#coding=utf-8 import unittest from Flask_day04 import app class TestCase(unittest.TestCase): # 創(chuàng)建測(cè)試環(huán)境,在測(cè)試代碼執(zhí)行前執(zhí)行 def setUp(self): self.app = app # 激活測(cè)試標(biāo)志 app.config['TESTING'] = True self.client = self.app.test_client() # 在測(cè)試代碼執(zhí)行完成后執(zhí)行 def tearDown(self): pass # 測(cè)試代碼 def test_email(self): resp = self.client.get('/') print resp.data self.assertEqual(resp.data,'Sent Succeed')
數(shù)據(jù)庫(kù)測(cè)試:
#coding=utf-8 import unittest from author_book import * #自定義測(cè)試類(lèi),setUp方法和tearDown方法會(huì)分別在測(cè)試前后執(zhí)行。以test_開(kāi)頭的函數(shù)就是具體的測(cè)試代碼。 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() #測(cè)試代碼 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)
希望本文所述對(duì)大家基于flask框架的Python程序設(shè)計(jì)有所幫助。
- python flask框架實(shí)現(xiàn)重定向功能示例
- Vue+Flask實(shí)現(xiàn)簡(jiǎn)單的登錄驗(yàn)證跳轉(zhuǎn)的示例代碼
- flask框架jinja2模板與模板繼承實(shí)例分析
- Flask框架模板繼承實(shí)現(xiàn)方法分析
- Flask框架模板渲染操作簡(jiǎn)單示例
- Flask框架單例模式實(shí)現(xiàn)方法詳解
- Flask框架中request、請(qǐng)求鉤子、上下文用法分析
- flask框架路由常用定義方式總結(jié)
- Python?flask框架post接口調(diào)用示例
- Flask教程之重定向與錯(cuò)誤處理實(shí)例分析
相關(guān)文章
Python Tornado之跨域請(qǐng)求與Options請(qǐng)求方式
這篇文章主要介紹了Python Tornado之跨域請(qǐng)求與Options請(qǐng)求方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Pygame改編飛機(jī)大戰(zhàn)制作兔子接月餅游戲
一年中秋又快到了,今年加入了Python的學(xué)習(xí)行列,得益于Python的開(kāi)發(fā)效率和易讀性,網(wǎng)上寫(xiě)文章的次數(shù)多了起來(lái),既然是中秋節(jié)那肯定要搞個(gè)應(yīng)景的游戲才行2022-09-09詳解Python NumPy中矩陣和通用函數(shù)的使用
在NumPy中,矩陣是ndarray的子類(lèi),與數(shù)學(xué)概念中的矩陣一樣,NumPy中的矩陣也是二維的,可以使用 mat 、 matrix 以及 bmat 函數(shù)來(lái)創(chuàng)建矩陣。本文將詳細(xì)講解NumPy中矩陣和通用函數(shù)的使用,感興趣的可以了解一下2022-06-06python3.4用循環(huán)往mysql5.7中寫(xiě)數(shù)據(jù)并輸出的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇python3.4用循環(huán)往mysql5.7中寫(xiě)數(shù)據(jù)并輸出的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Django重裝mysql后啟動(dòng)報(bào)錯(cuò):No module named ‘MySQLdb’的解決方法
這篇文章主要給大家介紹了關(guān)于Django重裝mysql后啟動(dòng)報(bào)錯(cuò):No module named ‘MySQLdb’的解決方法,分享出來(lái),對(duì)同樣遇到這個(gè)問(wèn)題的朋友們一個(gè)參考學(xué)習(xí),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04python通過(guò)正則查找微博@(at)用戶(hù)的方法
這篇文章主要介紹了python通過(guò)正則查找微博@(at)用戶(hù)的方法,涉及Python正則匹配的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03