Пример #1
0
def run_command(project='',
                test_query='',
                browsers=None,
                processes=1,
                environments=None,
                interactive=False,
                timestamp=None,
                reports=None,
                report_folder=None,
                report_name=None,
                tags=None):
    execution_runner = ExecutionRunner(browsers, processes, environments,
                                       interactive, timestamp, reports,
                                       report_folder, report_name, tags)
    if project:
        if utils.project_exists(project):
            execution_runner.project = project
            session.settings = settings_manager.get_project_settings(project)
            # add --interactive value to settings to make
            # it available from inside a test
            session.settings['interactive'] = interactive
            if test_query:
                if suite_module.suite_exists(project, test_query):
                    execution_runner.run_suite(test_query)
                elif test_case.test_case_exists(project, test_query):
                    execution_runner.run_test(test_query)
                else:
                    if test_query == '.':
                        test_query = ''
                    path = os.path.join(session.testdir, 'projects', project,
                                        'tests', test_query)
                    if os.path.isdir(path):
                        execution_runner.run_directory(test_query)
                    else:
                        msg = ('golem run: error: the value {} does not match '
                               'an existing test, suite or directory'.format(
                                   test_query))
                        sys.exit(msg)
            else:
                print(messages.RUN_USAGE_MSG)
                test_cases = utils.get_test_cases(project)
                print('Test Cases:')
                utils.display_tree_structure_command_line(
                    test_cases['sub_elements'])
                test_suites = utils.get_suites(project)
                print('\nTest Suites:')
                # TODO print suites in structure
                for suite in test_suites['sub_elements']:
                    print('  ' + suite['name'])
        else:
            msg = ('golem run: error: the project {} does not exist'.format(
                project))
            sys.exit(msg)
    elif interactive:
        interactive_module.interactive(session.settings, browsers)
    else:
        print(messages.RUN_USAGE_MSG)
        print('Projects:')
        for project in utils.get_projects():
            print('  {}'.format(project))
Пример #2
0
def suite_view(project, suite):
    if not user.has_permissions_to_project(g.user.id, project, root_path,
                                           'gui'):
        return render_template('not_permission.html')

    all_test_cases = utils.get_test_cases(root_path, project)
    selected_tests = suite_module.get_suite_test_cases(root_path, project,
                                                       suite)
    worker_amount = suite_module.get_suite_amount_of_workers(
        root_path, project, suite)
    browsers = suite_module.get_suite_browsers(root_path, project, suite)
    browsers = ', '.join(browsers)
    default_browser = test_execution.settings['default_browser']
    environments = suite_module.get_suite_environments(root_path, project,
                                                       suite)
    environments = ', '.join(environments)

    return render_template('suite.html',
                           project=project,
                           all_test_cases=all_test_cases['sub_elements'],
                           selected_tests=selected_tests,
                           suite=suite,
                           worker_amount=worker_amount,
                           browsers=browsers,
                           default_browser=default_browser,
                           environments=environments)
Пример #3
0
    def test_get_test_cases(self, test_directory_fixture, project_fixture):
        test_case.new_test_case(test_directory_fixture['full_path'],
                                project_fixture['project_name'],
                                ['subdir1', 'subdir2'],
                                'test3')
        test_case.new_test_case(test_directory_fixture['full_path'],
                                project_fixture['project_name'],
                                ['subdir1'],
                                'test2')
        test_case.new_test_case(test_directory_fixture['full_path'],
                                project_fixture['project_name'],
                                [],
                                'test1')
        tests = utils.get_test_cases(test_directory_fixture['full_path'],
                                     project_fixture['project_name'])


        expected_result = {
            'type': 'directory',
            'name': 'tests',
            'dot_path': '.',
            'sub_elements': [
                {
                    'type': 'directory',
                    'name': 'subdir1',
                    'dot_path': 'subdir1',
                    'sub_elements': [
                        {
                            'type': 'directory',
                            'name': 'subdir2',
                            'dot_path': 'subdir1.subdir2',
                            'sub_elements': [
                                {
                                    'type': 'file',
                                    'name': 'test3',
                                    'dot_path': 'subdir1.subdir2.test3',
                                    'sub_elements': []
                                }
                            ]
                        },
                        {
                            'type': 'file',
                            'name': 'test2',
                            'dot_path': 'subdir1.test2', 'sub_elements': []
                        }
                    ]
                },
                {
                    'type': 'file',
                    'name': 'test1',
                    'dot_path': 'test1',
                    'sub_elements': []
                }
            ]
        }

        assert tests == expected_result
