Flask拾遗笔记之单元测试和g对象

0x01 单元测试

# 测试文件
import server
import unittest

class ServerTestCase(unittest.TestCase):

    def setUp(self):
        'test begin'
        self.app = server.app.test_client()

    def tearDown(self):
        'test end'
        pass

    def test_index(self):
        rv = self.app.get('/')
        # 从这里看出,传送时的都是二进制流,想要拿到符合语言的数据类型要再转换
        assert '666' in rv.data.decode()

if __name__ == '__main__':
    unittest.main()
# server.py
from flask import Flask

app = Flask(__name__)

@app.route('/)
def foo():
    data = {
    'p1': 'pt1',
    'p2': 'pt2'
    }
    return jsonify(data)
  1. 测试类中,需要执行的测试函数以 * test *开头
  2. 测试时,server 不必执行,只要在测试文件中导入 server 模块即可
  3. 官方文档中用到了tempfile.mkstemp() 好像是用来创建临时文件句柄的,暂时忽略,用到的时候再看。
  4. 简单的测试,用 requests 库封装的HTTP请求函数来做也不错。

0x02 g

# server.py
from flask import Flask

app = Flask(__name__)

@app.route('/)
def foo():
    data = {
    'p1': 'pt1',
    'p2': 'pt2'
    }
    return jsonify(data)

@app.after_request
def add_something(resp):
    resp.headers['Something'] = getattr(g, 'user', 'None')

if __name__ == '__main__':
    app.run(debug=True)
# 测试文件
import requests

resp =requests.get('http://127.0.0.1:5000/')
print(resp.headers)

输出如下:

{
 'Server': 'Werkzeug/0.11.10 Python/3.5.2',
 'Date': 'Sat, 15 Jul 2017 04:17:17 GMT', 
 'Content-Type': 'text/html; charset=utf-8', 
 'Something': '666', 
 'Content-Length': '5'
}

可见应用成功。
因为 g 对象是为了在同一请求中传递数据,所以在不同请求中,g 并不是同一个 g;换言之,当前请求完全结束时,当前的 g 也就销毁了。

你可能感兴趣的:(Flask拾遗笔记之单元测试和g对象)