Flask test_client调用get方法报as_tuple意外关键字参数错误
错误原因
抛出TypeError: __init__() got an unexpected keyword argument 'as_tuple'的核心原因是Flask与依赖库Werkzeug版本不兼容:
当前环境中安装的Werkzeug版本≥2.1.0,该版本已经从EnvironBuilder初始化方法中移除了as_tuple入参,但你安装的Flask版本≤2.0.x,其测试客户端逻辑在发起请求时仍会传递这个已被删除的参数,直接触发参数不识别的报错。
除此之外你的测试代码本身存在逻辑缺陷:仅初始化了Flask应用实例,未定义根路径/对应的路由处理函数,就算版本兼容问题修复,访问根路径也会返回404状态码,无法通过200状态码的断言。
排查解决步骤
- 先修复版本兼容问题,两种方案选一种执行即可:
- 方案1:升级Flask到适配高版本Werkzeug的最新稳定版,执行命令:
pip install --upgrade flask - 方案2:若需要保留当前Flask版本,将Werkzeug降级到兼容版本即可,对应Flask 2.0.x的兼容Werkzeug版本为2.0.3,执行命令:
pip install werkzeug==2.0.3
- 方案1:升级Flask到适配高版本Werkzeug的最新稳定版,执行命令:
- 补全测试代码中缺失的路由定义,同时修正
test_client的不规范传参,修改后可正常运行的完整代码如下:
import unittest from flask import Flask app = Flask(__name__) # 定义根路径路由,匹配访问路径 @app.route("/") def index(): return "test ok" class FlaskTest(unittest.TestCase): def test_index(self): # test_client无需传入self参数 tester = app.test_client() response = tester.get("/") self.assertEqual(response.status_code, 200) if __name__ == '__main__': unittest.main()
运行修改后的代码即可得到测试通过的结果。
内容的提问来源于stack exchange,提问作者noobatcoding
相关产品推荐
相关产品推荐

