【python练习】使用unittest对flask接口进行单元测试(1)

大部分是照着这篇文章写的 https://cloud.tencent.com/developer/article/1585944

flask_register.py:

# coding:utf-8
from flask_sqlalchemy import SQLAlchemy
from flask import Flask, jsonify, request
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from config import DB_URI
'''配置数据库'''
app = Flask(__name__)
app.config["JSON_AS_ASCII"] = False
app.config['SECRET_KEY'] ='hard to guess'

# 这里登陆的是root用户,要填上自己的密码,MySQL的默认端口是3306,填上之前创建的数据库名jianshu,连接方式参考 \
app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:123456@127.0.0.1:3306/flask_register'
#设置这一项是每次请求结束后都会自动提交数据库中的变动
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True   #这一句不加会报错
#实例化
db = SQLAlchemy(app)
engine = create_engine(DB_URI)
Base = declarative_base(engine)  # SQLORM基类
session = sessionmaker(engine)()  # 构建session对象

class User_Register(db.Model):
    __tablename__ = 'register'  # 表名
    id = db.Column(Integer, primary_key=True, autoincrement=True)  # 作为主key,且自增1
    username = db.Column(String(20))
    password = db.Column(String(20))
print(type(User_Register))
Base.metadata.create_all()  # 将模型映射到数据库中

@app.route('/register',methods = ['post'])
def user_register():
    username1 = request.values.get('username')
    password1 = request.values.get('password')
    if username1 and password1:
        import re
        if re.match("^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).*$",username1) == None:
            return jsonify({"code": 202, "msg": "用户名必须是大小写字母+数字,请检查!"})
        elif re.match("^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).*$",password1)==None:
            return jsonify({"code": 203, "msg": "密码必须是大小写字母+数字,请检查!"})
        else:
            user_register = User_Register(username=username1, password=password1)
            session.add(user_register)
            session.commit()
            #item_list = session.query(User_Register).filter(User_Register.username == username1).all()
            # return str((item_list.name))
            # for item in item_list:
            #     return jsonify({"username": item.username, "password": item.password})
            return jsonify({"code": 0, "msg": "恭喜,注册成功!"})
    else:
        return jsonify({"code": 201, "msg": "用户名/密码,请检查!"})

if __name__ == '__main__':
    app.run(port=8080, debug=True)

test_flask.py:(单独对register接口进行测试)

运行此代码前需要先运行flask_register.py并连接数据库

import unittest
from  flask_register import app
import json

class Regiest_Test(unittest.TestCase):
    '''定义测试用例'''
    def setUp(self):
        """在执行具体的测试方法前,先被调用"""
        self.app = app
        # 激活测试标志
        app.config['TESTING'] = True
        # 在这里,使用flask提供的测试客户端进行测试
        self.client = app.test_client()

    def test_empty_name_pw(self):
        '''用户名和密码有一项或亮相为空时'''
        # 使用客户端向后端发送post请求, data指明发送的数据,会返回一个响应对象
        response = self.client.post("/register", data={})
        resp_json = response.data
        # 按照json解析
        resp_dict = json.loads(resp_json)
        # 获取code的返回码的值,验证是否为状态码201
        code = resp_dict.get("code")
        self.assertEqual(code, 201)  #201不可以加引号,会报错

        response = self.client.post("/register", data={'username':'099IKKd'})
        resp_json = response.data
        # 按照json解析
        resp_dict = json.loads(resp_json)
        # 获取code的返回码的值,验证是否为状态码201
        code = resp_dict.get("code")
        self.assertEqual(code, 201)

    '''输入不符合规范的用户名时'''
    def test_wrong_name_pw(self):
        response = self.client.post("/register", data={'username':'33o2234',"password":'234JNdd'})
        resp_json = response.data
        # 按照json解析
        resp_dict = json.loads(resp_json)
        # 获取code的返回码的值,验证是否为状态码
        code = resp_dict.get("code")
        self.assertEqual(code,202)
        msg=resp_dict.get('msg')
        self.assertEqual(msg,'用户名必须是大小写字母+数字,请检查!')
        '''用户名合法,密码不合法时'''
        response = self.client.post("/register", data={'username':'33oD2234',"password":'Ndd'})
        resp_json = response.data
        # 按照json解析
        resp_dict = json.loads(resp_json)
        # 获取code的返回码的值,验证是否为状态码
        code = resp_dict.get("code")
        self.assertEqual(code,203)
        msg=resp_dict.get('msg')
        self.assertEqual(msg,'密码必须是大小写字母+数字,请检查!')

    '''用户名和密码均正确时'''
    def test_right_name_pw(self):
        response = self.client.post("/register", data={'username': '33o22F34', "password": '234JNdd'})
        resp_json = response.data
        # 按照json解析
        resp_dict = json.loads(resp_json)
        # 获取code的返回码的值,验证是否为状态码
        code = resp_dict.get("code")
        self.assertEqual(code, 0)
        msg = resp_dict.get('msg')
        self.assertEqual(msg, '恭喜,注册成功!')

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

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值