Exemple #1
0
    def test_SKTE_T3600_container_dev_task(self):
        # 因环境问题创建任务时报错,不能继续调试

        # 获取image的uuid
        image_id = send_image_m_req.get_image_uuid_by_image_name(
            self.token, config.container_dev_tf114_py36_cpu_image)
        # 创建项目
        project_id = send_project_m_req.create_project(
            self.token, project_name='project for SKTE_T3600')
        # 创建任务
        task_uuid = send_project_m_req.create_project_task(
            self.token,
            task_name='container dev task',
            project_id=project_id,
            task_type='CONTAINER_DEV',
            image_id=image_id,
            resource_config=None)
        logger.log_debug('new task id is {}'.format(task_uuid))
        # 启动任务
        started_task_uuid = send_project_m_req.start_project_task(
            self.token, task_uuid)
        assert False if task_uuid != started_task_uuid else True
        # 查询任务状态
        start_status = send_project_m_req.get_project_task_status_by_uuid(
            self.token, task_uuid)
        logger.log_debug(
            'task status after starting is {}'.format(start_status))
def query_pod_ids_by_task_id(task_uuid):

    pod_ids = query_from_mongodb(db_name='project-manager', collection_name='tasks',
                                 query_conditions={'1_id': task_uuid}, columns={'pods': 1, '_id': 0})
    if len(pod_ids) != 0:
        return pod_ids
    else:
        logger.log_debug('Got empty result.')
        return False
def clean_all():
    return True
    # import datetime
    # print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    logger.log_debug('Start to clean ENV')
    clean_volumes_from_disk()
    clean_db()
    clean_pod_service()
    logger.log_debug('Finished clean ENV')
def get_uuid_by_username(token, username):
    req = api_compose.get_compose_user_list_req(token=token, username=username)
    res = send_req.send_request(req)
    if res['total'] == 0:
        logger.log_debug("Can not find user {}".format(username))
    else:
        for user in res['users']:
            if user['username'] == username:
                return user['uuid']

    return ''
Exemple #5
0
def extract_image_uuid_from_image_list(image_list_content: dict, image_name):
    """
    根据image_name从image list的内容中提取uuid
    :param image_list_content: dict
    :param image_name: str
    :return:
    """
    for image_info in image_list_content['data']:
        if image_info['name'] == image_name:
            return image_info['uuid']
    logger.log_debug(
        'Did not find image uuid of image "{}"'.format(image_name))
def get_user_role_list(token):
    """
    获取所有角色列表
    :param token:
    :return:
    """
    req = api_user_m.get_query_user_roles_req(token=token)
    res = send_req.send_request(req)
    if res['total'] == 0:
        logger.log_debug("Notice, the user role list is Empty!")
        return None
    else:
        return res['roles']
def get_user_group_list(token):
    """
    查询所有用户组
    :param token:
    :return:
    """
    req = api_user_m.get_user_group_list_req(token)
    res = send_req.send_request(req)
    if res['total'] == 0:
        logger.log_debug("Notice, the user group list is Empty!")
        return None
    else:
        return res['groups']
def check_pod_status(pod_ids, expected_status='Running', timeout=30):
    """
    根据pod id检查pod的状态 (此方法暂时不使用)
    :param pod_ids: str或list
    :param expected_status:
    :param timeout: 检查的次数,每隔一秒检查一次(kubectl命令需要时间,因此总时间大于timeout*1秒),如果所有pod达到期望状态,则提前返回
    :return: bool
    """

    if not isinstance(pod_ids, (list, str)):
        logger.log_error('The pod_id type is wrong, expect list or string, but got {}'.format(type(pod_ids)))
        return False
    if isinstance(pod_ids, str):
        pod_ids = list(pod_ids)

    match_status_pod_list = []
    host = config.ssh_conn_info['host']
    port = config.ssh_conn_info['port']
    user = config.ssh_conn_info['user']
    passwd = config.ssh_conn_info['passwd']
    conn = SSHConnection(host, port, user, passwd)
    command = "kubectl get pod {} -n skydiscovery-app|awk '{print $3}'|grep -v STATUS"

    while timeout > 0:
        timeout = timeout - 1
        for pod_id in pod_ids:
            pod_status = conn.exec_command(command.format(pod_id))

            if pod_status == expected_status:
                logger.log_debug("Pod {}'s status is {}, = {}.".format(pod_id, pod_status, expected_status))
                if pod_id not in match_status_pod_list:
                    match_status_pod_list.append(pod_id)
            else:
                logger.log_debug("Pod {}'s status is {}, != {}.".format(pod_id, pod_status, expected_status))
                if pod_id in match_status_pod_list:
                    match_status_pod_list.remove(pod_id)

        if len(match_status_pod_list) == len(pod_ids):
            logger.log_debug('The pod(s) status match to the expectation.')
            conn.close()
            return True
        time.sleep(1)

    logger.log_error('The pod(s) status do not match to the expectation.')
    conn.close()
    return False
