python单元测试:
由多个assert 构成的代码
assert(断言):后面是一个表达式,如果返回True,则断言成功,程序可以继续执行;如果返回False,则断言失败,会抛出AssertionError,终止程序的继续执行.
Flask框架测试:
from flask import Flask
import unittest
import json
class DemoTest(unittest.TestCase):
app = Flask(name)
def test_demo(self): # 必须以test_打头
client = app.test_client() # 创建flask测试客户端
ret = client.post(view_url, data={}) # 使用post方式访问对应url,并获取返回对象
resp_dict = json.loads(ret.data) # 返回的json数据
# assertIn, assertEqual, assertTrue, assertFalse, assertIs, assertIsNone, assertEquals ...
self.assertIn('code', resp)
if __name__ == "__main__":
unittest.main()
## 测试中常用的两个方法
# 在这个测试用例中的每个测试都会用到测试客户端,但如果在每个测试中都写一端代码去生成测试客户端,则显然是不合理的,Flask提供了一个在每个单元测试运行之前被调用的方法,叫做setUp方法,在setUp方法中,我们需要使用TestConfig来创建应用对象,并生成测试客户端
class TestClass(unittest.TestCase):
def setUp(self):
self.app = create_app('testing')
self.app_context = self.app.app_context()
self.app_context.push()
# 设置flask 测试模式,将会抛出具体的错误原因
self.app.config['TESTING'] = True
# 或者 self.app.testing = True
self.client = self.app.test_client()
# 另外还存在一个tearDown方法可以与setUp配合是使用,每个测试执行结束后,都会调用这个方法,可以在tearDown时销毁在setUp里创建的不会被自动垃圾回收干掉的对象
class TestClass(unittest.TestCase):
def tearDown(self):
db.session.remove()
db.drop_all()