如何在Python中创建带json()方法的可等待对象以测试aiohttp路由
无需修改原路由代码测试aiohttp接口函数
你当前的核心问题是原路由代码依赖request.json()这个可等待方法,直接传字典会报错。不用改原代码,只要模拟一个具备json()异步方法的请求对象,就能正常测试func1和func2的逻辑。
解决代码示例
写一个极简的模拟类,只实现原代码用到的json()方法即可:
import asyncio from myserver import route1 # 模拟aiohttp Request对象的核心接口 class MockRequest: def __init__(self, json_data): self.json_data = json_data # 实现异步的json()方法,匹配原代码调用逻辑 async def json(self): return self.json_data # 准备测试用的请求数据 test_data = {"some": "data"} # 创建模拟请求实例 mock_request = MockRequest(test_data) # 执行测试 if __name__ == "__main__": loop = asyncio.get_event_loop() response = loop.run_until_complete(route1(mock_request)) # 可选:验证返回结果 print(f"返回状态码: {response.status}") print(f"返回内容: {response.body}")
关键说明
- 不用复刻aiohttp Request的所有属性和方法,只需要实现原代码用到的
json()异步方法 json()方法定义为async def,让原代码里的await request.json()能正常执行,返回你预设的测试数据- 原路由代码完全不需要修改,直接就能完成
func1、func2的逻辑测试
内容的提问来源于stack exchange,提问作者tima
相关产品推荐
相关产品推荐

