def auto_setup(basedir=None, devices=None, logdir=None, project_root=None): """ Auto setup running env and try connect android device if not device connected. :param basedir: basedir of script, __file__ is also acceptable. :param devices: connect_device uri in list. :param logdir: log dir for script report, default is None for no log, set to `True` for <basedir>/log. :param project_root: project root dir for `using` api. """ if basedir: if os.path.isfile(basedir): basedir = os.path.dirname(basedir) if basedir not in G.BASEDIR: G.BASEDIR.append(basedir) if devices: for dev in devices: connect_device(dev) if logdir: logdir = script_log_dir(basedir, logdir) G.LOGGING.debug('logdir: %s' % logdir) set_logdir(logdir) if project_root: ST.PROJECT_ROOT = project_root
def auto_setup(basedir=None, devices=None, logdir=None, project_root=None, compress=None): """ Auto setup running env and try connect android device if not device connected. :param basedir: basedir of script, __file__ is also acceptable. :param devices: connect_device uri in list. :param logdir: log dir for script report, default is None for no log, set to ``True`` for ``<basedir>/log``. :param project_root: project root dir for `using` api. :param compress: The compression rate of the screenshot image, integer in range [1, 99], default is 10 :Example: >>> auto_setup(__file__) >>> auto_setup(__file__, devices=["Android://127.0.0.1:5037/SJE5T17B17"], ... logdir=True, project_root=r"D:\\test\\logs", compress=90) """ if basedir: if os.path.isfile(basedir): basedir = os.path.dirname(basedir) if basedir not in G.BASEDIR: G.BASEDIR.append(basedir) if devices: for dev in devices: connect_device(dev) if logdir: logdir = script_log_dir(basedir, logdir) set_logdir(logdir) if project_root: ST.PROJECT_ROOT = project_root if compress: ST.SNAPSHOT_QUALITY = compress
def test_set_logdir(self): new_logfile = "log123.txt" new_logdir = DIR("./logs_new") self.delete_path([new_logdir, new_logfile]) # set logfile = ./logs_new/log123.txt ST.LOG_FILE = new_logfile set_logdir(new_logdir) argv = ["run", OWL, "--device", "Android:///"] main_parser(argv) G.LOGGER.set_logfile(None) self.assertTrue(os.path.exists(os.path.join(ST.LOG_DIR, ST.LOG_FILE))) rpt = LogToHtml(OWL) rpt.report() self.assertTrue(os.path.exists(self.OUTPUT_HTML)) # test export log self.delete_path([self.EXPORT_DIR]) rpt_export = LogToHtml(OWL, export_dir=self.EXPORT_DIR) rpt_export.report() export_path = os.path.join(self.EXPORT_DIR, self.SCRIPT_NAME + ".log") self.assertTrue( os.path.exists(os.path.join(export_path, self.OUTPUT_HTML))) self.assertTrue(os.path.exists(os.path.join(export_path, "static"))) self.delete_path([new_logdir, new_logfile]) ST.LOG_FILE = DEFAULT_LOG_FILE ST.LOG_DIR = DEFAULT_LOG_DIR
def __init__(self): """ init初始化 """ # 清理旧日志 clear_log(AIRTEST_LOG) # 设置日志目录 set_logdir(AIRTEST_LOG) # 初始化日志 init_logging() # 等待显示时间 self.timeout = ST.FIND_TIMEOUT # airtest-api self.api = api self.poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) self.UIObj = UIObjectProxy(poco=self.poco)
def auto_setup(basedir=None, devices=None, logdir=None, project_root=None): """ Auto setup running env and try connect android device if not device connected. """ if devices: for dev in devices: connect_device(dev) elif not G.DEVICE_LIST: try: connect_device("Android:///") except IndexError: pass if basedir: if os.path.isfile(basedir): basedir = os.path.dirname(basedir) if basedir not in G.BASEDIR: G.BASEDIR.append(basedir) if logdir: set_logdir(logdir) if project_root: ST.PROJECT_ROOT = project_root
def tests_runner(main_script, file_config): # читаем конфиг из config-файла package, data_config = read_data_from_config(file_config) gl_report = [] # на сколько я понял это каждый раз открывает новое соединение ''' # подключаемся к девайсу if run_on_emulator: # для эмулятора init_device(platform='Android', cap_method='JAVACAP', ori_method='ADBORI') else: # для девайса init_device(platform='Android') log('Init Device') ''' init_device(platform='Android') dev = device() poco = UnityPoco() # вроде всё готово для тестов: t0 = time.time(); out('Cases::tests_runner()... started') # выставляем значения по умолчанию потому что предыдущего теста не было last_test_stop_app = False need_wake = True # for line in data_csv: for line in data_config: # из config-файла test_id, f_wake, f_stop_before, f_clear_app, f_push_saves, \ f_start_app, f_stop_after = parse_line_from_config(line) if need_wake: f_wake = True need_wake = False if last_test_stop_app: f_stop_before = True f_start_app = True last_test_stop_app = False # создаём логирование log_path = 'report(' + test_id + ')' set_logdir(log_path) # пробуждаем устройство if f_wake: wake() # останавливаем приложение if f_stop_before: stop_app(package); time.sleep(1) # отчистить даные приложения if f_clear_app: clear_app(package) # подсовываем сэйвы if f_push_saves != '': push_my_saves(f_push_saves, package) # стартуем приложение if f_start_app: start_app(package) time.sleep(10) poco = UnityPoco() # запускаем тест tt0 = time.time(); result, runned = test_runner(dev, poco, test_id) dtt = time.time() - tt0 print('test: ' + test_id + '; ' + \ 'runned: ' + str(runned) + '; ' + \ 'result: ' + str(result) + '; ' + \ 'time(sec): ' + str(int(dtt))) print('-----------------------') if not result: last_test_stop_app = True f_stop_after = True gl_report.append([test_id, runned, result, dtt]) # останавливаем приложение if f_stop_after: last_test_stop_app = True stop_app(package) # далее обязательная секция чтобы сгенерить отчёт report_path = get_log_path(main_script, log_path) print(report_path) simple_report(main_script, report_path, output='report(' + test_id + ').html') t1 = time.time() out('Cases::tests_runner()... complete (' + str(t1 - t0) + ' sec)') # заключительный репорт gl_report log_path = 'report' set_logdir(log_path) for gl_data in gl_report: txt = gl_data[0] + ' ' prop = '' if not gl_data[1]: prop += 'тест не найден' else: txt += '(' + str(int(gl_data[3])) + ' sec)' if not gl_data[2]: prop += 'тест не пройден' out(txt, prop) # далее обязательная секция чтобы сгенерить отчёт report_path = get_log_path(main_script, log_path) print(report_path) simple_report(main_script, report_path, output='global_report.html')
def poco(request, driver_class): # connect_device() from poco.drivers.android.uiautomation import AndroidUiautomationPoco case_name = request.node._nodeid airtestlog = request.config.getoption("airtestlog") if airtestlog: split_path = request.module.__file__.split(PROJ_NAME) log_parentdir = split_path[0] + PROJ_NAME + '\\' + GL.REPORT_DIR if not os.path.exists(log_parentdir): os.mkdir(log_parentdir) jkbuildid = request.config.getoption("--jkbuildid") jkjobname = request.config.getoption("--jkjobname") if jkbuildid != -1 and jkjobname: logdir = os.path.join(log_parentdir, jkjobname) if not os.path.exists(logdir): os.mkdir(logdir) logdir = os.path.join(logdir, jkbuildid) if not os.path.exists(logdir): os.mkdir(logdir) else: logdir = log_parentdir #log_subdir = request.module.__name__+' '+request.function.__name__ logdir = os.path.join(logdir, request.module.__name__) if not os.path.exists(logdir): os.mkdir(logdir) logdir = os.path.join(logdir, request.function.__name__) if not os.path.exists(logdir): os.mkdir(logdir) print(' logdir: ', logdir) #request.logdir=logdir G.LOGGING.debug('logdir: %s' % logdir) set_logdir(logdir) airtesthtml = request.config.getoption("airtesthtml") if airtesthtml and airtestlog: from airtest.report.report import custom_report from airttest_settings import jk_server, static_server case_info = {"name": case_name, "desc": request.node.function.__doc__} if jkbuildid != -1 and jkjobname: #'http://xx.xx.x.x:8080/jenkins/job/JOBNAME/ws/report/JOBNAME/' print('jk jk_server: ', jk_server) #jk_logdir=logdir.split(PROJ_NAME)[1] #print('jk log dir: ',jk_logdir) #online_report=jk_server+'/job/'+jkjobname+'ws'+jk_logdir.replace('\\','/')+'/' online_path = jk_server + '/job/' + jkjobname + '/ws/' static_root = jk_server + '/job/' + jkjobname + '/ws/files/statics/' else: online_path = None static_root = None startapp = request.config.getoption("startapp") print('startapp: ', startapp) print('type(startapp): ', type(startapp)) if startapp == True or startapp == 'True': clear_app(APP_PACKAGE) print('conftest: start app') start_app(APP_PACKAGE) poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=True) yield poco #yield driver_class def dr_finalizer(): stopapp = request.config.getoption("stopapp") if stopapp == True or stopapp == 'True': stop_app(APP_PACKAGE) clear_app(APP_PACKAGE) print() print('conftest: stop app') if airtesthtml and airtestlog: custom_report(case_info, logdir, online_path=online_path, proj_name=PROJ_NAME, static_root=static_root) request.addfinalizer(dr_finalizer)