如何模拟谷歌Api发现HttpResponseSequence



我正在尝试使用Google Api Discovery HttpMockSequence,但我一直收到以下错误:

InvalidJsonError: 
-------------------- >> begin captured logging << --------------------
googleapiclient.discovery: INFO: URL being requested: GET https://www.googleapis.com/discovery/v1/apis/webmasters/v3/rest
googleapiclient.discovery: ERROR: Failed to parse as JSON: /home/user/development/projectname/tests/build_response_data.json
--------------------- >> end captured logging << ---------------------

以下是我要做的事情:

测试.py

build_response = self.datafile('build_response_data.json')
request_data = self.datafile('saved_request_data.json')
http_auth = HttpMockSequence([
    ({'status': '200'}, build_response),
    ({'status': '200'}, request_data)
])
service = build('webmasters',
                'v3',
                http=http_auth,
                developerKey='myapikey1234')

你可以在这里看到我的json文件:build_response_data.json

问题发生在文件googleapiclient/discovery.py 中函数_retrieve_discovery_doc的第253行

我似乎不明白发生了什么…有人能告诉我我在这里做错了什么吗?

为了回答我自己的问题并帮助同舟共济的其他人,问题是函数_retrieve_discovery_doc试图按照第253:行中的json加载内容

service = json.loads(content)

但由于我没有打开文件并读取其内容,json实际上试图将url加载为json。

因此,第一部分的解决方案是将HttpMockSequence更改为:

http_auth = HttpMockSequence([
    ({'status': '200'}, open(build_response, 'rb').read()),
    ({'status': '200'}, open(request_data, 'rb').read())
])

然后要从request_data文件返回数据,请执行以下操作:

site_url = 'www.example.com'
body = {
    'startDate': '2015-09-11',
    'endDate': '2015-12-12',
    'dimensions': ['date']
}
build_response_data = self.datafile('build_response_data.json')
request_data = self.datafile('saved_request_data.json')
http_auth = HttpMockSequence([
    ({'status': '200'}, open(build_response_data, 'rb').read()),
    ({'status': '200'}, open(request_data, 'rb').read())
])
service = build('webmasters',
                'v3',
                http=http_auth,
                developerKey='myapikey1234')
service.searchanalytics().query(siteUrl=site_url, body=body).execute()

希望这能帮助其他人。

相关内容

  • 没有找到相关文章