flask框架單元測試原理與用法實(shí)例分析
本文實(shí)例講述了flask框架單元測試原理與用法。分享給大家供大家參考,具體如下:
為什么要測試?
Web程序開發(fā)過程一般包括以下幾個階段:[需求分析,設(shè)計階段,實(shí)現(xiàn)階段,測試階段]。其中測試階段通過人工或自動來運(yùn)行測試某個系統(tǒng)的功能。目的是檢驗其是否滿足需求,并得出特定的結(jié)果,以達(dá)到弄清楚預(yù)期結(jié)果和實(shí)際結(jié)果之間的差別的最終目的。
測試的分類:
測試從軟件開發(fā)過程可以分為:單元測試、集成測試、系統(tǒng)測試等。在眾多的測試中,與程序開發(fā)人員最密切的就是單元測試,因為單元測試是由開發(fā)人員進(jìn)行的,而其他測試都由專業(yè)的測試人員來完成。所以我們主要學(xué)習(xí)單元測試。
什么是單元測試?
程序開發(fā)過程中,寫代碼是為了實(shí)現(xiàn)需求。當(dāng)我們的代碼通過了編譯,只是說明它的語法正確,功能能否實(shí)現(xiàn)則不能保證。 因此,當(dāng)我們的某些功能代碼完成后,為了檢驗其是否滿足程序的需求??梢酝ㄟ^編寫測試代碼,模擬程序運(yùn)行的過程,檢驗功能代碼是否符合預(yù)期。
單元測試就是開發(fā)者編寫一小段代碼,檢驗?zāi)繕?biāo)代碼的功能是否符合預(yù)期。通常情況下,單元測試主要面向一些功能單一的模塊進(jìn)行。
舉個例子:一部手機(jī)有許多零部件組成,在正式組裝一部手機(jī)前,手機(jī)內(nèi)部的各個零部件,CPU、內(nèi)存、電池、攝像頭等,都要進(jìn)行測試,這就是單元測試。
在Web開發(fā)過程中,單元測試實(shí)際上就是一些“斷言”(assert)代碼。
斷言就是判斷一個函數(shù)或?qū)ο蟮囊粋€方法所產(chǎn)生的結(jié)果是否符合你期望的那個結(jié)果。 python中assert斷言是聲明布爾值為真的判定,如果表達(dá)式為假會發(fā)生異常。單元測試中,一般使用assert來斷言結(jié)果。
斷言方法的使用:

斷言語句類似于:
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í)行,相當(dāng)于做測試前的準(zhǔn)備工作
def setUp(self):
pass
#該方法會在測試代碼執(zhí)行完后執(zhí)行,相當(dāng)于做測試后的掃尾工作
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
# 激活測試標(biāo)志
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程序設(shè)計有所幫助。
相關(guān)文章
Python深度學(xué)習(xí)TensorFlow神經(jīng)網(wǎng)絡(luò)基礎(chǔ)概括
這篇文章主要為大家介紹了Python深度學(xué)習(xí)中TensorFlow神經(jīng)網(wǎng)絡(luò)基礎(chǔ)概括,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
詳解Python中的array數(shù)組模塊相關(guān)使用
數(shù)組并不是Python中內(nèi)置的標(biāo)配數(shù)據(jù)結(jié)構(gòu),不過擁有array模塊我們也可以在Python中使用數(shù)組結(jié)構(gòu),下面我們就來詳解詳解Python中的array數(shù)組模塊相關(guān)使用2016-07-07
python實(shí)現(xiàn)從尾到頭打印單鏈表操作示例
這篇文章主要介紹了python實(shí)現(xiàn)從尾到頭打印單鏈表操作,結(jié)合實(shí)例形式分析了Python單鏈表的定義、判斷、添加、打印等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02
python3的UnicodeDecodeError解決方法
這篇文章主要介紹了python3的UnicodeDecodeError解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Django中celery執(zhí)行任務(wù)結(jié)果的保存方法
今天小編就為大家分享一篇Django中celery執(zhí)行任務(wù)結(jié)果的保存方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Python Word實(shí)現(xiàn)批量替換文本并生成副本
這篇文章主要為大家詳細(xì)介紹了Python Word如何實(shí)現(xiàn)批量替換文本并生成副本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10

