test_client 里测过了,真实服务器上就一定一样吗?哪些行为只有真实 HTTP 才能验证?这篇把同一个应用放在两边,把差异逐项对照出来(包括一个我没预料到的分块上传结果)。
test client: ['content-length', 'content-type'] gunicorn : ['connection', 'content-length', 'content-type', 'date', 'server'] gunicorn 多出: ['connection', 'date', 'server'] | test client 多出: []
上一篇:test_request_context();下一篇:Fixture 与测试应用工厂。
/p/a%2Fb test client → {'name': 'a/b', 'path': '/p/a/b'}
gunicorn → {'name': 'a/b', 'path': '/p/a/b'}
/p/a//b test client → {'name': 'a//b', 'path': '/p/a//b'}
gunicorn → {'name': 'a//b', 'path': '/p/a//b'}
/p/%E4%B8%AD test client → {'name': '中', 'path': '/p/中'}
gunicorn → {'name': '中', 'path': '/p/中'} 真实 gunicorn,3000 字节分块上传(MAX_CONTENT_LENGTH=1000)→ HTTP/1.1 200 OK | {"cl":null,"n":1000,"te":"chunked"}
test client,3000 字节(有 Content-Length)→ 413
test client 里没有直接模拟分块传输的简单写法(data 传迭代器会报 AttributeError),所以分块上传的行为只能用真实服务器验证第一次运行这一节时我把请求里的换行写错了(写成了字面的反斜杠),得到一个 500,以为是服务器行为,检查输出才发现是我发的请求本身有问题。修正后才看到真实的结果。
TESTING=True 的 test client → 异常传播到测试代码:RuntimeError: view exploded TESTING=False 的 test client → 500 真实 gunicorn → 500
test client: {'host': 'localhost', 'ua': 'Werkzeug/3.1.9', 'url': 'http://localhost/host'}
真实 http.client: {'host': '127.0.0.1:9601', 'ua': None}test client → 308 http://localhost/dir/ gunicorn → 308 http://127.0.0.1:9601/dir/