Пример #4
0
    def test_get_test_cases(self, testdir_fixture, project_fixture):
        test_case.new_test_case(testdir_fixture['path'],
                                project_fixture['name'],
                                ['subdir1', 'subdir2'],
                                'test3')
        test_case.new_test_case(testdir_fixture['path'],
                                project_fixture['name'],
                                ['subdir1'],
                                'test2')
        test_case.new_test_case(testdir_fixture['path'],
                                project_fixture['name'],
                                [],
                                'test1')
        tests = utils.get_test_cases(testdir_fixture['path'],
                                     project_fixture['name'])


        expected_result = {
            'type': 'directory',
            'name': 'tests',
            'dot_path': '.',
            'sub_elements': [
                {
                    'type': 'directory',
                    'name': 'subdir1',
                    'dot_path': 'subdir1',
                    'sub_elements': [
                        {
                            'type': 'directory',
                            'name': 'subdir2',
                            'dot_path': 'subdir1.subdir2',
                            'sub_elements': [
                                {
                                    'type': 'file',
                                    'name': 'test3',
                                    'dot_path': 'subdir1.subdir2.test3',
                                    'sub_elements': []
                                }
                            ]
                        },
                        {
                            'type': 'file',
                            'name': 'test2',
                            'dot_path': 'subdir1.test2', 'sub_elements': []
                        }
                    ]
                },
                {
                    'type': 'file',
                    'name': 'test1',
                    'dot_path': 'test1',
                    'sub_elements': []
                }
            ]
        }

        assert tests == expected_result
Пример #5
0
 def test_get_test_cases_no_tests(self, project_function):
     _, project = project_function.activate()
     tests = utils.get_test_cases(project)
     expected = {
         'type': 'directory',
         'name': 'tests',
         'dot_path': '.',
         'sub_elements': []
     }
     assert tests == expected
Пример #6
0
 def test_get_test_cases(self, project_class):
     testdir = project_class.testdir
     project = project_class.name
     test_case.new_test_case(testdir, project, ['subdir1', 'subdir2'],
                             'test3')
     test_case.new_test_case(testdir, project, ['subdir1'], 'test2')
     test_case.new_test_case(testdir, project, [], 'test1')
     tests = utils.get_test_cases(testdir, project)
     expected = {
         'type':
         'directory',
         'name':
         'tests',
         'dot_path':
         '.',
         'sub_elements': [{
             'type':
             'directory',
             'name':
             'subdir1',
             'dot_path':
             'subdir1',
             'sub_elements': [{
                 'type':
                 'directory',
                 'name':
                 'subdir2',
                 'dot_path':
                 'subdir1.subdir2',
                 'sub_elements': [{
                     'type': 'file',
                     'name': 'test3',
                     'dot_path': 'subdir1.subdir2.test3',
                     'sub_elements': []
                 }]
             }, {
                 'type': 'file',
                 'name': 'test2',
                 'dot_path': 'subdir1.test2',
                 'sub_elements': []
             }]
         }, {
             'type': 'file',
             'name': 'test1',
             'dot_path': 'test1',
             'sub_elements': []
         }]
     }
     assert tests == expected
Пример #7
0
def suite_view(project, suite):
    if not suite_module.suite_exists(project, suite):
        abort(404, 'The suite {} does not exist'.format(suite))
    all_test_cases = utils.get_test_cases(project)
    selected_tests = suite_module.get_suite_test_cases(project, suite)
    processes = suite_module.get_suite_amount_of_processes(project, suite)
    browsers = suite_module.get_suite_browsers(project, suite)
    default_browser = session.settings['default_browser']
    environments = suite_module.get_suite_environments(project, suite)
    tags = suite_module.get_tags(project, suite)
    return render_template('suite.html', project=project,
                           all_test_cases=all_test_cases['sub_elements'],
                           selected_tests=selected_tests, suite=suite,
                           processes=processes, browsers=browsers,
                           default_browser=default_browser, environments=environments,
                           tags=tags)
Пример #8
0
def project(project):
    if not user.has_permissions_to_project(g.user.id, project, root_path):
        return render_template('not_permission.html')

    test_cases = utils.get_test_cases(
                    root_path,
                    project)

    page_objects = utils.get_page_objects(
                            root_path,
                            project)

    return render_template(
                           'project.html',
                           test_cases=test_cases,
                           project=project,
                           page_objects=page_objects)
