Skip to content

Usage Reference Manual

1. Steps Description

  1. Create a Python file and paste the API paths, dependencies, and request methods into it in order.
  2. Paste the corresponding Implementation module code in order.
  3. The Login function is required and must be called first — all operations depend on the Token carried by the login function.
  4. Paste the usage example and make minor parameter adjustments according to your environment (e.g., request URL, Use Case library name, etc.) to successfully call the API.
  5. Modify the following locations:
# Modify the URL and cloud account to match your own
SimOneUrl = "http://127.0.0.1:30083"
loginData = {
    "username": 'admin',
    "password": 'admin',
}


if __name__ == '__main__':
    # Cloud login
    LoginPolicy("cloud")
    # Standalone login
    LoginPolicy("standalone")

Note: The appendix reference code is a runnable code example assembled in the order described above. If in doubt, please refer to the appendix reference code!

2. API Paths and Dependencies

import base64
import copy
import inspect
import random
from os.path import exists

from Crypto.Cipher import AES
from faker import Faker
from requests import request, Response
import json
from urllib.parse import urljoin
import os
import time

# Modify the URL and cloud account to match your own
SimOneUrl = "http://127.0.0.1:30083/"
loginData = {
    "username": 'admin',
    "password": 'admin',
}

fake = Faker('zh_CN')
version_url = "version"
interval = 10

# header
header = {
    "Content-Type": "application/json",
}


# Environment Path
class EnvPath:
    token = "TOKEN"


class Prefix:
    UserServer = "api-user"
    CaseServer = "api-case"
    AssetServer = "api-asset"
    TaskServer = "api-task"

# token
_token = os.environ.get(EnvPath.token)


"""  Login-related APIs  """
user_check_url = Prefix.UserServer + "/users/check"
health = Prefix.UserServer + "/health"  # Check service health
cloud_login_url = Prefix.UserServer + "/users/login"  # Cloud login
standalone_login_url = Prefix.UserServer + "/users/standalone"  # Standalone login
login_check = Prefix.UserServer + "/users/check"  # user check

"""  Use Case library category APIs  """
categories_url = Prefix.CaseServer + "/categories"  # Use Case library category
get_categories_url = Prefix.CaseServer + "/categories?withCases=false"  # Get all Use Case libraries
get_cases_url = "api-case/cases?page=1&filter={category}&pageSize=100"
# get_cases_url = Prefix.CaseServer + "/cases?page={page}&filter={category}&pageSize=100"  # Get all Use Cases in the current library
delete_categories_url = Prefix.CaseServer + "/categories/{}"  # Delete Use Case library category

"""  File upload APIs  """
file_md5_url = Prefix.AssetServer + "/files/{}?raw={}"  # Verify file MD5
upload_file_url = Prefix.AssetServer + "/files/{}/upload?raw={}"  # Upload file

"""  Use Case APIs  """
case_import_url = Prefix.AssetServer + "/cases/import"  # Import Use Case
case_details_url = Prefix.CaseServer + "/cases/{case_id}/data"  # Use Case details
delete_case_url = Prefix.CaseServer + "/trash"  # Delete Use Case
convert_replay_case_url = Prefix.TaskServer + "/tasks/{id}/convert2case"  # Convert Replay Use Case
case_def_url = Prefix.CaseServer + "/cases/{case_id}"  # Use Case summary
update_case_url = Prefix.AssetServer + "/cases/update"  # Edit Use Case # doing

"""  Task APIs  """
create_task_url = Prefix.TaskServer + "/tasks"  # Create Task
stop_task_url = Prefix.TaskServer + "/tasks/stop"  # Stop Task
stop_sessions_url = Prefix.TaskServer + "/sessions/stop"  # Stop session
delete_task_url = Prefix.TaskServer + "/tasks/delete"  # Delete Task
delete_sessions_url = Prefix.TaskServer + "/sessions/delete"  # Delete session
result_url = Prefix.TaskServer + "/tasks/task?taskIds={task_id}"  # Use Case run result details
task_info = Prefix.TaskServer + "/tasks/task"  # Use Case run result details
pause_task_url = Prefix.TaskServer + "/sessions/{task_id}/pause"  # Pause Task
resume_task_url = Prefix.TaskServer + "/sessions/{task_id}/resume"  # Resume paused Task
task_result_url = Prefix.TaskServer + "/tasks/task?taskIds={id}"  # Use Case run result details

"""  Ego Vehicle APIs  """
import_vehicle_url = Prefix.AssetServer + "/vehicles/import"  # Import Ego Vehicle
delete_vehicle_url = Prefix.AssetServer + "/vehicles/{vehicles_id}"  # Delete Ego Vehicle
get_vehicle_url = Prefix.AssetServer + "/vehicles"  # GET: get Ego Vehicle info; POST: create Ego Vehicle
get_vehicles_url = Prefix.AssetServer + "/vehicles"  

