Flask 單元測試 unittest

import  unittest 單元測試

app = Flask(__name__)



--------------------------------------------
import unitest
class TestClass(unittest.TestCase):
    
    #該方法會首先執行,至關於作測試前的準備工做
    def setUp(self):
        pass


    #該方法會在測試代碼執行完後執行,至關於作測試後的掃尾工做
    def tearDown(self):
        pass

    #測試代碼
    def test_app_exists(self):
        pass




def num_div(num1,num2):
    #assert 斷言 後面是一個表達式 若是表示返回真,則斷言成功,程序可以繼續往下執行
    #若是表達式返回假,則斷言失敗,assert會拋出異常AssertionError 終止程序繼續往下執行
    assert isinstance(num1,int)
    assert isinstance(num2,int)
    assert num2 != 0

    print(num1 / num2)

if __name__ == '__main__':
    num_div(100,10)





# -*- coding: utf-8 -*-
# @Time    : 2019/2/18 20:31
# @Author  : yanxiatingyu
# @File    : unittest_study.py
# @Software: PyCharm


import unittest
from flask import Flask
from flask import request
from flask import jsonify

app = Flask(__name__)


@app.route('/')
def index():
    return 'test'


@app.route('/login', methods=["POST"])
def login():
    user_name = request.form.get("user_name")
    user_pwd = request.form.get("user_pwd")
    print(request.form)
    print(request.args)

    resp = ''
    if not all([user_name, user_pwd]):
        resp = {
            "code": 300,
            "message": "invalid params"
        }

        return jsonify(resp)

    if user_pwd == 'a' and user_name == 'a':
        resp = {
            "code": 200,
            "msessage": "login success"
        }
    else:
        resp = {
            "code": 300,
            "message": "login faild"
        }
    return jsonify(resp)


if __name__ == '__main__':
    app.run(debug=True)



import unittest
from unittest_study import app
import json


class LoginTest(unittest.TestCase):
    """構造單元測試案例"""

    def test_empty_user_name_password(self):
        """測試用戶名密碼不完整的狀況"""
        # 建立進行web請求的客戶端,使用flask提供的
        client = app.test_client()

        # 利用client客戶端模擬發送web請求
        ret = client.post("/login", data={
            "user_name": "a",
            "user_pwd": "a"
        })

        # ret 是視圖返回的響應對象
        # data 屬性是響應體的數據
        resp = ret.data

        # 由於login視圖返回的json字符串
        #
        resp = json.loads(resp)

        # 拿到返回值後進行斷言測試
        self.assertIn("code", resp)  # code 是否 包含在resp裏面

        self.assertEqual(resp["code"], 200)


if __name__ == '__main__':
    unittest.main()


-------------------------------------------------
from flask_mail import Mail,Message

# 配置郵件: 服務器 、 端口 、 傳輸層安全協議 、 郵箱名 、密碼
app.config.update(
    DEBUG=True,
    MAIL_SERVER='smtp.qq.com',
    MAIL_PROT=465,
    MAIL_USE_TLS=True,
    MAIL_USERNAME='799209502@qq.com',
    MAIL_PASSWORD='cyfgpsjasdqibaii'
)
#//MAIL_PASSWORD  受權碼
#IMAP/SMTP服務 (什麼是 IMAP,它又是如何設置?)  開啓QQ郵箱此服務 獲取受權碼


#因爲QQ郵箱不支持非加密的協議,那麼使用加密協議,分爲兩種加密協議,選擇其中之一便可
    #1.mail_use_tls    端口號是587

    #2.mail_use_ssl    端口號是465
    #我選擇的mail_use_tls  協議,因此MAIL_USE_TLS設置爲True,端口號587




mail = Mail(app)

import json
@app.route('/')
def index():

    try:
        # sender 發送方,recipients 接收方列表
        msg = Message("This is a test !", sender='799209502@qq.com', recipients=["changanmingji@126.com"])
        # 郵箱內容
        msg.body = "Flask test mail !"
        # 發送郵件
        mail.send(msg)
        return json.dumps('send success !'), 200, {
            "Content-Type": "application/json"
        }
    except Exception as e:
        print(e)
        return json.dumps("send failed !"),200,{
            "Content-Type":"application/json"
        }

 

 

 

 

