python - flask 测试 : Test App Request?

标签 python web flask flask-testing

在进行 Miguel Grinberg 的 Flask Web 开发时,我在测试 gravatar 代码时卡住了,

def test_gravatar(self):
    u = User(email='john@example.com', password='cat')
    with self.app.test_request_context('/'):
        gravatar = u.gravatar()
        gravatar_256 = u.gravatar(size=256)
        gravatar_pg = u.gravatar(rating='pg')
        gravatar_retro = u.gravatar(default='retro')
    with self.app.test_request_context('/', base_url='https://example.com'):
        gravatar_ssl = u.gravatar()
    self.assertTrue('http://www.gravatar.com/avatar/' +
                    'd4c74594d841139328695756648b6bd6'in gravatar)
    self.assertTrue('s=256' in gravatar_256)
    self.assertTrue('r=pg' in gravatar_pg)
    self.assertTrue('d=retro' in gravatar_retro)
    self.assertTrue('https://secure.gravatar.com/avatar/' +
                    'd4c74594d841139328695756648b6bd6' in gravatar_ssl)

app.test_request_context() 有什么作用,它与 app_context() 有何不同?

为什么我们甚至需要调用 self.app.test_request_context('/')?此外,我们可以做哪些更改以将调用转移到 SetUp() 中的 app.test_request_context()?

最佳答案

关于这个主题有很多阅读资料,所以从文档开始:app_context , test_request_context ,您可以随时仔细检查代码:app_contexttest_request_context .此外,here's一篇讨论 Flask 上下文的文章。

这是很多链接,所以要分解一下:

我们可以看到app_context 创建了一个新的application 上下文,而test_request_context 创建了一个新的request 上下文。应用程序上下文在 two situations 中创建:手动使用 app_context 并在创建请求上下文时使用 test_request_contextat the beginning of the request 创建请求上下文.

所以当 request comes into your application ,一个RequestContext被创建。该对象的创建创建了一个应用程序上下文。

为什么要test_request_context?在请求创建的上下文之外工作时,您需要该上下文 来访问应用程序,例如 proxies你可能认识,比如current_app , request , g , 和 session .深入代码,当您使用 test_request_context 而不是 request_context 创建 RequestContext 时,你会得到一个 EnvironBuilder object .

关于python - flask 测试 : Test App Request?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31059310/

相关文章:

python - 处理 Word 文档的最佳方式

ssl - 使用 TLS V1.0 而非 SSL3.0 连接的 Web 开发软件

javascript - 包含脚本

python - 处理 Flask url 创建中的空格

python - nginx下运行python

python - 使用NumPy最小化此错误功能

python - 轴 1 上带有 boolean 数组的 Pandas loc() 方法

python - Django-URL 命名空间

python - 使用 flask 的 socketio 扩展从线程发出

python - 如何使用提交表单将消息保存在数据库中