如何在Flask中对HTTPS请求进行单元测试?

对于我正在创建的Flask应用程序中的某些页面,我有一个HTTPS重定向系统,如下所示。


def requires_https(f, code=302):

    """defaults to temp. redirect (301 is permanent)"""

    @wraps(f)

    def decorated(*args, **kwargs):

        passthrough_conditions = [

            request.is_secure,

            request.headers.get('X-Forwarded-Proto', 'http') == 'https',

            'localhost' in request.url

        ]


        if not any(passthrough_conditions):

            if request.url.startswith('http://'):

                url = request.url.replace('http://', 'https://')

                r = redirect(url, code=code)

                return r

    return decorated

如果您不请求页面的HTTPS版本,它将重定向到该页面。我想为此服务编写单元测试。我写了一篇确保您重定向到HTTPS版本的邮件(基本上检查301或301)。我想测试一下,如果您正在请求页面的https版本并且已经在https上,它不会重定向您(基本上是200)。如何在单元测试中让Flask发送https请求?


红糖糍粑
浏览 184回答 3
3回答

慕的地10843

您可以强制Flask测试的get()调用使用HTTPS,如下所示:response = self.app.get('/login', base_url='https://localhost')assert(response.status_code == 200)基础的Werkzeug使用base_url的附加内容来设置url方案(HTTP / HTTPS)。对于此类本地测试调用,不使用主机名,可以将其省略。您可以在此处找到base_url的代码文档中的basic。

拉丁的传说

您是否看过烧瓶的单元测试?设置代码后,您将获得以下内容response = self.client.get(url)self.assertEquals(response.status_code, 301)self.assertEquals(resonse.text.find('https'), 0)更新似乎最好的方法是创建一个werkzeug环境。Flask使用werkzeug测试客户端。您可以在这里查看api 。快速入门(非常有用)在此处。您会看到werkzeug有一个带有base_url的EnvironBuilder。也许可以模拟测试套件中的https环境。

DIEA

有一种甚至更简单的Flask方法,只需使用PREFERRED_URL_SCHEME等于“ https”的配置参数即可。您可以在这里找到它的定义。您可以在此处找到Flask在内部如何使用规则。您还可以在这里找到其用法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python