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() 刪除數據庫表,慎用直接運行