如何在内部调用 sanic asyncio rest 端点以进行测试
How to call the sanic asyncio rest endpoint internally for testing purpose
下面是sanic的一个简单例子
from sanic import Sanic
from sanic import response as res
app = Sanic(__name__)
@app.route("/")
async def test(req):
return res.text("I\'m a teapot", status=418)
if __name__ == '__main__':
app.run(host="0.0.0.0", port=8000)
现在,这将打开我发送请求的端口 8000。取而代之的是,我可以在相同的 python 代码中在内部调用 test(req) 吗,比如:
from sanic import Sanic
from sanic import response as res
## generating some data
req = generate_data()
app = Sanic(__name__)
@app.route("/")
async def test(req):
return res.text("I\'m a teapot", status=418)
if __name__ == '__main__':
app.call(test(req)) ????????????????
#app.run(host="0.0.0.0", port=8000)
为了测试,我可以做类似 app.call(test(req)) 的事情,这样生成的相同 'req' 数据可以传递给 sanic api 而无需任何 HTTP开销?
内置了两个测试客户端。同步版本支持应用程序并提交http请求。异步版本避免了利用 ASGI 到达内部并执行处理程序。听起来这就是你想要的。
request, response = await app.asgi_client.put('/')
下面是sanic的一个简单例子
from sanic import Sanic
from sanic import response as res
app = Sanic(__name__)
@app.route("/")
async def test(req):
return res.text("I\'m a teapot", status=418)
if __name__ == '__main__':
app.run(host="0.0.0.0", port=8000)
现在,这将打开我发送请求的端口 8000。取而代之的是,我可以在相同的 python 代码中在内部调用 test(req) 吗,比如:
from sanic import Sanic
from sanic import response as res
## generating some data
req = generate_data()
app = Sanic(__name__)
@app.route("/")
async def test(req):
return res.text("I\'m a teapot", status=418)
if __name__ == '__main__':
app.call(test(req)) ????????????????
#app.run(host="0.0.0.0", port=8000)
为了测试,我可以做类似 app.call(test(req)) 的事情,这样生成的相同 'req' 数据可以传递给 sanic api 而无需任何 HTTP开销?
内置了两个测试客户端。同步版本支持应用程序并提交http请求。异步版本避免了利用 ASGI 到达内部并执行处理程序。听起来这就是你想要的。
request, response = await app.asgi_client.put('/')