python单元测试示例

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()

你可能感兴趣的:(python,test)