【问题标题】:Error when using test_client (Flask) - raise ValueError("unknown url type: %r" % self.full_url) [duplicate]使用 test_client (Flask) 时出错-引发 ValueError("unknown url type: %r" % self.full_url) [重复]
【发布时间】:2021-12-30 07:45:22
【问题描述】:

烧瓶应用代码:

# main.py 
from flask import Flask, Response
app = Flask(__name__)


@app.route("/", methods=["POST"])
def post_example():
    return Response("aaa")

这是我的测试代码:

# e2e.py
from main import app

test_client = app.test_client()


def test_flask_api_call():
    response = test_client.post("/", {"a": "b"})
    pass

我一直收到:

raise ValueError("unknown url type: %r" % self.full_url)
ValueError: unknown url type: '://%7B%27a%27:%20%27b%27%7D/'
   

【问题讨论】:

    标签: python flask pytest


    【解决方案1】:

    问题出在post 方法调用上。您必须将您的 data 参数命名为 client.post("/", data={"a": "b"}),如果不是这样,它会被视为 URL 的一部分。

    urllib.parse.quote("/" + str({"a": "b"}))
    # '/%7B%27a%27%3A%20%27b%27%7D'
    

    这是重写的测试代码,为客户端初始化定义fixture。有关在official doc 上测试烧瓶应用程序的更多信息。

    import pytest
    
    from main import app
    
    
    @pytest.fixture(scope="module")
    def client():
        with app.test_client() as client:
            yield client
    
    
    def test_flask_api_call(client):
        response = client.post("/", data={"a": "b"})
        assert response.status_code == 200, f"Got bad status code {response.status_code}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-21
      • 2018-01-14
      • 2018-01-26
      • 2022-01-18
      • 1970-01-01
      • 2021-01-21
      • 2019-07-11
      • 2020-11-21
      相关资源
      最近更新 更多