"""  Map APIs  """
import_map_url = Prefix.AssetServer + "/maps"  # Import map
delete_map_url = Prefix.CaseServer + "/maps/trash"  # Delete map
get_map_url = Prefix.CaseServer + "/maps?pageSize=100"  # Get map info
road_service_url = Prefix.TaskServer + "/sce"  # Start road network service
laneTypeIfInside_url = Prefix.TaskServer + "/sce/{map_id}/location/laneTypeIfInside"  # Check if point is inside a lane

"""  Data-driven APIs  """
import_data_driven_url = Prefix.AssetServer + "/dd"  # Import data-driven source
delete_data_dirven_url = Prefix.AssetServer + "/dd/{id}"  # Delete data-driven source

""" Asset APIs """
import_asset_url = Prefix.AssetServer + "/assets"  # Import Asset
asset_repeat_url = Prefix.AssetServer + "/assets/isrepeat"  # Check Asset duplicate
get_asset_url = Prefix.AssetServer + "/assets?schema={}"  # Get Asset info
delete_asset_url = Prefix.AssetServer + "/assets/{}"  # Delete Asset

"""  Use Case export APIs  """
export_case_url = Prefix.AssetServer + "/cases/export"  # Export Use Case
download_case_url = Prefix.AssetServer + "/{pake_id}"  # Download Use Case

"""  Test Suite APIs  """
get_suites_url = Prefix.AssetServer + "/suites"  # Get Test Suite
run_suite_url = Prefix.TaskServer + "/tasks"  # Run Test Suite
get_task_list_url = Prefix.TaskServer + "/tasks?finished=true&page=0&pageSize=12&own=true&expandedIds={task_set_id}"  # Get Task list
queue_status_url = Prefix.TaskServer + "/tasks/queue?own=true"  # Check Test Suite run status

"""  Judgment APIs  """
get_judgements_url = Prefix.AssetServer + "/cases/{caseId}/judgements"  # Get/update all Judgment info
get_judgement_url = "api-asset/cases/{caseId}/judgements/{judgementId}" # Get/update single Judgment info

"""  Test Plan APIs  """
testPlan_list_url = Prefix.TaskServer + "/testPlan?page=1&pageSize=20&options={options}"  # Get Test Plan list
testPlan_id_url = Prefix.TaskServer + "/testPlan/{id}"  # Get/update Test Plan (including rename)
create_testPlan_url = Prefix.TaskServer + "/testPlan"  # Create Test Plan
del_testPlan_url = Prefix.TaskServer + "/testPlan/delete"  # Delete Test Plan
del_testPlan_single_url = Prefix.TaskServer + "/testPlan/{id}"  # Delete single Test Plan
execute_testPlan_url = Prefix.TaskServer + "/testPlan/execute"  # Execute Test Plan
clone_testPlan_url = Prefix.TaskServer +"/testPlan/{id}/clone"  # Clone Test Plan
isrepeat_testPlan_url = Prefix.TaskServer +"/testPlan/isrepeat?name={name}&type={type}"  # Check Test Plan name existence

"""Test report export APIs"""
export_report_url = Prefix.TaskServer + "/sessions/{sessions_id}/report" # Export test report
download_report_url = "/report/{sessions_id}_zh-Hans.pdf" # Download test report

3. API Request Methods

class RquestApi():
    def __init__(self):
        super(RquestApi, self).__init__()
        self._headers = {"Content-Type": "application/json"}
        self._token = os.environ.get(EnvPath.token)
        self._host_ip = SimOneUrl
        self.get = "GET"
        self.post = "POST"
        self.delete = "DELETE"
        self.put = "PUT"

    def send(self, method: str, url: str, **kwargs) -> Response:
        """
        Send request
        method: Request method
        url: Request URL
        kwargs: Request Parameters
        """
        self.headers.update({"Authorization": self.token})
        complete_url = urljoin(self._host_ip, url)
        data = dict()
        data['method'] = method
        data['url'] = complete_url
        data['headers'] = self.headers
        data.update(kwargs)
        print(data)
        response = request(verify=False, **data)
        try:
            print("response:%s" % str(response.content.decode("utf-8")))
            self._status_code = response.status_code
            self._response_code = response.json().get("code")
        except:
            pass
        return response

    @property
    def token(self):
        return self._token

    @property
    def headers(self):
        return self._headers

    @headers.setter
    def headers(self, value):
        self._headers = value