欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Python之單元測(cè)試以及斷言assert的使用

單元測(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)其是否滿足需求,并得出特定的結(jié)果,以達(dá)到弄清楚預(yù)期結(jié)果和實(shí)際結(jié)果之間的差別的最終目的。

目前創(chuàng)新互聯(lián)已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、布爾津網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

測(cè)試的分類:

測(cè)試從軟件開(kāi)發(fā)過(guò)程可以分為:

  • 單元測(cè)試

    • 對(duì)單獨(dú)的代碼塊(例如函數(shù))分別進(jìn)行測(cè)試,以保證它們的正確性

  • 集成測(cè)試

    • 對(duì)大量的程序單元的協(xié)同工作情況做測(cè)試

  • 系統(tǒng)測(cè)試

    • 同時(shí)對(duì)整個(gè)系統(tǒng)的正確性進(jìn)行檢查,而不是針對(duì)獨(dú)立的片段

在眾多的測(cè)試中,與程序開(kāi)發(fā)人員最密切的就是單元測(cè)試,因?yàn)閱卧獪y(cè)試是由開(kāi)發(fā)人員進(jìn)行的,而其他測(cè)試都由專業(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)其是否滿足程序的需求。可以通過(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ǔ)句類似于:

if not expression:    
    raise AssertionError
 AssertionError

常用的斷言方法:

assertEqual     如果兩個(gè)值相等,則pass
assertNotEqual  如果兩個(gè)值不相等,則pass
assertTrue      判斷bool值為True,則pass
assertFalse     判斷bool值為False,則pass
assertIsNone    不存在,則pass
assertIsNotNone 存在,則pass

# 示例1:

def fibo(x):
    if x == 0:
        resp = 0
    elif x == 1:
        resp = 1
    else:        
        return fibo(x-1) + fibo(x-2)    
    return respassert fibo(5) == 5

單元測(cè)試的基本寫(xiě)法:

首先,定義一個(gè)類,繼承自u(píng)nittest.TestCase

import unittestclass TestClass(unitest.TestCase):
    pass

其次,在測(cè)試類中,定義兩個(gè)測(cè)試方法

import unittestclass 
TestClass(unittest.TestCase):
    #該方法會(huì)首先執(zhí)行,方法名為固定寫(xiě)法
    def setUp(self):
        pass

    #該方法會(huì)在測(cè)試代碼執(zhí)行完后執(zhí)行,方法名為固定寫(xiě)法
    def tearDown(self):
        pass

最后,在測(cè)試類中,編寫(xiě)測(cè)試代碼

import unittestclass 
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

登錄測(cè)試

  • 被測(cè)試的代碼邏輯

@app.route('/login', methods=['POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')    # 判斷參數(shù)是否為空
    if not all([username, password]):
        result = {            "errcode": -2,            "errmsg": "params error"
        }        return jsonify(result)    # a = 1 / 0
    # 如果賬號(hào)密碼正確
    # 判斷賬號(hào)密碼是否正確
    if username == 'itheima' and password == 'python':
        result = {            "errcode": 0,            "errmsg": "success"
        }        
        return jsonify(result)    
   else:
        result = {            "errcode": -1,            "errmsg": "wrong username or password"
        }        
        return jsonify(result)
  • 單元測(cè)試代碼

import jsonimport unittest
from demo1_login import app

class LoginTest(unittest.TestCase):
    """為登錄邏輯編寫(xiě)測(cè)試案例"""

    def setUp(self):
        app.testing = True
        self.client = app.test_client()    
        
   def test_empty_username_password(self):
        """測(cè)試用戶名與密碼為空的情況[當(dāng)參數(shù)不全的話,返回errcode=-2]"""
        response = app.test_client().post('/login', data={})
        json_data = response.data
        json_dict = json.loads(json_data)

        self.assertIn('errcode', json_dict, '數(shù)據(jù)格式返回錯(cuò)誤')
        self.assertEqual(json_dict['errcode'], -2, '狀態(tài)碼返回錯(cuò)誤')        # TODO 測(cè)試用戶名為空的情況

        # TODO 測(cè)試密碼為空的情況

    def test_error_username_password(self):
        """測(cè)試用戶名和密碼錯(cuò)誤的情況[當(dāng)?shù)卿浢兔艽a錯(cuò)誤的時(shí)候,返回 errcode = -1]"""
        response = app.test_client().post('/login', data={"username": "aaaaa", "password": "12343"})
        json_data = response.data
        json_dict = json.loads(json_data)
        self.assertIn('errcode', json_dict, '數(shù)據(jù)格式返回錯(cuò)誤')
        self.assertEqual(json_dict['errcode'], -1, '狀態(tài)碼返回錯(cuò)誤')        # TODO 測(cè)試用戶名錯(cuò)誤的情況

        # TODO 測(cè)試密碼錯(cuò)誤的情況
if __name__ == '__main__':
    unittest.main()

數(shù)據(jù)庫(kù)測(cè)試:

#coding=utf-8import unittestfrom author_book import *#自定義測(cè)試類,setUp方法和tearDown方法會(huì)分別在測(cè)試前后執(zhí)行。以test_開(kāi)頭的函數(shù)就是具體的測(cè)試代碼。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()    #測(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)

本文題目:Python之單元測(cè)試以及斷言assert的使用
文章來(lái)源:http://www.chinadenli.net/article6/gjsdig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站服務(wù)器托管網(wǎng)站營(yíng)銷企業(yè)建站網(wǎng)站排名網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站