为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2021-03-28 08:07:04
对于我正在创建的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请求?
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

您可以强制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。


查看完整回答
反对 回复 2021-04-01
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

您是否看过烧瓶的单元测试?


设置代码后,您将获得以下内容


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环境。


查看完整回答
反对 回复 2021-04-01
?
DIEA

TA贡献1820条经验 获得超2个赞

有一种甚至更简单的Flask方法,只需使用PREFERRED_URL_SCHEME等于“ https”的配置参数即可。

您可以在这里找到它的定义。您可以在此处找到Flask在内部如何使用规则。您还可以在这里找到其用法。


查看完整回答
反对 回复 2021-04-01
  • 3 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信