class GalenTestBase(unittest.TestCase):
    def setUp(self):
        self.driver = GalenRemoteWebDriver("http://localhost:4444/wd/hub", desired_capabilities=DesiredCapabilities.CHROME)

    def tearDown(self):
        if self.driver:
            self.driver.quit()

    def test_check_layout(self, test_name, specs, included_tags, excluded_tags):
        try:
            test_report = TestReport(test_name)
            check_layout_report = Galen().check_layout(self.driver,
                                                       os.path.join(os.path.dirname(__file__) + "/" + "specs/" + specs),
                                                       included_tags, excluded_tags)

            test_report.add_report_node(info_node("Running layout check for: " + test_name)
                                        .with_node(warn_node('this is just an example'))
                                        .with_node(error_node('to demonstrate reporting'))) \
                .add_layout_report_node("check " + specs, check_layout_report).finalize()
            if check_layout_report.errors > 0:
                raise AssertionError(
                    "Incorrect layout: " + test_name + " - Number of errors " + str(check_layout_report.errors))

        except Exception as e:
            raise e
Example #2
0
class GalenTestBase(unittest.TestCase):
    def __init__(self, methodName='runTest'):
        super(GalenTestBase, self).__init__(methodName)

    def setUp(self):
        self.driver = GalenRemoteWebDriver(
            "http://localhost:4444/wd/hub",
            desired_capabilities=DesiredCapabilities.CHROME)

    def tearDown(self):
        if self.driver:
            self.driver.quit()

    def check_layout(self, test_name, specs, included_tags, excluded_tags):
        try:
            parent_dir = os.path.abspath(
                os.path.join(os.path.dirname(__file__) + '/..'))
            test_report = TestReport(test_name)
            check_layout_report = Galen().check_layout(
                self.driver, os.path.join(parent_dir, "test", "specs", specs),
                included_tags, excluded_tags)

            test_report.add_report_node(info_node("Running layout check for: " + test_name)
                                        .with_node(warn_node('this is just an example'))
                                        .with_node(error_node('to demonstrate reporting'))) \
                .add_layout_report_node("check " + specs, check_layout_report).finalize()
            if check_layout_report.errors > 0:
                raise AssertionError("Incorrect layout: " + test_name +
                                     " - Number of errors " +
                                     str(check_layout_report.errors))

        except Exception as e:
            raise e
