Python Flask,ユニットテストケース,unittest

2885 ワード


demo.py(Flask,定義ビュー):
# coding:utf-8
from flask import Flask, request, jsonify


app = Flask(__name__)


@app.route("/dologin", methods=["POST"])
def login():
    """  """
    name = request.form.get("name")
    password = request.form.get("password")

    if not all([name, password]):
        #   name password           
        return jsonify(code=1, message=u"     ")
    if name == "admin" and password =="python":
        return jsonify(code=0, message=u"OK")
    else:
        return jsonify(code=2, message=u"        ")


if __name__ == '__main__':
    app.run()


test.py(unittest、ユニットテストケース、Flaskビュー関数のテスト):
# coding:utf-8

import unittest
from demo import app
import json


class TestLogin(unittest.TestCase):
    """      """
    
    #            (     )
    def setUp(self):
        """           ,    """
        #     python http         
        # urllib  urllib2  requests

        # app.config['TESTING'] = True  #   app        
        app.testing = True   #   app        。 (     ,                  )
        #   flask             (Flask           )
        self.client = app.test_client()
    
    #     。 (      "test_"  )
    def test_empty_name_password(self):
        """      ,         """
        #   Flask        post  , data       ,         
        response = self.client.post("/dologin", data={})

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

        #     name
        response = self.client.post("/dologin", data={"name": "admin"})

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


    #     。 (      "test_"  )
    def test_wrong_name_password(self):
        """          """
        
        response = self.client.post("/dologin", data={"name": "admin", "password": "xxx"})

        # respoonse.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, 2)


if __name__ == '__main__':
    unittest.main()  #