【问题标题】:How to import RobotFramework Test Results into XRAY using Python "requests" and API Keys?如何使用 Python“请求”和 API 密钥将 RobotFramework 测试结果导入 XRAY?
【发布时间】:2021-07-16 20:57:45
【问题描述】:

我想写一个 requests 程序而不是 curl 命令来导入测试执行结果。

以下 curl 命令非常适合我,唯一的问题是我需要在机器人执行完成后手动运行它,并且还需要使用我的登录凭据:

curl -H "Content-Type: multipart/form-data" -u adminuser:adminpassword -F "file=@output.xml" "https://<xrayurl>/rest/raven/1.0/import/execution/robot?projectKey=TEST&testEnvironments=SIT1&testPlanKey="TEST-25"

我尝试了以下操作,经过多次失败的尝试终于成功了:

import requests
params = (('projectKey', 'TEST'),)
files = {'file': ('output.xml', open(r'C:\workspace\Results\output.xml', 'rb')),}

response = requests.post('https://<xrayurl>/rest/raven/1.0/import/execution/robot', params=params, files=files, auth=('adminuser', 'adminpassword'))

提前感谢您的帮助/指导。如果我找到一个选项,我会继续尝试并发布答案。

【问题讨论】:

  • 好的。所以经过几次尝试,我找到了部分解决方案。现在python requests.post 方法可以工作了。我将编辑我的问题。
  • 对我有用的另一件事是基本身份验证。我越来越接近我需要的东西。此页面上的信息非常有帮助。一旦我完全完成了我所需要的,我会发布一个答案。但如果有人帮助我到达那里.. 更好! wiki.resolution.de/doc/api-token-authentication/latest/…

标签: jira-xray


【解决方案1】:

首先,需要澄清的是,Xray 云和 Xray 服务器/数据中心是不同的产品,具有不同的 API(Xray Server/DC REST APIXray Cloud REST API)。发生这种情况有几个原因,包括 Jira Cloud 和 Jira 服务器是具有不同功能的不同产品。 话虽如此,让我分享一些 Xray 服务器/DC 和 Xray Cloud 的示例。

Xray 服务器/数据中心

以下代码 sn-p 显示了如何使用 HTTP 基本身份验证以及另一种方法提交结果,方法是使用最近添加到 Jira 数据中心并且 Xray 也支持的个人访问令牌。

import requests
 
jira_base_url = "http://192.168.56.102"
jira_username = "admin"
jira_password = "admin"
personal_access_token = "OTE0ODc2NDE2NTgxOnrhigwOreFoyNIA9lXTZaOcgbNY"


# endpoint doc for importing Robot Framework XML reports: https://docs.getxray.app/display/XRAY/Import+Execution+Results+-+REST#ImportExecutionResultsREST-RobotFrameworkXMLresults
params = (('projectKey', 'CALC'),('fixVersion','v1.0'))
files = {'file': ('output.xml', open(r'output.xml', 'rb')),}

# importing results using HTTP basic authentication
# response = requests.post(f'{jira_base_url}/rest/raven/2.0/import/execution/robot', params=params, files=files, auth=(jira_username, jira_password))

# importing results using Personal Access Tokens 
headers = {'Authorization': 'Bearer ' + personal_access_token}
response = requests.post(f'{jira_base_url}/rest/raven/1.0/import/execution/robot', params=params, files=files, headers=headers)

print(response.status_code)
print(response.content)

X 射线云

import requests
import json

xray_cloud_base_url = "https://xray.cloud.xpand-it.com/api/v2"
client_id = "215FFD69FE4644728C72182E00000000"
client_secret = "1c00f8f22f56a8684d7c18cd6147ce2787d95e4da9f3bfb0af8f02ec00000000"

# endpoint doc for authenticating and obtaining token from Xray Cloud: https://docs.getxray.app/display/XRAYCLOUD/Authentication+-+REST+v2
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
auth_data = { "client_id": client_id, "client_secret": client_secret }
response = requests.post(f'{xray_cloud_base_url}/authenticate', data=json.dumps(auth_data), headers=headers)
auth_token = response.json()
print(auth_token)

# endpoint doc for importing Robot Framework XML reports: https://docs.getxray.app/display/XRAYCLOUD/Import+Execution+Results+-+REST+v2#ImportExecutionResultsRESTv2-RobotFrameworkXMLresults
params = (('projectKey', 'BOOK'),('fixVersion','1.0'))
report_content = open(r'output.xml', 'rb')
headers = {'Authorization': 'Bearer ' + auth_token, 'Content-Type': 'application/xml'}
response = requests.post(f'{xray_cloud_base_url}/import/execution/robot', params=params, data=report_content, headers=headers)

print(response.status_code)    
print(response.content)

【讨论】:

  • 谢谢塞尔吉奥。你的答案正是我想要的。
  • 不客气! @KeshavPrabhu 你能把我的答案标记为最准确的吗?我认为您可能错误地在下面标记了自己的答案。
  • 当然。完毕。我的答案也适用于我:)
【解决方案2】:

我找到了一种无需密码即可使用基本身份验证方法的方法。以下是我遵循的步骤:

从我的 XRAY 配置文件生成密钥 - 将其保存在安全的地方。

按照页面上的说明进行操作:https://wiki.resolution.de/doc/api-token-authentication/latest/user-guide/using-tokens-examples?#id-.UsingTokensExamplesv1.7.0-Python

生成了一个基本的身份验证标头生成器,我在其中提供了我的用户名和从 JIRA 生成的 api_key。显然,在文档页面中推荐了此网页: https://www.blitter.se/utils/basic-authentication-header-generator/

您可以使用上面的页面,也可以使用下面的基本 python sn-p 将字符串转换为基本授权密钥。它隐藏了您的凭据,但仍然可以通过解码找到您的 api_key:

from base64 import urlsafe_b64encode as b64e   
string_to_encode = f"{username}:{api_key}"
encoded_value = b64e(bytearray(string_to_encode, encoding='utf-8'))

我的下一个方法是找出 Bearer Token 方法。但由于某种原因,我还无法弄清楚这个过程。如果我能解决这个问题,我会继续更新这个帖子。

import requests
import codecs
params = {'projectKey': 'TEST', 'testPlanKey':'TEST-31', 'testEnvironments': 'SIT'}
with codecs.open(r'C:\workspace\Results\output.xml') as fin:
    content = fin.read()
files = {'file': ('output.xml', content)}
api_token = encoded_value 
api_header = {'Authorization': 'Basic {}'.format(api_token)}
response = requests.post('https://<xrayurl>/rest/raven/1.0/import/execution/robot', params=params, headers=api_header, files=files, verify=False)  # Remove verify=False after you do the necessary SSL certs
print(response.status_code)
print(response.text)

【讨论】:

  • 对于承载令牌方法,我将参考上面@Sergio的回答。
猜你喜欢
  • 2021-10-04
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 2013-01-08
相关资源
最近更新 更多