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)
- 测试类中,需要执行的测试函数以 * test *开头
- 测试时,server 不必执行,只要在测试文件中导入 server 模块即可
- 官方文档中用到了tempfile.mkstemp() 好像是用来创建临时文件句柄的,暂时忽略,用到的时候再看。
- 简单的测试,用 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 也就销毁了。