Library used only for implementors of custom listeners for ReportPortal
The latest stable version is available on PyPI:
pip install reportportal-client
Main classes are:
- reportportal_client.ReportPortalService
- reportportal_client.ReportPortalServiceAsync
Basic usage example:
import os
import subprocess
import traceback
from mimetypes import guess_type
from time import time
from reportportal_client import ReportPortalServiceAsync
def timestamp():
return str(int(time() * 1000))
endpoint = "http://10.6.40.6:8080"
project = "default"
# You can get UUID from user profile page in the Report Portal.
token = "1adf271d-505f-44a8-ad71-0afbdf8c83bd"
launch_name = "Test launch"
launch_doc = "Testing logging with attachment."
def my_error_handler(exc_info):
"""
This callback function will be called by async service client when error occurs.
Return True if error is not critical and you want to continue work.
:param exc_info: result of sys.exc_info() -> (type, value, traceback)
:return:
"""
print("Error occurred: {}".format(exc_info[1]))
traceback.print_exception(*exc_info)
service = ReportPortalServiceAsync(endpoint=endpoint, project=project,
token=token, error_handler=my_error_handler)
# Start launch.
launch = service.start_launch(name=launch_name,
start_time=timestamp(),
description=launch_doc)
# Start test item.
test = service.start_test_item(name="Test Case",
description="First Test Case",
tags=["Image", "Smoke"],
start_time=timestamp(),
item_type="STEP",
parameters={"key1": "val1",
"key2": "val2"})
# Create text log message with INFO level.
service.log(time=timestamp(),
message="Hello World!",
level="INFO")
# Create log message with attached text output and WARN level.
service.log(time=timestamp(),
message="Too high memory usage!",
level="WARN",
attachment={
"name": "free_memory.txt",
"data": subprocess.check_output("free -h".split()),
"mime": "text/plain"
})
# Create log message with binary file, INFO level and custom mimetype.
image = "/tmp/image.png"
with open(image, "rb") as fh:
attachment = {
"name": os.path.basename(image),
"data": fh.read(),
"mime": guess_type(image)[0] or "application/octet-stream"
}
service.log(timestamp(), "Screen shot of issue.", "INFO", attachment)
# Create log message supplying only contents
service.log(
timestamp(),
"running processes",
"INFO",
attachment=subprocess.check_output("ps aux".split()))
# Finish test item.
service.finish_test_item(end_time=timestamp(), status="PASSED")
# Finish launch.
service.finish_launch(end_time=timestamp())
# Due to async nature of the service we need to call terminate() method which
# ensures all pending requests to server are processed.
# Failure to call terminate() may result in lost data.
service.terminate()
python-client uses request
library for working with RP and the same semantics to work with attachments (data).
There are two ways to pass data as attachment:
with open(screenshot_file_path, "rb") as image_file:
rp_logger.info("Some Text Here",
attachment={"name": "test_name_screenshot.png",
"data": image_file,
"mime": "image/png"})
with open(screenshot_file_path, "rb") as image_file:
file_data = image_file.read()
rp_logger.info("Some Text Here",
attachment={"name": "test_name_screenshot.png",
"data": file_data,
"mime": "image/png"})
Licensed under the Apache 2.0 license (see the LICENSE.txt file).