zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    白盒测试相关技术图架构
    LoadRunner面试题
    调用标准API抓取错误信息
    请求的报的一般错误:One or more post-processing actions failed. Consult the OPP service log for details.
    xml publisher笔记
    CREATE_RECORD或者NEXT_RECORD导致 FRM-40102 错误:记录必须首先被输入或者删除
    国外博士论文下载
    数据挖掘网络资源集合
    十大数据挖掘算法
    (转)数据挖掘——我们能从股市数据得出什么,以及一些算法
  • 原文地址:https://www.cnblogs.com/testlearn/p/14140185.html
Copyright © 2011-2022 走看看