- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
原帖:我正在尝试以编程方式创建缺陷。我遇到了一些错误,并且无法进一步了解。基本上,这里是代码:
import requests, json
rally_auth = ('my_user', 'my_pw')
rally_auth_url = 'https://rally1.rallydev.com/slm/webservice/v2.0/security/authorize'
rally_defect = 'https://rally1.rallydev.com/slm/webservice/v2.0/defect/defect'
workspace_ref = 'https://rally1.rallydev.com/slm/webservice/v2.0/workspace/12345'
fe_project_ref = 'https://rally1.rallydev.com/slm/webservice/v2.0/project/7890'
current_fe_release_ref = "https://rally1.rallydev.com/slm/webservice/v2.0/release/45678"
r = requests.get(rally_auth_url, auth=rally_auth)
token = r.json()['OperationResult']['SecurityToken']
url = rally_defect + '/create?key=' + token
payload = {
'Name': 'My defect',
'State': 'Open',
'Project': fe_project_ref,
'Rank': 120,
'Release': current_fe_release_ref,
'key': token
}
headers = {'content-type': 'application/json'}
r = requests.post(url, data=json.dumps(payload), auth=rally_auth, headers=headers)
您会注意到我已将 token 放在 POST 的 URL 和数据中。 API 文档说我应该在 URL 中包含 key ,但如果我不在 POST 数据中包含 key ,我会得到:
{"CreateResult": {"_rallyAPIMajor": "2", "_rallyAPIMinor": "0", "Errors": ["Not authorized to perform action: Invalid key"], "Warnings": []}}
如果我包含 key ,API 请求将以不同方式结束。它会在第一个逗号处失败。
{"CreateResult": {"_rallyAPIMajor": "2", "_rallyAPIMinor": "0", "Errors": ["Cannot parse input stream due to I/O error as JSON document: Parse error: expected '}' but saw ',' [ chars read = >>>{\"Name\": \"My defect\",<<< ]"], "Warnings": []}}
我很困惑。
固定代码感谢@nickm
import requests, json
rally_auth = ('my_user', 'my_pw')
rally_auth_url = 'https://rally1.rallydev.com/slm/webservice/v2.0/security/authorize'
rally_defect = 'https://rally1.rallydev.com/slm/webservice/v2.0/defect/defect'
workspace_ref = 'https://rally1.rallydev.com/slm/webservice/v2.0/workspace/12345'
fe_project_ref = 'https://rally1.rallydev.com/slm/webservice/v2.0/project/7890'
current_fe_release_ref = "https://rally1.rallydev.com/slm/webservice/v2.0/release/45678"
s = requests.Session()
r = s.get(rally_auth_url, auth=rally_auth)
token = r.json()['OperationResult']['SecurityToken']
url = rally_defect + '/create?key=' + token
payload = {
'Name': 'My defect',
'State': 'Open',
'Project': fe_project_ref,
'Rank': 120,
'Release': current_fe_release_ref,
}
headers = {'content-type': 'application/json'}
r = s.post(url, data=json.dumps(payload), headers=headers)
最佳答案
如果您使用的是 v2.0 的 WS API,则更新和创建请求需要 token ,因此将其包含在您的发布请求 url 中是正确的。
如果 token 未附加到请求或 token 对于特定 session 无效,则会出现无效 key 错误。当直接访问端点时,我们必须使用 cookie 维护一个 http session ,否则发布会在新 session 的上下文中发生——与我们获得 token 的 session 不同。
请参阅this post .它不特定于 Python,但在概念上是相同的。
我注意到有效负载中的等级。你有排名自定义字段吗? Rally 的 v2.0 中没有这样的内置字段。有一个 DragAndDropRank,它不是数字,通过提供 120 的值来设置它是行不通的。此外,您是否尝试在有效负载中使用双引号而不是单引号?
有一个金字塔 - Rally Python toolkit提供方便的方法,因此您不必直接访问端点。目前它适用于 1.43 的 WS API。该工具包未得到官方支持,但我预计它会在 2014 年 6 月之前更新为与 WS API v2.0 一起使用,届时不再支持 1.43(根据 this schedule )。安全 token 是在 v2.0 中引入的。 WS API 的 1.43 中不存在用于 post 请求的额外身份验证层,如果使用 pyral,则无需处理 token 。
关于python - RallyDev : Unable to create defect. 服务器说 "Cannot parse input ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22573359/
我是一名优秀的程序员,十分优秀!