【发布时间】:2019-12-07 05:46:18
【问题描述】:
好的,所以这是一个加载的问题,但我确信这里有一个简单的方法可以使用,但我被卡住了。
长话短说,我的任务是在 python 中创建一个函数(运行 AWS lambda),它可以使用 python-requests 对一系列 URL 执行验收测试。这些请求将用于断言 HTTP 响应代码和自定义 HTTP 标头,用于标识 haproxy 后端是否正确。
URL 本身将保存在 yaml 文档中,该文档将在 python 中转换为 dict 并传递给 for 循环,该循环将使用 python requests 到 HTTP GET 的响应代码和 URL 标头.
我遇到的问题是让单个 body 对象返回多个 for 循环的结果。
我试图找到类似的用例,但找不到
import requests
import json
import yaml
def acc_tests():
with open("test.yaml", 'r') as stream:
testurls = yaml.safe_load(stream)
results = {}
# endpoint/path 1
for url in testurls["health endpoints"]:
r = requests.get(url, params="none")
stat = r.status_code
result = json.dumps(print(url, stat))
results = json.dumps(result)
# endpoint path with headers
for url in testurls["xtvapi"]:
headers = {'H': 'xtvapi.cloudtv.comcast.net'}
r = requests.get(url, headers=headers, params="none")
stat = r.status_code
head = r.headers["X-FINITY-TANGO-BACKEND"]
result = json.dumps((url, stat, head))
results = json.dumps(result)
return {
'statusCode': 200,
'body': json.dumps(results)
}
acc_tests()
YAML 文件:
health endpoints:
- https://xfinityapi-tango-production-aws-us-east-1-active.r53.aae.comcast.net/tango-health/
- https://xfinityapi-tango-production-aws-us-east-1-active.r53.aae.comcast.net/
- https://xfinityapi-tango-production-aws-us-east-2-active.r53.aae.comcast.net/tango-health/
- https://xfinityapi-tango-production-aws-us-east-2-active.r53.aae.comcast.net/
- https://xfinityapi-tango-production-aws-us-west-2-active.r53.aae.comcast.net/tango-health/
- https://xfinityapi-tango-production-aws-us-west-2-active.r53.aae.comcast.net/
xtvapi:
- https://xfinityapi-tango-production-aws-us-east-1-active.r53.aae.comcast.net/
- https://xfinityapi-tango-production-aws-us-east-2-active.r53.aae.comcast.net/
- https://xfinityapi-tango-production-aws-us-west-2-active.r53.aae.comcast.net/
我认为正在发生的事情是两个for 循环都在一个接一个地运行,但results 的值是空的,但我不确定要更新/附加results 该怎么做dict 每个循环的结果。
【问题讨论】:
-
你能发布一个来自
testurls["health endpoints"]和一个来自testurls["xtvapi"]的示例网址吗? -
在
for循环的每次迭代中,您都将使用json.dumps(result)覆盖它。因此最后,results只包含最后一个结果。 -
@JackFleeting 这里是一个应该可以工作的 .yaml 文件。这些网址可公开访问
-
@dashmug 我明白你的意思,但我不确定是否有任何替代方案。据我所知,
dictionary.update只会更新 现有键的现有值。追加到字典的好方法是什么?仅使用列表是否值得?请记住,return函数的body必须位于有效的 json 中,aws lambda 才能在 HTTP 响应中返回它。 -
假设您只有来自
health endpoints的第一个网址和来自xtvapi的第一个网址可以使用-body究竟会是什么样子?
标签: json python-3.x loops python-requests yaml