API TFS 2018 (версия 4.1) - Python: не удается добавить вложение в результате запуска с использованием версии 4.1 или 5.1
Мне удалось отправить результаты теста из сценария Python для автоматизации на TFS 2018, создав прогон и добавив в него результаты.
Теперь я пытаюсь загрузить созданный мной xml-файл с подробными результатами выполнения теста с помощью вызова API Create Test Result Attachment. Насколько мне известно, версия нашего API - 4.1, а не 5.1.
Это метод, который я написал, чтобы достичь того, что я хочу:
def add_result_attachment(result_id, run_id, filename, stream, conf_object):
url = conf_object.config_map('TFS')['url'] + "IRT/_apis/test/Runs/" + str(run_id) + "/Results/" + str(result_id) + "/attachments"
payload = "{\n \"attachmentType\": \"GeneralAttachment\",\n \"fileName\": \"" + filename + "\",\n \"stream\": \"" + str(stream) + "\",\n \"comment\": \"Test\"\n}"
# specify version of tfs and its rest api
query_string = {"api-version": "5.1-preview"}
headers = {
'Content-Type': "application/json",
'Authorization': MYKEY
}
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
response = requests.request("POST", url, data=payload, headers=headers, params=query_string, verify=False)
print(str(response.status_code) + "\n" + json.dumps(json.loads(response.text), indent=4) + '\n')
Я проверил, что URL дает мне правильные идентификаторы, поэтому он действителен. filename
содержит абсолютный путь к XML-файлу, который я создаю с помощью моей команды pytest.
stream
содержит строку в форме base64 этого xml-файла.
Когда я выполняю это, я получаю в ответ:
Traceback (most recent call last):
File "C:\Users\marialena\source\repos\UI-Tester\test_signin.py", line 210, in tearDown
tfs_api.tfs_api.tfs_process(run_start_time, run_completed_time, class_name, method_name, steps, self.outcome)
File "C:\Users\marialena\source\repos\UI-Tester\tfs_api.py", line 263, in tfs_process
tfs_api.send_run_results(run_start_time, run_completed_time, json_test_cases['id'], test_name, outcome)
File "C:\Users\marialena\source\repos\UI-Tester\tfs_api.py", line 586, in send_run_results
tfs_api.add_result_attachment(result_id, run_id, filename, stream, conf_object)
File "C:\Users\marialena\source\repos\UI-Tester\tfs_api.py", line 457, in add_result_attachment
print(str(response.status_code) + "\n" + json.dumps(json.loads(response.text), indent=4) + '\n')
File "C:\Users\marialena\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\marialena\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\marialena\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 2)
Если я поменяюсь 5.1-preview
в 4.1-preview
для версии я получаю код статуса 400
и следующий ответ:
{
"$id": "1",
"innerException": null,
"message": "Value cannot be null.\r\nParameter name: attachmentRequestModel",
"typeName": "System.ArgumentNullException, mscorlib",
"typeKey": "ArgumentNullException",
"errorCode": 0,
"eventId": 0
}
Есть ли способ решить проблему для 4.1
версия в случае, если она поддерживается этим вызовом или использовать как-то 5.1
даже если у нас нет последней версии TFS? Я также попытался отправить вложение на сам прогон вместо его результата, но и с этим не повезло.
Любая помощь будет оценена. Спасибо!
0 ответов
Если кому-то все еще интересно, кто-то ответил на мой вопрос здесь.
В основном, что нужно было изменить, чтобы:
- использовать более простой путь в корне проекта =>
TestsOut.log
- преобразовать
stream
по-другому =>stream = str(base64.b64encode(data), 'utf-8')