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 ''
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
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