예제 #1
0
파일: app.py 프로젝트: leshibily/iris2
    def pytest_runtest_teardown(self, item):
        BaseTarget.pytest_runtest_teardown(self, item)

        try:
            if not OSHelper.is_windows():
                if item.funcargs['firefox'].runner and item.funcargs[
                        'firefox'].runner.process_handler:
                    quit_firefox()
                    status = item.funcargs[
                        'firefox'].runner.process_handler.wait(10)
                    if status is None:
                        item.funcargs['firefox'].browser.runner.stop()
            else:
                item.funcargs['firefox'].stop()
            if not target_args.save:
                profile_instance = item.funcargs['firefox'].profile
                if os.path.exists(profile_instance.profile):
                    try:
                        shutil.rmtree(profile_instance.profile)
                    except OSError as e:
                        logger.error('Error: %s - %s.' %
                                     (e.filename, e.strerror))
                else:
                    logger.error('Invalid Path: %s' % profile_instance.profile)
        except (AttributeError, KeyError):
            pass
예제 #2
0
    def pytest_sessionstart(self, session):
        global core_args
        core_args = get_core_args()
        global target_args
        BaseTarget.pytest_sessionstart(self, session)
        self.validate_config()
        try:
            port = core_args.port

            logger.info('Starting local web server on port %s for directory %s' % (port, self.local_web_root))
            web_server_process = Process(target=LocalWebServer, args=(self.local_web_root, port,))
            self.process_list.append(web_server_process)
            web_server_process.start()

            fx = self.args.firefox
            locale = core_args.locale
            app = FX_Collection.get(fx, locale)

            if not app:
                FX_Collection.add(fx, locale)
                app = FX_Collection.get(fx, locale)
            self.values = {'fx_version': app.version, 'fx_build_id': app.build_id, 'channel': app.channel}
        except IOError:
            logger.critical('Unable to launch local web server, aborting Iris.')
            exit(1)
        logger.info('Loading more test images...')
예제 #3
0
    def pytest_runtest_setup(self, item):
        BaseTarget.pytest_runtest_setup(self, item)

        if OSHelper.is_mac():
            mouse_reset()
        if item.name == 'run' and not core_args.override:
            skip_reason_list = []
            values = item.own_markers[0].kwargs
            is_disabled = 'enabled' in values and not values.get('enabled') and not core_args.override
            is_excluded = 'exclude' in values and OSHelper.get_os() in values.get('exclude')
            incorrect_locale = 'locale' in values and core_args.locale not in values.get('locale')
            incorrect_platform = 'platform' in values and OSHelper.get_os() not in values.get('platform')
            fx_version = self.values.get('fx_version')
            incorrect_fx_version = 'fx_version' in values and not check_version(fx_version, values.get('fx_version'))

            if is_disabled:
                skip_reason_list.append('Test is disabled')

            if is_excluded:
                skip_reason_list.append('Test is excluded for {}'.format(OSHelper.get_os()))

            if 'blocked_by' in values:
                bug_id = ''
                platform = OSHelper.get_os()
                if type(values.get('blocked_by')) is str:
                    bug_id = values.get('blocked_by')
                elif type(values.get('blocked_by')) is dict:
                    try:
                        bug_id = values.get('blocked_by')['id']
                        platform = values.get('blocked_by')['platform']
                    except KeyError as e:
                        logger.debug('Missing key in blocked_by field: %s' % e)
                logger.debug('Looking up bug #%s...' % bug_id)
                blocked_platform = OSHelper.get_os() in platform
                logger.debug('Test has blocking issue: %s' % is_blocked(bug_id))
                logger.debug('Test is blocked on this platform: %s' % blocked_platform)
                if is_blocked(bug_id) and blocked_platform:
                    skip_reason_list.append('Test is blocked by [{}] on this platform.'.format(bug_id))

            if incorrect_locale:
                skip_reason_list.append('Test doesn\'t support locale [{}]'.format(core_args.locale))

            if incorrect_platform:
                skip_reason_list.append('Test doesn\'t support platform [{}]'.format(OSHelper.get_os()))

            if incorrect_fx_version:
                skip_reason_list.append('Test doesn\'t support Firefox version [{}]'.format(fx_version))

            if len(skip_reason_list) > 0:
                logger.info(
                    'Test skipped: - [{}]: {} Reason(s): {}'.format(item.nodeid.split(':')[0],
                                                                    values.get('description'),
                                                                    ', '.join(skip_reason_list)))
                test_instance = (item, 'SKIPPED', None)

                test_result = create_result_object(test_instance, 0, 0)
                self.completed_tests.append(test_result)
                pytest.skip(item)
