flask框架单元测试小案例

前言

单元测试,及测试某块代码的逻辑是否正确。
通过flask对象的客户端来模拟发送请求。
使用断言assert进行判断,断言成功,程序继续执行;断言失败,抛出断言失败。

登录代码(login.py

# -*- coding:utf-8 -*-


from flask import Flask
from flask import request, jsonify

app = Flask(__name__)


@app.route("/login", methods=["POST"])
def login():
	username = request.form.get("username")
	password = request.form.get("password")
	
	if not all([username, password]):
		resp = {
			"code": 1,
			"message": "invalid params"
		}
		return jsonify(resp)
	
	if username == "admin" and password == "python":
		resp = {
			"code": 0,
			"message": "login success"
		}
		return jsonify(resp)
	else:
		resp = {
			"code": 2,
			"message": "wrong user or password"
		}
		return jsonify(resp)


if __name__ == "__main__":
	app.run(debug=True)

测试登录代码(test.py

# -*- coding:utf-8 -*-


import unittest
from .login import app
import json


class LoginTest(unittest.TestCase):
	"""构造单元测试案例"""
	
	def setUp(self):  # 功能类似于def __init__
		# 设flask工作在测试模式下
		# app.config["TESTING"] = True # 方式一
		app.testing = True #方式二
		# 使用flask创建客户端
		self.client = app.test_client()
	
	def test_empty_username_password(self):
		"""测试用户名和密码为空的情况"""
		# 模拟客户端发送请求,返回响应对象
		ret = self.client.post("/login", data={})
		# 获取响应体的数据(是json)
		resp = ret.data
		resp = json.loads(resp)
		# 断言
		self.assertIn("code", resp)
		self.assertEqual(resp["code"], 1)
	
	def test_wrong_username_password(self):
		"""测试用户名获密码错误的情况"""
		# 模拟客户端发送请求,返回响应对象
		ret = self.client.post("/login", data={
			"username": "admin",
			"password": "abc"
		})
		# 获取响应体的数据(是json)
		resp = ret.data
		resp = json.loads(resp)
		# 断言
		self.assertIn("code", resp)
		self.assertEqual(resp["code"], 2)
	
	def test_login_sucess(self):
		"""测试登录成功的情况"""
		# 模拟客户端发送请求,返回响应对象
		ret = self.client.post("/login", data={
			"username": "admin",
			"password": "python"
		})
		# 获取响应体的数据(是json)
		resp = ret.data
		resp = json.loads(resp)
		# 断言
		self.assertIn("code", resp)
		self.assertEqual(resp["code"], 0)


if __name__ == "__main__":
	# 启动测试
	unittest.main()


测试结果

Testing started at 12:40 ...
D:\filepython\projects\flaskprojects\venv\Scripts\python.exe "D:\software\pycharm\dir\PyCharm Community Edition 2018.3\helpers\pycharm\_jb_pytest_runner.py" --path D:/filepython/projects/flaskprojects/application/test.py
Launching pytest with arguments D:/filepython/projects/flaskprojects/application/test.py in D:\filepython\projects\flaskprojects\application

============================= test session starts =============================
platform win32 -- Python 3.6.7, pytest-4.0.1, py-1.7.0, pluggy-0.8.0
rootdir: D:\filepython\projects\flaskprojects\application, inifile:collected 3 items

test.py ...                                                              [100%]

============================== warnings summary ===============================
D:\filepython\projects\flaskprojects\venv\lib\site-packages\jinja2\filters.py:24
  D:\filepython\projects\flaskprojects\venv\lib\site-packages\jinja2\filters.py:24: DeprecationWarning: Flags not at the start of the expression '\\w+(?u)'
    _word_re = re.compile(r'\w+(?u)')

-- Docs: https://docs.pytest.org/en/latest/warnings.html
==================== 3 passed, 1 warnings in 0.70 seconds =====================
Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/weixin_40775077/article/details/84938090