烧瓶测试:测试应用程序请求?

Anu*_*nuj 7 python flask web 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)
Run Code Online (Sandbox Code Playgroud)

app.test_request_context()做什么以及它与app_context()的不同之处是什么?

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

Cel*_*leo 4

关于这个主题有很多阅读要做,所以从文档开始:app_contexttest_request_context,并且您可以随时仔细检查代码:app_contexttest_request_context。另外,这里有一篇讨论 Flask 上下文的文章。

链接很多,所以进行细分:

我们可以看到app_context创建了一个新的应用程序上下文,同时test_request_context创建了一个新的请求上下文。应用程序上下文在两种情况下创建:在创建请求上下文时手动创建app_context,而请求上下文则在请求开始时test_request_context在请求开始时创建。

因此,当请求进入您的应用程序时,就会创建RequestContext 。该对象的创建创建了一个应用程序上下文。

为什么test_request_context?当您在请求创建的上下文之外工作时,您需要该上下文来访问应用程序,例如您可能认识的代理current_app,例如、requestgsession。深入到代码中,当您使用test_request_context而不是创建 RequestContext 时request_context,您将获得一个EnvironBuilder对象