flask 测试模块
问题:
Quit the server with CTRL-BREAK.
Error: [Errno 11001] getaddrinfo failed
--> 端口被占用
如何让别人的电脑访问我的系统项目:
1、首先修改setting.py文件 ALLOWED_HOSTS = ['*']
2、运行时使用该命令 python3 manage.py runserver 0:8000 (ip:8000)
eg: ip --> 改为自己的本机ip
备注:如果上* 为固定的ip,那么运行命令就要改成 python3 manage.py runserver ip:8000
单元测试:
Web程序开发过程:
需求分析,设计阶段,实现阶段,测试阶段
测试阶段:
通过人工或自动来运行测试某个系统的功能。目的是检验其是否满足需求,并得出特定的结果,以达到弄清楚预期结果和实际结果之间的差别的最终目的。
测试分类:
测试从软件开发过程:
单元测试、集成测试、系统测试等
单元测试是由开发人员进行的,而其他测试都由专业的测试人员来完成
单元测试:
写代码是为了实现需求。当我们的代码通过了编译,只是说明它的语法正确,功能能否实现则不能保证。 因此,当我们的某些功能代码完成后,为了检验其是否满足程序的需求。可以通过编写测试代码,模拟程序运行的过程,检验功能代码是否符合预期。
单元测试就是开发者编写一小段代码,检验目标代码的功能是否符合预期
单元测试实际上就是一些“断言”(assert)代码 !!!
断言就是判断一个函数或对象的一个方法所产生的结果是否符合你期望的那个结果。 python中assert断言是声明布尔值为真的判定,如果表达式为假会发生异常。单元测试中,一般使用assert来断言结果
断言:
if not expression:
raise AssertionError
assertEqual 如果两个值相等,则pass
assertNotEqual 如果两个值不相等,则pass
assertTrue 判断bool值为True,则pass
assertFalse 判断bool值为False,则pass
assertIsNone 不存在,则pass
assertIsNotNone 存在,则pass
案列:
def fibo(x):
if x == 0:
resp = 0
elif x == 1:
resp = 1
else:
return fibo(x-1) + fibo(x-2)
return resp
assert fibo(5) == 5
单元测试用法:
1.定义一个类,继承自unittest.TestCase
import unittest
class TestClass(unitest.TestCase):
pass
2.在测试类中,定义两个测试方法
import unittest
class TestClass(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
3. 在测试类中,编写测试代码
import unittest
class TestClass(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_app_exists(self):
pass
登陆测试:
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")
if not all([name, password]):
return jsonify(code=1, message="参数不完整")
if name == "admin" and password =="123456":
return jsonify(code=0, message="OK")
else:
return jsonify(code=2, message="用户名或密码错误")
if __name__ == '__main__':
app.run()
import unittest
from login import app
import json
class TestLogin(unittest.TestCase):
"""定义测试案例"""
def setUp(self):
"""在执行具体的测试方法前,先被调用"""
self.client = app.test_client()
def test_empty_name_password(self):
"""测试模拟场景,用户名或密码不完整"""
response = self.client.post("/login", data={})
resp_json = response.data
resp_dict = json.loads(resp_json)
self.assertIn("code", resp_dict)
code = resp_dict.get("code")
self.assertEqual(code, 1)
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)
def test_wrong_name_password(self):
"""测试用户名或密码错误"""
response = self.client.post("/login", data={"name": "admin", "password": "123"})
resp_json = response.data
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()
数据库测试:
import unittest
from author_book import *
class DatabaseTest(unittest.TestCase):
def setUp(self):
app.config['TESTING'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@localhost/test0'
self.app = app
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
def test_append_data(self):
au = Author(name='test')
bk = Book(info='python')
db.session.add_all([au,bk])
db.session.commit()
author = Author.query.filter_by(name='test').first()
book = Book.query.filter_by(info='python').first()
self.assertIsNotNone(author)
self.assertIsNotNone(book)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步