Пример #9
0
def suite_view(project, suite):
    suite_exists = suite_module.suite_exists(test_execution.root_path, project, suite)
    if not suite_exists:
        abort(404, 'The suite {} does not exist'.format(suite))
    all_test_cases = utils.get_test_cases(root_path, project)
    selected_tests = suite_module.get_suite_test_cases(root_path, project, suite)
    worker_amount = suite_module.get_suite_amount_of_workers(root_path, project, suite)
    browsers = suite_module.get_suite_browsers(root_path, project, suite)
    browsers = ', '.join(browsers)
    default_browser = test_execution.settings['default_browser']
    environments = suite_module.get_suite_environments(root_path, project, suite)
    environments = ', '.join(environments)
    return render_template('suite.html', project=project,
                           all_test_cases=all_test_cases['sub_elements'],
                           selected_tests=selected_tests, suite=suite,
                           worker_amount=worker_amount, browsers=browsers,
                           default_browser=default_browser, environments=environments)
Пример #10
0
def suite_view(project, suite):
    if not user.has_permissions_to_project(g.user.id, project, root_path, 'gui'):
        return render_template('not_permission.html')

    all_test_cases = utils.get_test_cases(root_path, project)
    selected_tests = suite_module.get_suite_test_cases(root_path, project, suite)
    worker_amount = suite_module.get_suite_amount_of_workers(root_path, project, suite)
    browsers = suite_module.get_suite_browsers(root_path, project, suite)
    browsers = ', '.join(browsers)
    default_browser = test_execution.settings['default_browser']
    environments = suite_module.get_suite_environments(root_path, project, suite)
    environments = ', '.join(environments)
    
    return render_template('suite.html',
                           project=project,
                           all_test_cases=all_test_cases['sub_elements'],
                           selected_tests=selected_tests,
                           suite=suite,
                           worker_amount=worker_amount,
                           browsers=browsers,
                           default_browser=default_browser,
                           environments=environments)
Пример #11
0
    def test_get_test_cases(self, test_directory_fixture, project_fixture):
        test_case.new_test_case(test_directory_fixture['full_path'],
                                project_fixture['project_name'],
                                ['subdir1', 'subdir2'],
                                'test3')
        test_case.new_test_case(test_directory_fixture['full_path'],
                                project_fixture['project_name'],
                                ['subdir1'],
                                'test2')
        test_case.new_test_case(test_directory_fixture['full_path'],
                                project_fixture['project_name'],
                                [],
                                'test1')
        tests = utils.get_test_cases(test_directory_fixture['full_path'],
                                     project_fixture['project_name'])
        expected_result = OrderedDict([('subdir1', OrderedDict([('subdir2',
                                      OrderedDict([(('test3',
                                      'subdir1.subdir2.test3'), None)])),
                                      (('test2', 'subdir1.test2'), None)])),
                                      (('test1', 'test1'), None)])

        assert tests == expected_result
Пример #12
0
def execute_from_command_line(root_path):

    parser = cli.get_golem_parser()
    args = parser.parse_args()

    # set test_execution values
    test_execution.root_path = root_path
    test_execution.settings = utils.get_global_settings()

    import golem.core
    golem.core.temp = test_execution.settings

    # main action == gui
    if args.main_action == 'gui':
        gui_start.run_gui()
        sys.exit()

    # main action == run
    if args.main_action == 'run':
        if not args.project:
            print 'Usage:', parser.usage, '\n\n', 'Project List:'
            for proj in utils.get_projects(root_path):
                print '> {}'.format(proj)
            sys.exit()
        # check if selected project does not exist
        elif not args.project in utils.get_projects(root_path):
            sys.exit('Error: the project {0} does not exist'
                     .format(test_execution.project))
        else:
            test_execution.project = args.project

            # check if test_or_suite value is present
            if not args.test_or_suite:
                print 'Usage:', parser.usage
                print '\nTest Cases:'
                test_cases = utils.get_test_cases(root_path,
                                                  test_execution.project)
                utils.display_tree_structure_command_line(test_cases)
                print '\nTest Suites:'
                test_suites = utils.get_suites(root_path,
                                               test_execution.project)
                utils.display_tree_structure_command_line(test_suites)
                sys.exit()

            # check if test_or_suite value matches an existing test suite
            elif utils.test_suite_exists(root_path,
                                       test_execution.project,
                                       args.test_or_suite):
                test_execution.suite = args.test_or_suite
                # execute test suite
                test_runner.run_suite(root_path,
                                      test_execution.project,
                                      test_execution.suite)

            # check if test_or_suite value matches an existing test case
            elif utils.test_case_exists(root_path,
                                        test_execution.project,
                                        args.test_or_suite):
                test_execution.test = args.test_or_suite
                # execute test case
                test_runner.run_single_test_case(root_path,
                                                 test_execution.project,
                                                 test_execution.test)
            
            else:
                # test_or_suite does not match any existing suite or test
                sys.exit('Error: the value {0} does not match an existing '
                         'suite or test'
                         .format(args.test_or_suite))

    # main action == startproject
    if args.main_action == 'startproject':
        sys.exit('To be defined')

    # main action == createuser
    if args.main_action == 'createuser':
        sys.exit('To be defined')
        
