Flask(Connexion)API测试报错:200 != <Response streamed [200 OK]>
解决Flask/Connexion API测试中状态码断言失败的问题
嘿,我一眼就看出问题出在哪啦!你现在遇到的错误是因为用错了Response对象的状态码属性,导致拿不到预期的整数200,反而拿到了整个响应状态的描述字符串。
问题原因
在Flask(包括基于它的Connexion)的测试客户端返回的Response对象里,_status_code是内部私有属性,它并不是直接返回整数状态码,而是可能返回一个包含状态描述的对象(比如你看到的<Response streamed [200 OK]>)。而我们应该使用公开的status_code属性来获取整数形式的状态码。
修改后的正确代码
把你的断言代码改成下面这样就可以了:
response_add_subscription_1 = self.app.post( '/user/alice/data_source/{}/subscriptions/{}'.format(ds_uuid1, dp_uuid), content_type='application/json' ) # 使用公开的status_code属性,而不是私有属性_status_code self.assertEqual(200, response_add_subscription_1.status_code, "Status code of response for subscription registration of alice is not 200!")
额外小提示
- 如果你想验证响应的状态文本(比如"OK"),可以用
response_add_subscription_1.status,它会返回类似"200 OK"的字符串。 - 测试API的时候,除了状态码,还可以用
response_add_subscription_1.get_json()来解析返回的JSON数据,进一步验证接口的返回内容是否符合预期。 - Connexion的测试客户端完全兼容Flask的测试规范,所以后续写测试的时候,尽量参考Flask官方文档里的测试属性和方法,避免使用带下划线的私有属性,这些属性可能会在框架版本更新时发生变化。
内容的提问来源于stack exchange,提问作者Gasp0de
相关产品推荐
相关产品推荐

