使用请求-html 在不启动服务器的情况下测试 Flask 应用

我一直在使用 Flask 对象来测试我的 Web 应用程序。我使用美丽汤来解析其中一些调用的 HTML 输出。test_client

现在我想尝试请求-html,但我不知道如何使它与Flask测试客户端一起工作。这些示例都使用请求包来获取响应,但 Werkzeug 测试客户端不会进行实际的 HTTP 调用。据我所知,它设置了环境,只是调用处理程序方法。

有没有办法在不运行实际服务的情况下完成这项工作?


回首忆惘然
浏览 55回答 1
1回答

慕盖茨4494581

请求-wsgi 适配器提供了一个适配器,用于在 URL 上挂载可调用的 WSGI。您可以使用会话.mount()&nbsp;来挂载适配器,因此对于请求-html,您将改用并挂载到该适配器。HTMLSession$ pip install flask requests-wsgi-adapter requests-htmlfrom flask import Flaskapp = Flask(__name__)@app.route("/")def index():&nbsp; &nbsp; return "<p>Hello, World!</p>"from requests_html import HTMLSessionfrom wsgiadapter import WSGIAdapters = HTMLSession()s.mount("http://test", WSGIAdapter(app))r = s.get("http://test/")assert r.html.find("p")[0].text == "Hello, World!"使用请求的缺点是,您必须在要向其发出请求的每个URL之前添加。Flask 测试客户端不需要这样做。"http://test/"除了使用请求和请求-html 之外,您还可以告诉 Flask 测试客户端返回一个响应,该响应将为您执行美丽苏美解析。在快速浏览了请求-html之后,我仍然更喜欢直接的烧瓶测试客户端和美丽汤API。$ pip install flask beautifulsoup4 lxmlfrom flask.wrappers import Responsefrom werkzeug.utils import cached_propertyclass HTMLResponse(Response):&nbsp; &nbsp; @cached_property&nbsp; &nbsp; def html(self):&nbsp; &nbsp; &nbsp; &nbsp; return BeautifulSoup(self.get_data(), "lxml")app.response_class = HTMLResponsec = app.test_client()r = c.get("/")assert r.html.p.text == "Hello, World!"您还应该考虑使用 HTTPX 而不是请求。它是一个现代的,维护良好的HTTP客户端库,与请求共享许多API相似之处。它还具有出色的功能,例如异步,HTTP / 2以及直接调用WSGI应用程序的内置功能。$ pip install flask httpxc = httpx.Client(app=app, base_url="http://test")with c:&nbsp; &nbsp; r = c.get("/")&nbsp; &nbsp; html = BeautifulSoup(r.text)&nbsp; &nbsp; assert html.p.text == "Hello, World!"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python