ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用app工厂时,在pytest测试中访问Flask测试客户端会话

2019-07-02 03:45:19  阅读:353  来源: 互联网

标签:python unit-testing flask fixtures pytest


我正在尝试使用pytest和app工厂对应用程序进行单元测试,但我似乎无法在我的测试中访问客户端会话对象.我确定有一些背景我不是在推动某个地方.我在我的’app’夹具中推送应用程序上下文.我应该在某处推送请求上下文吗?

以下是MWE.

mwe.py:

from flask import Flask, session


def create_app():
    app = Flask(__name__)
    app.secret_key = 'top secret'

    @app.route('/set')
    def session_set():
        session['key'] = 'value'
        return 'Set'

    @app.route('/check')
    def session_check():
        return str('key' in session)

    @app.route('/clear')
    def session_clear():
        session.pop('key', None)
        return 'Cleared'

    return app


if __name__ == "__main__":
    mwe = create_app()
    mwe.run()

conftest.py:

import pytest
from mwe import create_app


@pytest.fixture(scope='session')
def app(request):
    app = create_app()

    ctx = app.app_context()
    ctx.push()

    def teardown():
        ctx.pop()

    request.addfinalizer(teardown)
    return app


@pytest.fixture(scope='function')
def client(app):
    return app.test_client()

test_session.py:

import pytest
from flask import session


def test_value_set_for_client_request(client):  # PASS
    client.get('/set')
    r = client.get('/check')
    assert 'True' in r.data


def test_value_set_in_session(client):  # FAIL
    client.get('/set')
    assert 'key' in session


def test_value_set_in_session_transaction(client):  # FAIL
    with client.session_transaction() as sess:
        client.get('/set')
        assert 'key' in sess

请注意,直接运行它可以正常工作,我可以跳转/设置,/检查,/清除它,它的行为符合预期.类似地,仅使用测试客户端来获取页面的测试按预期工作.但是,似乎没有直接访问会话.

解决方法:

从cookie000-flask中的conftest.py开始查看以下内容.它可能会给你一些想法.

@pytest.yield_fixture(scope='function') def app():
    """An application for the tests."""
    _app = create_app(TestConfig)
    ctx = _app.test_request_context()
    ctx.push()

    yield _app

    ctx.pop()


@pytest.fixture(scope='function') def testapp(app):
    """A Webtest app."""
    return TestApp(app)

标签:python,unit-testing,flask,fixtures,pytest
来源: https://codeday.me/bug/20190702/1353485.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有