如何使用 Python "requests" 和 API 键将 RobotFramework 测试结果导入 XRAY?
How to import RobotFramework Test Results into XRAY using Python "requests" and API Keys?
我想写一个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'))
提前感谢您的help/guidance。我会继续尝试各种选择,如果找到答案,post 会给出答案。
我找到了一种使用基本身份验证方法的方法,它不需要我的密码。以下是我遵循的步骤:
从我的 XRAY 配置文件生成了一个密钥 - 将其保存在安全的地方。
生成了一个基本身份验证 header 生成器,我在其中提供了我的用户名和从 JIRA 生成的 api_key。显然这个网页是在文档页面中推荐的:
https://www.blitter.se/utils/basic-authentication-header-generator/
您可以使用上面的页面,也可以使用下面的基本 python 代码段将字符串转换为您的基本授权密钥。它隐藏了您的凭据,但仍然可以通过解码找到您的 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)
首先,澄清一下,Xray Cloud 和 Xray Server/datacenter 是不同的产品,具有不同的 API (Xray Server/DC REST API, Xray Cloud REST API)。发生这种情况有多种原因,包括 Jira Cloud 和 Jira 服务器是具有不同功能的不同产品。
话虽如此,让我分享一些 Xray server/DC 和 Xray Cloud 的例子。
X射线server/datacenter
以下代码片段展示了如何使用 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)
Xray 云
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)
我想写一个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'))
提前感谢您的help/guidance。我会继续尝试各种选择,如果找到答案,post 会给出答案。
我找到了一种使用基本身份验证方法的方法,它不需要我的密码。以下是我遵循的步骤:
从我的 XRAY 配置文件生成了一个密钥 - 将其保存在安全的地方。
生成了一个基本身份验证 header 生成器,我在其中提供了我的用户名和从 JIRA 生成的 api_key。显然这个网页是在文档页面中推荐的: https://www.blitter.se/utils/basic-authentication-header-generator/
您可以使用上面的页面,也可以使用下面的基本 python 代码段将字符串转换为您的基本授权密钥。它隐藏了您的凭据,但仍然可以通过解码找到您的 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)
首先,澄清一下,Xray Cloud 和 Xray Server/datacenter 是不同的产品,具有不同的 API (Xray Server/DC REST API, Xray Cloud REST API)。发生这种情况有多种原因,包括 Jira Cloud 和 Jira 服务器是具有不同功能的不同产品。 话虽如此,让我分享一些 Xray server/DC 和 Xray Cloud 的例子。
X射线server/datacenter
以下代码片段展示了如何使用 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)
Xray 云
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)