【发布时间】:2018-03-18 12:27:15
【问题描述】:
我正在编写一个小型 Python 烧瓶应用程序,其唯一目的是发出请求以获取一个特定 URL(始终相同)的网页并解析部分内容。该应用程序显示两个端点,/games/ 和 /games/。如果是前者,则返回网页上列出的所有游戏的信息,如果是后者,则仅返回该游戏的信息。
我被要求编写单元测试并将网页视为数据,但我认为测试不应该通过网络到达目标 URL,所以我想做它以便从文件中读取网页我用 curl 制作并使用它作为来源。
我正在努力解决的是如何通过 requests.get() 调用将数据插入到响应对象中。我已经浏览了一页又一页的关于如何进行模拟的示例,但是对于如何做到这一点,没有一个清晰、简单的解释。
这就是我需要做的全部。我有一个来自原始网站的 html 文件,我希望响应数据来自文件,而不是网站。
有什么想法吗?
更新:
我自己想出来的:
我将调用 requests.get 的行分离到一个函数 get_html 中,然后在测试应用程序中模拟它。
@mock.patch ('myflaskApp.get_html')
def test_get_html(get_html):
theSession = requests.Session()
theSession.mount('file://', FileAdapter())
resp = theSession.get('file://'+os.getcwd()+'/mytestdata.html')
然后我意识到我不需要模拟任何东西,从而进一步简化了事情。我更改了 get_html() 以检查 app.testing 标志是否为真,并让它以这种方式加载适配器,否则进行常规获取。
【问题讨论】:
-
见
responses- 你可以随心所欲地制作身体。
标签: python flask mocking python-requests