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 != print(num1 / num2) if __name__ == '__main__': num_div(,) # -*- coding: utf- -*- # @Time : // : # @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 = { , "message": "invalid params" } return jsonify(resp) if user_pwd == 'a' and user_name == 'a': resp = { , "msessage": "login success" } else: resp = { , "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[) if __name__ == '__main__': unittest.main() ------------------------------------------------- from flask_mail import Mail,Message # 配置邮件: 服务器 、 端口 、 传输层安全协议 、 邮箱名 、密码 app.config.update( DEBUG=True, MAIL_SERVER='smtp.qq.com', MAIL_PROT=, MAIL_USE_TLS=True, MAIL_USERNAME='799209502@qq.com', MAIL_PASSWORD='cyfgpsjasdqibaii' ) #//MAIL_PASSWORD 授权码 #IMAP/SMTP服务 (什么是 IMAP,它又是如何设置?) 开启QQ邮箱此服务 获取授权码 #由于QQ邮箱不支持非加密的协议,那么使用加密协议,分为两种加密协议,选择其中之一即可 #.mail_use_tls 端口号是587 #.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) , { "Content-Type": "application/json" } except Exception as e: print(e) ,{ "Content-Type":"application/json" }
# -*- coding: utf- -*- # @Time : // : # @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[) 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[) if __name__ == '__main__': unittest.main()
# -*- coding: utf- -*- # @Time : // : # @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()) email = db.Column(db.String()) 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- -*- # @Time : // : # @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() 删除数据库表,慎用 直接运行