예제 #4
0
파일: app.py 프로젝트: leshibily/iris2
    def pytest_runtest_setup(self, item):
        BaseTarget.pytest_runtest_setup(self, item)

        if OSHelper.is_mac():
            mouse_reset()
        if item.name == 'test_run':
            skip_reason_list = []
            values = item.own_markers[0].kwargs
            is_disabled = 'enabled' in values and not values.get(
                'enabled') and not core_args.override
            is_excluded = 'exclude' in values and OSHelper.get_os(
            ) in values.get('exclude')
            incorrect_locale = 'locale' in values and core_args.locale not in values.get(
                'locale')
            incorrect_platform = 'platform' in values and OSHelper.get_os(
            ) not in values.get('platform')
            fx_version = self.values.get('fx_version')
            incorrect_fx_version = 'fx_version' in values and not check_version(
                fx_version, values.get('fx_version'))

            if is_disabled:
                skip_reason_list.append('Test is disabled')

            if is_excluded:
                skip_reason_list.append('Test is excluded for {}'.format(
                    OSHelper.get_os()))

            if 'blocked_by' in values:
                bug_id = values.get('blocked_by')
                if is_blocked(bug_id):
                    skip_reason_list.append(
                        'Test is blocked by [{}]'.format(bug_id))

            if incorrect_locale:
                skip_reason_list.append(
                    'Test doesn\'t support locale [{}]'.format(
                        core_args.locale))

            if incorrect_platform:
                skip_reason_list.append(
                    'Test doesn\'t support platform [{}]'.format(
                        OSHelper.get_os()))

            if incorrect_fx_version:
                skip_reason_list.append(
                    'Test doesn\'t support Firefox version [{}]'.format(
                        fx_version))

            if len(skip_reason_list) > 0:
                logger.info('Test skipped: - [{}]: {} Reason(s): {}'.format(
                    item.nodeid.split(':')[0], values.get('description'),
                    ', '.join(skip_reason_list)))
                test_instance = (item, 'SKIPPED', None)

                test_result = create_result_object(test_instance, 0, 0)
                self.completed_tests.append(test_result)
                pytest.skip(item)
예제 #5
0
파일: app.py 프로젝트: leshibily/iris2
 def pytest_sessionfinish(self, session):
     BaseTarget.pytest_sessionfinish(self, session)
     for process in self.process_list:
         logger.info('Terminating process.')
         process.terminate()
         process.join()
     logger.debug('Finishing Firefox session')
     if core_args.report:
         report_test_results(self)
예제 #6
0
파일: app.py 프로젝트: leshibily/iris2
 def __init__(self):
     BaseTarget.__init__(self)
     global target_args
     target_args = self.get_target_args()
     self.target_name = 'Firefox'
     self.process_list = []
     self.cc_settings = [{
         'name':
         'firefox',
         'type':
         'list',
         'label':
         'Firefox',
         'value':
         ['local', 'latest', 'latest-esr', 'latest-beta', 'nightly'],
         'default':
         'beta'
     }, {
         'name': 'locale',
         'type': 'list',
         'label': 'Locale',
         'value': OSHelper.LOCALES,
         'default': 'en-US'
     }, {
         'name': 'mouse',
         'type': 'list',
         'label': 'Mouse speed',
         'value': ['0.0', '0.5', '1.0', '2.0'],
         'default': '0.5'
     }, {
         'name': 'highlight',
         'type': 'checkbox',
         'label': 'Debug using highlighting'
     }, {
         'name': 'override',
         'type': 'checkbox',
         'label': 'Run disabled tests'
     }, {
         'name': 'email',
         'type': 'checkbox',
         'label': 'Email results'
     }, {
         'name': 'report',
         'type': 'checkbox',
         'label': 'Create TestRail report'
     }]
     self.local_web_root = os.path.join(PathManager.get_module_dir(),
                                        'targets', 'firefox', 'local_web')