# -*- coding: utf-8 -*-
# @Time    : 2019/2/18 20:41
# @Author  : yanxiatingyu
# @File    : test.py.py
# @Software: PyCharm


import unittest
from unittest_study import app
import json


class LoginTest(unittest.TestCase):
    """構造單元測試案例"""

    def setUp(self):
        """在進行測試以前,先被執行"""
        # 設置flask工做在測試模式下
        # app.config['TESTINg'] = True
        # 或
        app.testing = True# 打開後程序 具體出現什麼錯誤等,告訴你細節問題,不開就不會體現細節問題

        # 建立進行web請求的客戶端,使用flask提供的
        self.client = app.test_client()

    def test_empty_user_name_password(self):
        """測試用戶名密碼不完整的狀況"""

        # 利用client客戶端模擬發送web請求
        ret = self.client.post("/login", data={
            "user_name": "a",
            "user_pwd": "a"
        })

        # ret 是視圖返回的響應對象
        # data 屬性是響應體的數據
        resp = ret.data

        # 由於login視圖返回的json字符串
        #
        resp = json.loads(resp)

        # 拿到返回值後進行斷言測試
        self.assertIn("code", resp)  # code 是否 包含在resp裏面

        # 是否相等
        self.assertEqual(resp["code"], 200)

    def test_wrong_user_name_password(self):
        """測試用戶名或密碼錯誤"""
        ret = self.client.post('/login', data={
            "user_name": 'b',
            "user_pwd": 'b'
        })

        resp = ret.data
        resp = json.loads(resp)

        self.assertIn("code", resp)
        self.assertEqual(resp["code"], 300)


if __name__ == '__main__':
    unittest.main()

 

 

# -*- coding: utf-8 -*-
# @Time    : 2019/2/19 12:54
# @Author  : yanxiatingyu
# @File    : app.py
# @Software: PyCharm

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)


class Config(object):
    """配置參數"""
    # sqlalchemy 配置參數
    SQLALCHEMY_DATABASE_URI = "mysql://root:@127.0.0.1:3306/test"
    # 設置sqlalchemy自動跟蹤數據庫
    SQLALCHEMY_TRACK_MODIFICATIONS = True


app.config.from_object(Config)
db = SQLAlchemy(app)
db.init_app(app)


class User(db.Model):
    """用戶表"""
    __tablename__ = "tbl_user"

    id = db.Column(db.Integer, primary_key=True)  # 指明主鍵
    name = db.Column(db.String(64))
    email = db.Column(db.String(128))

    def __repr__(self):
        return "User object : name = %s " % self.name


if __name__ == '__main__':
    db.drop_all()
    db.create_all()

    user1 = User(**{
        "name": "姓名1",
        "email": "郵箱1"
    })
    user2 = User(**{
        "name": "姓名2",
        "email": "郵箱2"
    })
    user3 = User(name="姓名3", email="郵箱3")
    # db.session.add(user1)
    # or
    db.session.add_all([user1, user2, user3])
    db.session.commit()

 

 

 

 

# -*- coding: utf-8 -*-
# @Time    : 2019/2/19 13:32
# @Author  : yanxiatingyu
# @File    : test.py
# @Software: 數據庫 單元測試


import unittest
from app import User, db, app

class DataBaseTeset(unittest.TestCase):
    """測試用戶的數據庫操做"""

    def setUp(self):
        app.testing = True
        #    SQLALCHEMY_DATABASE_URI = "mysql://root:@127.0.0.1:3306/test"
        # 測試 數據庫的修改
        app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:@127.0.0.1:3306/test"

    def test_add_user(self):
        user = User(**{
            "name": "姓名4",
            "email": '郵箱4'
        })
        db.session.add(user)
        db.session.commit()

        res = User.query.filter_by(name="姓名1").first()
        self.assertIsNotNone(res)

    def tearDown(self):
        """在全部的測試執行後 執行,經過用來進行清理操做"""
        db.session.remove()#刪除數據,和鏈接狀態
        # db.drop_all() 刪除數據庫表,慎用直接運行
相關文章
相關標籤/搜索