python-Web-flask-蓝图和单元测试
4 蓝图和单元测试:
能够使用代码实现蓝图对项目进行模块化
admin=Blueprint('admin',__name__) # 创建一个蓝图对象 @admin.route('/') def admin_home(): return 'admin_home' # app内部注册 app.register_blueprint(admin,url_prefix='/admin') # 注册静态目录的路由 # static_admin目录设置为静态目录 admin = Blueprint("admin",__name__,static_folder='static_admin') app.register_blueprint(admin,url_prefix='/admin') # static_admin 文件夹的路由设置为 /lib admin = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib') app.register_blueprint(admin,url_prefix='/admin')
数据库分块
# 注册db的函数 def register_db(app): db.init_app(app) # 创建所有和db相关联的表 with app.app_context(): db.create_all() return db
urls:
# 注册数据库
DB = register_db(app)
迁移分块
from flask_migrate import Migrate,MigrateCommand from flask_script import Manager from urls import app from urls import DB as db # 命令操作 manager = Manager(app) # 迁移 migrate = Migrate(app,db) manager.add_command('db',MigrateCommand) if __name__ == '__main__': manager.run()
设置模板目录
admin = Blueprint('admin',__name__,template_folder='my_templates')
能够说出断言的作用
断言就是判断一个函数或对象的一个方法所产生的结果是否符合你期望的那个结果
能够说出实现单元测试步骤
1定义一个类,继承自unittest.TestCase
2 在测试类中,定义两个测试方法
3 在测试类中,编写测试代码
登录测试
import json import unittest from demo1_login import app class LoginTest(unittest.TestCase): """为登录逻辑编写测试案例""" def setUp(self): app.testing = True self.client = app.test_client() def test_empty_username_password(self): """测试用户名与密码为空的情况[当参数不全的话,返回errcode=-2]""" response = app.test_client().post('/login', data={}) json_data = response.data json_dict = json.loads(json_data) self.assertIn('errcode', json_dict, '数据格式返回错误') self.assertEqual(json_dict['errcode'], -2, '状态码返回错误') # TODO 测试用户名为空的情况 # TODO 测试密码为空的情况 def test_error_username_password(self): """测试用户名和密码错误的情况[当登录名和密码错误的时候,返回 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, '数据格式返回错误') self.assertEqual(json_dict['errcode'], -1, '状态码返回错误') # TODO 测试用户名错误的情况 # TODO 测试密码错误的情况 if __name__ == '__main__': unittest.main()
能够说出单元测试所执行方法的定义规则
#该方法会首先执行,相当于做测试前的准备工作 def setUp(self): pass #该方法会在测试代码执行完后执行,相当于做测试后的扫尾工作 def tearDown(self): pass #测试代码 def test_app_exists(self): pass