Пример #13
0
def get_tests():
    if request.method == 'POST':
        project = request.form['project']
        tests = utils.get_test_cases(root_path, project)
        return json.dumps(tests)
Пример #14
0
 def test_get_test_cases_no_tests(self, project_function):
     testdir = project_function['testdir']
     project = project_function['name']
     tests = utils.get_test_cases(testdir, project)
     expected = {'type': 'directory', 'name': 'tests', 'dot_path': '.', 'sub_elements': []}
     assert tests == expected
Пример #15
0
    def run(self, test_execution, args):
        test_execution.thread_amount = args.threads
        test_execution.cli_drivers = args.browsers
        test_execution.cli_environments = args.environments
        test_execution.timestamp = args.timestamp
        test_execution.interactive = args.interactive
        # test_execution.minimize = args.minimize

        root_path = test_execution.root_path

        if args.project and args.test_or_suite:

            if not args.project in utils.get_projects(root_path):
                msg = [
                    'Error: the project {0} does not exist'.format(
                        args.project), '', 'Usage:', self._parser.usage, '',
                    'Projects:'
                ]
                for proj in utils.get_projects(root_path):
                    msg.append('  {}'.format(proj))
                raise CommandException('\n'.join(msg))
            else:
                test_execution.project = args.project
                test_execution.settings = settings_manager.get_project_settings(
                    args.project, test_execution.settings)
                if utils.test_suite_exists(root_path, test_execution.project,
                                           args.test_or_suite):
                    test_execution.suite = args.test_or_suite
                    # execute test suite
                    start_execution.run_test_or_suite(
                        root_path,
                        test_execution.project,
                        suite=test_execution.suite)
                elif utils.test_case_exists(root_path, test_execution.project,
                                            args.test_or_suite):
                    test_execution.test = args.test_or_suite
                    # execute test case
                    start_execution.run_test_or_suite(root_path,
                                                      test_execution.project,
                                                      test=test_execution.test)
                else:
                    # test_or_suite does not match any existing suite or test
                    msg = [('Error: the value {0} does not match an existing '
                            'suite or test'.format(args.test_or_suite)), '',
                           'Usage:', self._parser.usage]
                    raise CommandException('\n'.join(msg))

        elif not args.project and not args.test_or_suite and test_execution.interactive:
            from golem.test_runner import interactive
            interactive.interactive(test_execution.settings,
                                    test_execution.cli_drivers)

        elif not args.project:
            msg = ['Usage:', self._parser.usage, '', 'Projects:']
            for proj in utils.get_projects(root_path):
                msg.append('  {}'.format(proj))
            raise CommandException('\n'.join(msg))

        elif args.project and not args.test_or_suite:
            msg = ['Usage: {}'.format(self._parser.usage), '', 'Test Cases:']
            print('\n'.join(msg))
            test_cases = utils.get_test_cases(root_path, args.project)
            utils.display_tree_structure_command_line(
                test_cases['sub_elements'])
            print('\nTest Suites:')
            test_suites = utils.get_suites(root_path, args.project)
            for suite in test_suites['sub_elements']:
                print('  ' + suite['name'])
            raise CommandException()
        else:
            # test_or_suite does not match any existing suite or test
            raise CommandException(
                'Error: the value {0} does not match an existing '
                'suite or test'.format(args.test_or_suite))
