Пример #1
0
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
Пример #2
0
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
Пример #3
0
    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
Пример #4
0
 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)
Пример #5
0
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
Пример #6
0
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')
Пример #7
0
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)