Flask + UnitTest(十五)

被测试视图

# 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)

 

posted @ 2020-12-15 18:06  码上测  阅读(369)  评论(0编辑  收藏  举报