Exemple #9
0
 def test_SKTE_T2624_create_start_stop_delete_task_(self):
     #
     # 获取image的uuid
     image_id = send_image_m_req.get_image_uuid_by_image_name(
         self.token, config.jupyter_image_name)
     # 创建项目
     project_id = send_project_m_req.create_project(
         self.token, project_name='auto test project 4 task')
     # 创建任务
     task_uuid = send_project_m_req.create_project_task(
         self.token,
         task_name='automation task',
         project_id=project_id,
         task_type='JUPYTER',
         image_id=image_id,
         resource_config=None)
     logger.log_debug('new task id is {}'.format(task_uuid))
     # 启动任务
     started_task_uuid = send_project_m_req.start_project_task(
         self.token, task_uuid)
     assert False if task_uuid != started_task_uuid else True
     # 查询任务状态
     start_status = send_project_m_req.get_project_task_status_by_uuid(
         self.token, task_uuid)
     logger.log_debug(
         'task status after starting is {}'.format(start_status))
     # 停止任务
     send_project_m_req.stop_project_task(self.token, task_uuid)
     # 查询任务状态
     stop_status = send_project_m_req.get_project_task_status_by_uuid(
         self.token, task_uuid)
     logger.log_debug(
         'task status after stopping is {}'.format(stop_status))
     # 删除任务
     send_project_m_req.delete_project_task_by_uuid(self.token, task_uuid)
     # 删除项目
     send_project_m_req.delete_project_by_uuid(self.token, project_id)
 def teardown(self):
     logger.log_debug('@@@@@@@@@@@@@@ Case Finished @@@@@@@@@@@@@@')
    def setup(self):

        # clean_all() # 会删除其它用户的数据,非自动化测试环境勿打开

        logger.log_debug('')
        logger.log_debug('########### New Case Started ###########')
def send_request(request_data: ApiTemplate, result_code='200'):
    """
    将request_data的内容组成http请求并发送,检查result code并返回response body。
    :param request_data: 接口请求内容,包括请求方法、请求URL、URL参数、请求头、请求体
    :param result_code: 期望的response code
    :return: http response
    """

    if len(request_data.url) == 0 or len(request_data.method) == 0:
        logger.log_error("request_data's url or/and method is not presented.")
        return False
    else:
        # 拼接HTTP请求
        url = request_data.url+'?' if len(request_data.param) > 0 else request_data.url
        for i, j in request_data.param.items():
            if url.endswith('?'):
                url = '{}{}={}'.format(url, i, j)
            else:
                url = '{}&{}={}'.format(url, i, j)
        method = request_data.method.upper()
        headers = request_data.headers
        data = request_data.body
        files = request_data.files

        # 发送请求
        if method == 'POST':
            if len(request_data.files) == 0:
                result = requests.post(url=url, headers=headers, json=data)
            else:
                result = requests.post(url=url, headers=headers, data=data, files=files)
        elif method == 'GET':
            result = requests.get(url=url, headers=headers)
        elif method == 'DELETE':
            result = requests.delete(url=url, headers=headers)
        elif method == 'PATCH':
            result = requests.patch(url=url, headers=headers, json=data)
        elif method == 'OPTIONS':
            result = requests.options(url=url, headers=headers)
        elif method == 'HEAD':
            result = requests.head(url=url, headers=headers)
        else:
            logger.log_error("The HTTP method of {} in request_data is not supported!".format(request_data.url))
            return False

        logger.log_debug("url: {}".format(url))
        logger.log_debug("method: {}".format(method))
        logger.log_debug("headers: {}".format(headers))
        logger.log_debug("data: {}".format(data))
        logger.log_debug(">>>>>>>> The HTTP request is sent.")
        # 部分请求返回结果不是json格式,如下载文件,返回为文件内容
        if result.text.startswith("{"):
            # 部分请求如DELETE成功执行后result.content为空
            if len(result.content) != 0:
                content = json.loads(str(result.content, 'utf-8'))
            else:
                content = ''
        else:
            content = result.text
        logger.log_debug("status code: {}".format(result.status_code))
        logger.log_debug("headers: {}".format(result.headers))
        logger.log_debug("body: {}".format(content))
        logger.log_debug("<<<<<<<< Got HTTP response.")

        # 检查return code
        if str(result.status_code) != result_code:
            logger.log_error("The result code of response is {}, not the expected value: {}".format(result.status_code,
                                                                                                    result_code))
            assert False

        return content
    def not_test_coupon(self):
        r = api_user_m.get_user_login_req()
        res = requests.get(r.url, headers=self.headers)

        logger.log_debug(str(res.content))
        assert True