Example #3
0
    def post(self, request):
        """
        Accept post method
        """
        contexts = dict()
        if request.user.is_authenticated():
            print(request.POST)

            page_url = request.POST.get('page_url')
            mac_res = request.POST.get('mac_res')
            win_res = request.POST.get('win_res')
            screenshot_quality = request.POST.get('screenshot_quality')
            browsers = request.POST.getlist('browsers')
            build_uuid = request.POST.get('build_uuid', None)
            project_uuid = request.POST.get('project_uuid', None)
            form_spec_file = request.FILES.get('spec_file', None)
            data = list()
            print(browsers)
            if form_spec_file is None:
                contexts.update({
                    'status':
                    400,
                    'message':
                    'Galen spec file must be present in request.'
                })
                return JsonResponse(contexts)

            print('Check existent of project')
            if project_uuid is not None and project_uuid != '':
                print('Project presented')
                try:
                    project = Project.objects.get(project_uuid=project_uuid,
                                                  owner__id=request.user.id)
                    print('Query project done')

                    print('Create spec file record')
                    spec = SpecFile(filename=form_spec_file.name,
                                    project=project,
                                    spec_file=form_spec_file)
                    spec.save()
                    print('Saved spec file record')
                    print('Start Checking Layout')
                    print(spec.spec_file.url)

                    tmpdir = tempfile.mkdtemp(
                        dir=os.path.join(settings.BASE_DIR, 'tmp'))
                    tmp_spec_filename = 'testing_specfile.spec'
                    full_tmp_spec = os.path.join(tmpdir, tmp_spec_filename)
                    response = urllib.urlretrieve(spec.spec_file.url)
                    contents = open(response[0]).read()
                    with open(full_tmp_spec, 'w') as f:
                        f.write(contents)

                except ObjectDoesNotExist as e:
                    contexts.update({
                        'status': 404,
                        'message': 'Oop! ' + e.message
                    })
                    return JsonResponse(contexts)
                except OSError:
                    if 'full_tmp_spec' in locals():
                        os.remove(full_tmp_spec)
                        os.rmdir(tmpdir)

                    contexts.update({
                        'status': 500,
                        'message': 'Oop! OS error'
                    })
                    return JsonResponse(contexts)
                except IOError:
                    if 'full_tmp_spec' in locals():
                        os.remove(full_tmp_spec)
                        os.rmdir(tmpdir)
                    contexts.update({
                        'status': 500,
                        'message': 'Oop! IO error'
                    })
                    return JsonResponse(contexts)
                except:
                    if 'full_tmp_spec' in locals():
                        os.remove(full_tmp_spec)
                        os.rmdir(tmpdir)
                    contexts.update({
                        'status':
                        500,
                        'message':
                        'Oop! something went wrong, please try again.'
                    })
                    return JsonResponse(contexts)
                print('Check existent of build')
                if build_uuid is not None and build_uuid != '':
                    print('Build presented')
                    try:

                        build = TestBuild.objects.get(
                            build_uuid=build_uuid,
                            project__project_uuid=project_uuid,
                            project__owner__id=request.user.id)
                        print('Query build done')
                    except ObjectDoesNotExist as e:
                        if full_tmp_spec:
                            os.remove(full_tmp_spec)
                            os.rmdir(tmpdir)
                        contexts.update({
                            'status': 404,
                            'message': 'Oop! ' + e.message
                        })
                        return JsonResponse(contexts)
                    except:
                        if 'full_tmp_spec' in locals():
                            os.remove(full_tmp_spec)
                            os.rmdir(tmpdir)
                        contexts.update({
                            'status':
                            500,
                            'message':
                            'Oop! something went wrong, please try again.'
                        })
                        return JsonResponse(contexts)
                else:
                    print('Count existing build of project')
                    build_count = TestBuild.objects.filter(
                        project=project).count()
                    try:
                        build = TestBuild(name='Build Version ' +
                                          str(build_count + 1),
                                          project=project)
                        print('Saving build')
                        build.save()
                        print('New Build created')
                    except:
                        if 'full_tmp_spec' in locals():
                            os.remove(full_tmp_spec)
                            os.rmdir(tmpdir)
                        contexts.update({
                            'status':
                            500,
                            'message':
                            'Oop! something went wrong while create build, please try again'
                        })
                        return JsonResponse(contexts)
            else:

                contexts.update({
                    'status':
                    300,
                    'message':
                    'Project must be specified in request.'
                })
                return JsonResponse(contexts)

            print('Start loop browsers')
            browser_error_count = 0
            for browser in browsers:
                print('Test Browser => ' + browser)
                origin_browser_name = browser
                os_platform, os_version, browser, device_or_browser_version, is_mobile = str(
                    browser).split('|')
                test_title = origin_browser_name.replace('|', ' ')
                session_report_name = str(origin_browser_name).replace(
                    '|', ' ').replace(' ', '-').replace('.', '-').lower()
                operation_failed_flag = False
                browser_data = dict()
                if is_mobile == '1':
                    desired_cap = {
                        'os': str(os_platform).upper(),
                        'os_version': str(os_version),
                        'browser': browser,
                        'device': str(device_or_browser_version),
                        'acceptSslCerts': True,
                        'browserstack.video': False
                    }
                else:
                    desired_cap = {
                        'os': str(os_platform).upper(),
                        'os_version': str(os_version),
                        'browser': browser,
                        'browser_version': str(device_or_browser_version),
                        'acceptSslCerts': True,
                        'browserstack.video': False
                    }
                print('Starting Galen remote driver')
                driver = GalenRemoteWebDriver(
                    remote_url=settings.BS_API_HUB_URL,
                    desired_capabilities=desired_cap)
                session_uuid = driver.session_id
                print('Go to page => ' + page_url)
                driver.get(page_url)
                driver.maximize_window()

                try:
                    print("SPEC FILE PATH => " + full_tmp_spec)
                    check_layout = Galen().check_layout(
                        driver, full_tmp_spec, [], [])
                    print('Finished check layout')
                    TestReport(test_title).add_layout_report_node(
                        test_title, check_layout).finalize()
                    print('Finished finalize report')

                    print('Generating report path')
                    report_path = '{}/{}/{}/'.format(project_uuid,
                                                     build.build_uuid,
                                                     session_report_name)
                    full_report_path = os.path.join(settings.GALEN_REPORT_DIR,
                                                    report_path)

                    print('Starting generate galen report')
                    generate_galen_report(full_report_path)
                    print('Galen report generated')

                    session = TestSession(title=test_title,
                                          build=build,
                                          project=project,
                                          session_uuid=session_uuid,
                                          status='SUCCESS')
                    print('Saving session')
                    session.save()
                    print('session saved')

                    print('Updating build status')
                    build.status = 'SUCCESS'
                    build.save()
                    print('Updated build status')

                    print('Create report record')
                    g_report = GalenReport(title=test_title + ' > ' +
                                           build.name,
                                           report_dir=report_path,
                                           project=project,
                                           build=build,
                                           session=session)
                    print('Saving report record')
                    g_report.save()
                    print('Report record saved')

                    print('Starting serialize report')
                    serialized_report = serializers.serialize(
                        'json', [
                            g_report,
                        ],
                        fields=('report_uuid', 'title', 'report_dir',
                                'project', 'build', 'session'))

                    print('Starting serialize session')
                    serialized_session = serializers.serialize(
                        'json', [
                            session,
                        ],
                        fields=('title', 'build', 'project', 'session_uuid'))

                    print('Create browser response data')
                    browser_data.update({
                        'status': 200,
                        'title': test_title,
                        # 'project': {
                        #     'project_uuid': project.project_uuid,
                        #     'name': project.project_name
                        # },
                        # 'build': {
                        #     'uuid': build.build_uuid,
                        #     'name': build.name
                        # },
                        'session': serialized_session,
                        'report': serialized_report,
                        'screenshots': []
                    })
                    print('Finished Browser Test')
                except FileNotFoundError:
                    contexts.update({
                        'status':
                        500,
                        'message':
                        'Oop! spec file import error, file not found!'
                    })
                    browser_data.update({
                        'status':
                        500,
                        'title':
                        test_title,
                        'message':
                        test_title +
                        ' browser test is failed, due to spec file not found'
                    })
                    browser_error_count += 1
                    operation_failed_flag = True
                except IllegalMethodCallException as e:
                    contexts.update({
                        'status': 500,
                        'message': 'Oop! ' + e.message
                    })
                    browser_data.update({
                        'status':
                        500,
                        'title':
                        test_title,
                        'message':
                        test_title +
                        ' browser test is failed, due to illegal method call.'
                    })
                    browser_error_count += 1
                    operation_failed_flag = True
                except:
                    contexts.update({
                        'status':
                        500,
                        'message':
                        'Oop! something went wrong, while testing via remote driver.'
                    })
                    browser_data.update({
                        'status':
                        500,
                        'title':
                        test_title,
                        'message':
                        test_title + ' browser test is failed.'
                    })
                    browser_error_count += 1
                finally:
                    print('HEY : Quit Browser')
                    data.append(browser_data)
                    driver.quit()

                    # Close Galen jar file
                    driver.thrift_client.shut_service()

                    if operation_failed_flag:
                        if 'full_tmp_spec' in locals():
                            os.remove(full_tmp_spec)
                            os.rmdir(tmpdir)
                        contexts.update(
                            {'browser_error_count': browser_error_count})
                        return JsonResponse(contexts)
                    pass

            contexts.update({
                'status': 200,
                'message': 'Automate Cross browser testing finished.',
                'data': data,
                'browser_error_count': browser_error_count
            })
            if 'full_tmp_spec' in locals():
                os.remove(full_tmp_spec)
                os.rmdir(tmpdir)
            return JsonResponse(contexts)

        else:
            contexts.update({
                'status': 403,
                'message': 'Authentication Failed.'
            })
            return JsonResponse(contexts)
 def setUp(self):
     self.driver = GalenRemoteWebDriver("http://localhost:4444/wd/hub", desired_capabilities=DesiredCapabilities.CHROME)
Example #5
0
 def setUp(self):
     self.set_driver(
         GalenRemoteWebDriver(remote_url=os.getenv(
             'GRID_URL', 'http://127.0.0.1:4444/wd/hub'),
                              desired_capabilities=DESIRED_CAPS))
Example #6
0
 def setUp(self):
     self.driver = GalenRemoteWebDriver(
         "http://localhost:4444/wd/hub",
         desired_capabilities=DesiredCapabilities.CHROME)