176e6818aSopenharmony_ci#!/usr/bin/env python3 276e6818aSopenharmony_ci# coding=utf-8 376e6818aSopenharmony_ci 476e6818aSopenharmony_ci# 576e6818aSopenharmony_ci# Copyright (c) 2022 Huawei Device Co., Ltd. 676e6818aSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 776e6818aSopenharmony_ci# you may not use this file except in compliance with the License. 876e6818aSopenharmony_ci# You may obtain a copy of the License at 976e6818aSopenharmony_ci# 1076e6818aSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 1176e6818aSopenharmony_ci# 1276e6818aSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 1376e6818aSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 1476e6818aSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1576e6818aSopenharmony_ci# See the License for the specific language governing permissions and 1676e6818aSopenharmony_ci# limitations under the License. 1776e6818aSopenharmony_ci# 1876e6818aSopenharmony_ci 1976e6818aSopenharmony_ci 2076e6818aSopenharmony_cifrom datetime import datetime 2176e6818aSopenharmony_cifrom inspect import stack 2276e6818aSopenharmony_ciimport json 2376e6818aSopenharmony_ciimport os 2476e6818aSopenharmony_ciimport time 2576e6818aSopenharmony_cifrom xdevice import get_cst_time 2676e6818aSopenharmony_ci 2776e6818aSopenharmony_ci 2876e6818aSopenharmony_ciclass TS(): 2976e6818aSopenharmony_ci ''' 3076e6818aSopenharmony_ci performace test class 3176e6818aSopenharmony_ci ''' 3276e6818aSopenharmony_ci inner_stack = stack() 3376e6818aSopenharmony_ci total = 0 3476e6818aSopenharmony_ci times = 0 3576e6818aSopenharmony_ci 3676e6818aSopenharmony_ci @staticmethod 3776e6818aSopenharmony_ci def start(): 3876e6818aSopenharmony_ci try: 3976e6818aSopenharmony_ci TS.inner_stack.append(time.time()) 4076e6818aSopenharmony_ci except Exception: 4176e6818aSopenharmony_ci from devicetest.log.logger import DeviceTestLog as log 4276e6818aSopenharmony_ci log.error("start TS exception.", is_traceback=True) 4376e6818aSopenharmony_ci 4476e6818aSopenharmony_ci @staticmethod 4576e6818aSopenharmony_ci def average(prefix=''): 4676e6818aSopenharmony_ci if TS.times == 0: 4776e6818aSopenharmony_ci TS.times = 1 4876e6818aSopenharmony_ci return ("%s ==> average: %.3f ms" % (prefix, TS.total / TS.times)) 4976e6818aSopenharmony_ci 5076e6818aSopenharmony_ci @staticmethod 5176e6818aSopenharmony_ci def stop(prefix=''): 5276e6818aSopenharmony_ci try: 5376e6818aSopenharmony_ci if len(TS.inner_stack) > 0: 5476e6818aSopenharmony_ci cur_time = (time.time() - TS.inner_stack.pop()) * 1000 5576e6818aSopenharmony_ci TS.total += cur_time 5676e6818aSopenharmony_ci TS.times += 1 5776e6818aSopenharmony_ci return cur_time 5876e6818aSopenharmony_ci return None 5976e6818aSopenharmony_ci except Exception: 6076e6818aSopenharmony_ci from devicetest.log.logger import DeviceTestLog as log 6176e6818aSopenharmony_ci log.error("stop TS exception.", is_traceback=True) 6276e6818aSopenharmony_ci return None 6376e6818aSopenharmony_ci 6476e6818aSopenharmony_ci 6576e6818aSopenharmony_ciclass TimeHandler: 6676e6818aSopenharmony_ci 6776e6818aSopenharmony_ci @classmethod 6876e6818aSopenharmony_ci def get_formated_datetime(cls, time_value=None): 6976e6818aSopenharmony_ci """ 7076e6818aSopenharmony_ci get formated datetime that only contains year month day hour minute 7176e6818aSopenharmony_ci and second information 7276e6818aSopenharmony_ci 7376e6818aSopenharmony_ci Obtains the datetime object, which contains only the year, month, 7476e6818aSopenharmony_ci day, hour, minute, and second information. 7576e6818aSopenharmony_ci Args: 7676e6818aSopenharmony_ci time_value: Time to be processed. If the time does not exist, 7776e6818aSopenharmony_ci the current time is used. 7876e6818aSopenharmony_ci Returns: 7976e6818aSopenharmony_ci Datetime object that has been processed. The object can be 8076e6818aSopenharmony_ci converted to a character string, The value is in the format of 8176e6818aSopenharmony_ci 2011-12-15 16:08:35. 8276e6818aSopenharmony_ci """ 8376e6818aSopenharmony_ci if time_value is None: 8476e6818aSopenharmony_ci time_value = time.time() 8576e6818aSopenharmony_ci return datetime(*(time.localtime(time_value)[:6])) 8676e6818aSopenharmony_ci 8776e6818aSopenharmony_ci @classmethod 8876e6818aSopenharmony_ci def get_formated_datetime_name(cls, time_val=None): 8976e6818aSopenharmony_ci """ 9076e6818aSopenharmony_ci get formated datetime used to generate a file that only contains 9176e6818aSopenharmony_ci year month day hour minute and second information 9276e6818aSopenharmony_ci 9376e6818aSopenharmony_ci Obtains the current character string that contains only time 9476e6818aSopenharmony_ci information and underscores. 9576e6818aSopenharmony_ci Args: 9676e6818aSopenharmony_ci time_val: Time to be processed. If the time does not exist, 9776e6818aSopenharmony_ci the current time is used. 9876e6818aSopenharmony_ci Returns: 9976e6818aSopenharmony_ci The value is a character string in the format of 10076e6818aSopenharmony_ci 2011_12_15_16_08_35 10176e6818aSopenharmony_ci """ 10276e6818aSopenharmony_ci result_list = [] 10376e6818aSopenharmony_ci for _str in cls.get_formated_datetime(time_val).timetuple()[:6]: 10476e6818aSopenharmony_ci result_list.append(str("%02d" % _str)) 10576e6818aSopenharmony_ci return "_".join(result_list) 10676e6818aSopenharmony_ci 10776e6818aSopenharmony_ci @classmethod 10876e6818aSopenharmony_ci def convert_formated_name(cls, convert_time, 10976e6818aSopenharmony_ci formate="%Y-%m-%d %H:%M:%S.%f"): 11076e6818aSopenharmony_ci """ 11176e6818aSopenharmony_ci Args: 11276e6818aSopenharmony_ci convert_time: Time value to be processed 11376e6818aSopenharmony_ci Returns: 1460907045 Format 11476e6818aSopenharmony_ci """ 11576e6818aSopenharmony_ci strpt_time = time.strptime(convert_time, formate) 11676e6818aSopenharmony_ci return int(time.mktime(strpt_time)) 11776e6818aSopenharmony_ci 11876e6818aSopenharmony_ci @classmethod 11976e6818aSopenharmony_ci def get_now_datetime(cls, time_format="%Y%m%d%H%M%S%f"): 12076e6818aSopenharmony_ci """ 12176e6818aSopenharmony_ci Args: 12276e6818aSopenharmony_ci time_format: Obtain the time format, for example, 12376e6818aSopenharmony_ci f="%Y-%m-%d %H:%M:%S.%f", 12476e6818aSopenharmony_ci The time in 2017-04-25 11:26:33.293963 format is returned. 12576e6818aSopenharmony_ci Returns: String 12676e6818aSopenharmony_ci """ 12776e6818aSopenharmony_ci return get_cst_time().strftime(time_format) 12876e6818aSopenharmony_ci 12976e6818aSopenharmony_ci @classmethod 13076e6818aSopenharmony_ci def get_timeout_value(cls): 13176e6818aSopenharmony_ci project_path = \ 13276e6818aSopenharmony_ci os.path.dirname(os.path.dirname(os.path.dirname(__file__))) 13376e6818aSopenharmony_ci config = os.path.join(project_path, "project.config") 13476e6818aSopenharmony_ci with open(config, 'r', encoding='utf-8') as f_time: 13576e6818aSopenharmony_ci conf = json.load(f_time) 13676e6818aSopenharmony_ci get_case_time = conf.get("caseTimeOut", 60 * 60 * 1) 13776e6818aSopenharmony_ci return get_case_time 13876e6818aSopenharmony_ci 13976e6818aSopenharmony_ci @classmethod 14076e6818aSopenharmony_ci def get_formated_time(cls, time_format='%Y-%m-%d %H:%M:%S'): 14176e6818aSopenharmony_ci """ 14276e6818aSopenharmony_ci get current time, for example: 2020-08-04 15:48:04 14376e6818aSopenharmony_ci :param time_format: time format 14476e6818aSopenharmony_ci :return: current time 14576e6818aSopenharmony_ci """ 14676e6818aSopenharmony_ci return get_cst_time().strftime(time_format) 14776e6818aSopenharmony_ci 14876e6818aSopenharmony_ci @classmethod 14976e6818aSopenharmony_ci def get_interval_timestamp(cls, start_format_time, end_format_time, 15076e6818aSopenharmony_ci time_format='%Y-%m-%d %H:%M:%S'): 15176e6818aSopenharmony_ci try: 15276e6818aSopenharmony_ci start_timestamp = datetime.strptime( 15376e6818aSopenharmony_ci start_format_time, time_format).timestamp() 15476e6818aSopenharmony_ci end_timestamp = datetime.strptime( 15576e6818aSopenharmony_ci end_format_time, time_format).timestamp() 15676e6818aSopenharmony_ci interval_timestamp = round(end_timestamp - start_timestamp, 3) 15776e6818aSopenharmony_ci return interval_timestamp 15876e6818aSopenharmony_ci except Exception: 15976e6818aSopenharmony_ci return 0.00 16076e6818aSopenharmony_ci 16176e6818aSopenharmony_ci @staticmethod 16276e6818aSopenharmony_ci def get_current_epoch_time(): 16376e6818aSopenharmony_ci """Current epoch time in milliseconds. 16476e6818aSopenharmony_ci Returns: 16576e6818aSopenharmony_ci An integer representing the current epoch time in milliseconds. 16676e6818aSopenharmony_ci """ 16776e6818aSopenharmony_ci return int(round(time.time() * 1000)) 16876e6818aSopenharmony_ci 16976e6818aSopenharmony_ci @staticmethod 17076e6818aSopenharmony_ci def get_current_human_time(): 17176e6818aSopenharmony_ci """Returns the current time in human readable format. 17276e6818aSopenharmony_ci Returns: 17376e6818aSopenharmony_ci The current time stamp in Month-Day-Year Hour:Min:Sec format. 17476e6818aSopenharmony_ci """ 17576e6818aSopenharmony_ci return time.strftime("%m-%d-%Y %H:%M:%S ")