Пример #16
0
def run_command(project='', test_or_suite='', browsers=[], threads=1,
                environments=[], interactive=False, timestamp=None):
    test_execution.thread_amount = threads
    test_execution.cli_drivers = browsers
    test_execution.cli_environments = environments
    test_execution.timestamp = timestamp
    test_execution.interactive = interactive
    root_path = test_execution.root_path
    if project:
        existing_projects = utils.get_projects(root_path)
        if project in existing_projects:
            test_execution.project = project
            settings = settings_manager.get_project_settings(root_path, project)
            test_execution.settings = settings
            # settings are accessible from a test
            # test_execution is not accessible from a test
            # the test needs to know if interactive is true
            test_execution.settings['interactive'] = interactive
            if test_or_suite:
                if suite_module.suite_exists(root_path, test_execution.project,
                                         test_or_suite):
                    test_execution.suite = test_or_suite
                    # execute test suite
                    start_execution.run_test_or_suite(root_path,
                                                      test_execution.project,
                                                      suite=test_execution.suite)
                elif test_case.test_case_exists(root_path, test_execution.project,
                                                test_or_suite):
                    test_execution.test = test_or_suite
                    # execute test case
                    start_execution.run_test_or_suite(root_path,
                                                      test_execution.project,
                                                      test=test_execution.test)
                else:
                    # TODO run directory
                    # test_or_suite does not match any existing suite or test
                    msg = ('golem run: error: the value {0} does not match an existing '
                           'test or suite'.format(test_or_suite))
                    sys.exit(msg)
            else:
                print(messages.RUN_USAGE_MSG)
                test_cases = utils.get_test_cases(root_path, project)
                print('Test Cases:')
                utils.display_tree_structure_command_line(test_cases['sub_elements'])
                test_suites = utils.get_suites(root_path, project)
                print('\nTest Suites:')
                # TODO print suites in structure
                for suite in test_suites['sub_elements']:
                    print('  ' + suite['name'])
        else:
            msg = ('golem run: error: the project {0} does not exist'.format(project))
            sys.exit(msg)

    elif test_execution.interactive:
        interactive_module.interactive(test_execution.settings,
                                       test_execution.cli_drivers)
    else:
        print(messages.RUN_USAGE_MSG)
        print('Projects:')
        for proj in utils.get_projects(root_path):
            print('  {}'.format(proj))
Пример #17
0
    def run(self, test_execution, args):
        test_execution.thread_amount = args.threads
        test_execution.cli_drivers = args.browsers
        test_execution.cli_environments = args.environments
        test_execution.timestamp = args.timestamp
        test_execution.interactive = args.interactive

        root_path = test_execution.root_path
        if args.project and args.test_or_suite:

            if not args.project in utils.get_projects(root_path):
                msg = ['Error: the project {0} does not exist'.format(args.project),
                       '',
                       'Usage:', self._parser.usage,
                       '',
                       'Projects:']
                for proj in utils.get_projects(root_path):
                    msg.append('  {}'.format(proj))
                raise CommandException('\n'.join(msg))
            else:
                test_execution.project = args.project
                test_execution.settings = settings_manager.get_project_settings(root_path, args.project)
                if utils.test_suite_exists(root_path, test_execution.project,
                                           args.test_or_suite):
                    test_execution.suite = args.test_or_suite
                    # execute test suite
                    start_execution.run_test_or_suite(root_path,
                                                      test_execution.project,
                                                      suite=test_execution.suite)
                elif utils.test_case_exists(root_path, test_execution.project,
                                            args.test_or_suite):
                    test_execution.test = args.test_or_suite
                    # execute test case
                    start_execution.run_test_or_suite(root_path,
                                                      test_execution.project,
                                                      test=test_execution.test)
                else:
                    # test_or_suite does not match any existing suite or test
                    msg = [('Error: the value {0} does not match an existing '
                            'suite or test'.format(args.test_or_suite)),
                            '',
                            'Usage:', self._parser.usage]
                    raise CommandException('\n'.join(msg))

        elif not args.project and not args.test_or_suite and test_execution.interactive:
            from golem.test_runner import interactive
            interactive.interactive(test_execution.settings, test_execution.cli_drivers)

        elif not args.project:
            msg = ['Usage:',
                   self._parser.usage,
                   '',
                   'Projects:']
            for proj in utils.get_projects(root_path):
                msg.append('  {}'.format(proj))
            raise CommandException('\n'.join(msg))

        elif args.project and not args.test_or_suite:
            msg = ['Usage: {}'.format(self._parser.usage),
                   '',
                   'Test Cases:']
            print('\n'.join(msg))
            test_cases = utils.get_test_cases(root_path,
                                              args.project)
            utils.display_tree_structure_command_line(test_cases['sub_elements'])
            print('\nTest Suites:')
            test_suites = utils.get_suites(root_path, args.project)
            for suite in test_suites['sub_elements']:
                print('  ' + suite['name'])
            raise CommandException()
        else:
            # test_or_suite does not match any existing suite or test
            raise CommandException(
                'Error: the value {0} does not match an existing '
                'suite or test'.format(args.test_or_suite))
Пример #18
0
def get_tests():
    if request.method == 'POST':
        project = request.form['project']
        tests = utils.get_test_cases(root_path, project)
        return json.dumps(tests)