用Pytest测试Flask会话

时间:2018-10-08 19:38:48

标签: python flask

目前,我正在开发Flask项目,需要进行一些测试。

我正在努力的测试是关于Flask Sessions。

我有这个观点:

@blue_blueprint.route('/dashboard')
"""Invoke dashboard view."""
if 'expires' in session:
    if session['expires'] > time.time():
        pass
    else:
        refresh_token()
        pass
    total_day = revenues_day()
    total_month = revenues_month()
    total_year = revenues_year()
    total_stock_size = stock_size()
    total_stock_value = stock_value()
    mean_cost = total_stock_value/total_stock_size
    return render_template('dashboard.html.j2', total_day=total_day, <br> total_month=total_month, total_year=total_year, total_stock_size=total_stock_size, total_stock_value=total_stock_value, mean_cost=mean_cost)
else:
    return redirect(url_for('blue._authorization'))

并进行以下测试:

def test_dashboard(client):
    with client.session_transaction(subdomain='blue') as session:
        session['expires'] = time.time() + 10000
        response = client.get('/dashboard', subdomain='blue')
        assert response.status_code == 200

我当前的conftest.py是:

@pytest.fixture
def app():
    app = create_app('config_testing.py')

    yield app


@pytest.fixture
def client(app):
    return app.test_client(allow_subdomain_redirects=True)


@pytest.fixture
def runner(app):
    return app.test_cli_runner(allow_subdomain_redirects=True)

但是,当我执行测试时,我得到的是302状态代码,而不是预期的200状态代码。

所以我的问题是如何正确传递会话值?

OBS:正常运行应用程序的会话if语句正常工作。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案,并希望与您分享答案。

API文档Test Client中说:

  

与with语句结合使用时,将打开一个会话事务。这可用于修改测试客户端使用的会话。离开with块后,会话将重新存储。

对于这项工作,我们应在断言之后的with语句之后放,因此代码应为:

def test_dashboard(client):
    with client.session_transaction(subdomain='blue') as session:
        session['expires'] = time.time() + 10000
    response = client.get('/dashboard', subdomain='blue')
    assert response.status_code == 200

这个简单的缩进解决了我的问题。