跳转到主要内容

为Flask内部和外部认证测试提供的pytest固定装置

项目描述

FlaskTester - 为Flask内部和外部认证测试提供的pytest固定装置

此软件包允许在Flask应用程序上运行认证测试,无论是使用内部Flask测试(即test_client)还是外部测试(使用requests执行实际HTTP请求),包括密码和令牌认证以及用户级cookie。

只需要一套测试,通过设置环境变量即可从内部切换到外部。

Status Tests Coverage Issues Python Version Badges License

用法

使用pip install FlaskTester或等效方式安装软件包。

以下测试创建了一个包含2个用户的本地固定装置,这些用户通过密码进行识别,并使用应用程序提供的/login路由检索两个用户的令牌。然后它继续对/admin路由运行认证请求。

import pytest
from FlaskTester import ft_authenticator, ft_client
import secret

@pytest.fixture
def app(ft_client):
    # add test passwords for Calvin and Hobbes (must be consistent with app!)
    ft_client.setPass("calvin", secret.PASSES["calvin"])
    ft_client.setPass("hobbes", secret.PASSES["hobbes"])
    # get user tokens, assume json result {"token": "<token-value>"}
    res = ft_client.get("/login", login="calvin", auth="basic", status=200)
    assert res.is_json
    ft_client.setToken("calvin", res.json["token"])
    res = ft_client.post("/login", login="hobbes", auth="param", status=201)
    assert res.is_json
    ft_client.setToken("hobbes", res.json["token"])
    # also set a cookie
    ft_client.setCookie("hobbes", "lang", "fr")
    ft_client.setCookie("calvin", "lang", "en")
    # return working client
    yield ft_client

def test_app_admin(app):
    app.get("/admin", login=None, status=401)
    for auth in ["bearer", "basic", "param"]:
        res = app.get("/admin", login="calvin", auth=auth, status=200)
        assert res.json["user"] == "calvin" and res.json["isadmin"]
        res = app.get("/admin", login="hobbes", auth=auth, status=403)
        assert 'not in group "ADMIN"' in res.text

这可以针对(本地)服务器运行

export TEST_SEED="some-random-data"              # shared test seed
flask --app app:app run &                        # start flask app
pid=$!                                           # keep pid
export FLASK_TESTER_APP="http://localhost:5000"  # set app local url
pytest test.py                                   # run external tests
kill $pid                                        # stop app with pid

或使用Flask内部测试基础设施本地运行

export FLASK_TESTER_APP="app:app"                # set app package
pytest test.py                                   # run internal tests

上述测试使用tests/app.py运行,该文件是Flask REST应用程序后端,基于密码和令牌认证,并基于FlaskSimpleAuth。该代码使用23行Python代码实现密码(基本和参数)和令牌认证、管理员组授权以及令牌生成(2)、身份验证测试(2)和令人难以置信的基于开放cookie的翻译服务。

请参阅文档

许可

此代码属于公有领域

所有软件都有bug,这是软件,所以……小心,你可能因此失去头发或朋友。如果你喜欢它,请随意给作者寄张明信片。

版本

软件包从PyPI分发,源代码可在GitHub上找到,请报告任何问题

项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪一个,请了解更多关于安装软件包的信息。

源代码分发

flasktester-4.3.tar.gz (14.9 kB 查看哈希值)

上传时间 源代码

构建分发

FlaskTester-4.3-py3-none-any.whl (9.4 kB 查看哈希值)

上传时间 Python 3