被测试视图

# coding:utf-8

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/login", methods=["POST"])
def login():
"""登录"""
name = request.form.get("name")
password = request.form.get("password") # "" 0 [] () {} None 在逻辑判断时都是假
if not all([name, password]):
# 表示name或password中有一个为空或者都为空
return jsonify(code=1, message=u"参数不完整") if name == "admin" and password == "admin":
return jsonify(code=0, message=u"OK")
else:
return jsonify(code=2, message=u"用户名或密码错误") if __name__ == '__main__':
app.run()

测试用例代码

# 以login.py模块的进行单元测试
import unittest
import json from login import app class BookTest(unittest.TestCase): @classmethod
def setUpClass(cls):
"""在第一次执行用例钱执行"""
cls.app = app
# 开启测试DEBUG模式,如果用例执行到哪行代码报错就会提示
cls.app.testing = True # 使用程序实例对象创建客户端
cls.client = cls.app.test_client()
print("all_before") @classmethod
def tearDownClass(cls):
"""在最后一个用例执行完后执行"""
print("all_after") def setUp(self):
"""在每次执行用例前执行"""
print("one_before") def tearDown(self):
"""在每次执行完用例后执行"""
print("one_after") def test_login_empty_name_password(self):
"""测试用户名或密码不完整的返回"""
# 用例1:测试用户名和密码均为空
# 使用客户端向接口发送POST,data为发送的数据
response = self.client.post("/login", data={}) # response.data提取响应数据
resp_json = response.data # 将json字符串解析为字典
resp_dict = json.loads(resp_json)
# 使用断言进行验证
self.assertIn("code", resp_dict)
code = resp_dict.get("code")
self.assertEqual(code, 1) # 用例2:测试只传name
response = self.client.post("/login", data={"name": "admin"})
resp_json = response.data
resp_dict = json.loads(resp_json)
self.assertIn("code", resp_dict)
code = resp_dict.get("code")
self.assertEqual(code, 1) # 用例3:测试只传password
response = self.client.post("/login", data={"password": "admin"})
resp_json = response.data
resp_dict = json.loads(resp_json)
self.assertIn("code", resp_dict)
code = resp_dict.get("code")
self.assertEqual(code, 1) def test_wrong_name_password(self):
"""测试用户名或密码错误的返回"""
# 用例4:测试用户名或密码错误
response = self.client.post("/login", data={"name": "admin", "password": "123456"})
resp_json = response.data
resp_dict = json.loads(resp_json)
self.assertIn("code", resp_dict)
code = resp_dict.get("code")
self.assertEqual(code, 2) def test_identical_name_password(self):
"""测试用户名和密码均正确的返回"""
# 用例5:测试用户名和密码均正确
response = self.client.post("/login", data={"name": "admin", "password": "admin"})
resp_json = response.data
resp_dict = json.loads(resp_json)
self.assertIn("code", resp_dict)
code = resp_dict.get("code")
self.assertEqual(code, 0)

Flask + UnitTest(十五)的更多相关文章

  1. Flask最强攻略 - 跟DragonFire学Flask - 第十五篇 Flask-Script

    其实本章就是为下一章做的铺垫啦,但是也要认真学习哦 Flask-Script 从字面意思上来看就是 Flask 的脚本 是的,熟悉Django的同学是否还记得Django的启动命令呢? python ...

  2. flask第二十五篇——控制语句

    有兴趣的请加船长公众号:自动化测试实战 先和大家强调一个发邮件的问题 # coding: utf-8 import smtplib from email.mime.text import MIMETe ...

  3. flask第十五篇——Response

    从这一节开始,我就要开始讲关于模板的知识了.先来学习一下Response的相关知识. 所有返回前台的内容其实都应该是Response的对象或者其子类,我们看到如果返回的是字符串直接可以写成return ...

  4. Flask 学习 十五 性能

    记录影响性能的数据库查询 app/main/views.py from flask_sqlalchemy import get_debug_queries @main.after_app_reques ...

  5. Flask 教程 第十五章:优化应用结构

    本文翻译自The Flask Mega-Tutorial Part XV: A Better Application Structure 这是Flask Mega-Tutorial系列的第十五部分,我 ...

  6. Python之路【第十五篇】:Web框架

    Python之路[第十五篇]:Web框架   Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 ...

  7. Flask最强攻略 - 跟DragonFire学Flask - 第十六篇 Flask-Migrate

    终于到了Flask-Migrate,之前在学习Flask-SQLAlchemy的时候,有的同学就提过类似的问题,Flask支持 makemigration / migrate 吗? 答案在这里该诉你, ...

  8. 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备

     孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...

  9. 我的MYSQL学习心得(十五) 日志

    我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  10. Bootstrap <基础二十五>警告(Alerts)

    警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...

随机推荐

  1. 【Java 8】方法引用

    一.概述 在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法.然而,有时候我们仅仅是调用了一个已存在的方法.如下: Arrays.sort(stringsArray,(s1,s ...

  2. springMVC中@requestMapper的使用和注意事项

    package com.hope.controller;import org.springframework.stereotype.Controller;import org.springframew ...

  3. py脚本 获取当前运行服务的相关信息

    一.简介 最近在统计系统中都部署了什么服务,但服务器太多,在没有标准化之前进行整理,还是写脚本收集方便一些. 当然还是需要人工去判断整理表格,为后面标准化做准备.脚本是python2.7的,默认的ce ...

  4. Spring Cloud Alibaba微服务架构入门最容易理解篇

    微服务架构介绍 Spring Cloud Alibaba推荐的微服务生态架构基于分层架构实现如下: 接入层:最外层为LVS+Keepalived,可承受几十万级高并发流量洪峰,然后再通过内层的ngin ...

  5. 【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南

    Minio的元数据 数据存储 MinIO对象存储系统没有元数据数据库,所有的操作都是对象级别的粒度的,这种做法的优势是: 个别对象的失效,不会溢出为更大级别的系统失效. 便于实现"强一致性& ...

  6. png crc讲解

    我太难了. 我真的是为你们着想,你们学姐说misc太简单了,可就是这么简单我相信你们也不会做...我还得给你们讲解... 加油吧!!! 工具:010editor    这个我想给你放下载链接来着,后来 ...

  7. Mysq索引优化(什么情况创建索引,什么情况不创建索引)

    一.以下情况需要创建索引 1.主键自动建立唯一索引 2.频繁作为查询条件的字段应该创建索引 3.查询中与其他表关联的字段,外键关系建立索引 4.单键/组合索引的选择问题,组合索引性价比更高 5.查询中 ...

  8. JAVA整合kaptcha生成验证码 (字母验证码和算术验证码)

    引入maven <!--图片验证码--> <dependency> <groupId>com.github.penggle</groupId> < ...

  9. Flex布局的详细总结

    Flex布局的详细总结 1.认识flex布局 flex布局(flexible布局,弹性布局),是目前web开发中使用的最多的布局方案. 两个重要概念: 开启flex布局的元素叫flex contain ...

  10. DirectByteBuffer实现原理分析

    1.创建DirectByteBuffer Direct ByteBuffer是通过JNI在Java虚拟机外的内存中分配了一块(所以即使在运行时通过-Xmx指定了Java虚拟机的最大堆内存,还是可能实例 ...