Как лучше всего использовать параллельное браузерное тестирование Protractor? - PullRequest
0 голосов
/ 05 июня 2019

Я новичок в транспортире.Если вам интересно, почему я разделяю файл функций на папки, я хочу сказать, какой браузер не смог сообщить об огурцах.Если я запускаю все 4 браузера в одной папке specs: 'features/*.feature', я не могу сказать, какой тест браузера не прошел в конце для отчета об огурцах.

Отчет об огурцах: https://github.com/damianszczepanik/cucumber-reporting

Пока я изучаю этот новый фреймворк, я пытался запустить тестирование нескольких браузеров с одной и той же спецификацией (например, вход в систему / выход из системы IE, safari, firefox, chrome) на сетке селена.Я заметил, что запуск 4 разных браузеров на сетке селена на 4 разных компьютерах иногда дает сбой в параллельном режиме, но он проходит, когда я запускаю тестирование 1 браузера на 1 машине.Не удается либо один из браузеров не может найти элемент на странице, либо браузер застрял.

Каков наилучший метод для запуска тестирования нескольких браузеров?Предполагаете ли вы запускать параллельные тесты для одного и того же файла спецификаций или параллельное тестирование поможет запустить другие файлы спецификаций?Путь к файлу объектов здесь выглядит следующим образом:

features / chrome / login.feature

features / safari / login.feature

features / firefox / login.feature

exports.config = {
        seleniumAddress: 'http://localhost:4444/wd/hub',
        framework: 'custom',
        // path relative to the current config file
        frameworkPath: require.resolve('protractor-cucumber-framework'),
        multiCapabilities:
        [{
          'browserName': 'chrome',
          specs: 'features/chrome/*.feature'
        },
        {
          'browserName': 'firefox',
          specs: 'features/firefox/*.feature'
        },
        {
          'browserName': 'internet explorer',
          specs: 'features/ie/*.feature'
        },
        {
          'browserName': 'safari',
          specs: 'features/safari/*.feature'
        }],
        maxSessions: 2,
        baseUrl: 'https://localhost:8080',
        cucumberOpts: {
          strict: true,
          require: [
            'hooks/hooks.js',
            'specs/*Spec.js'
          ],
          tags: [
            "@runThis", 
            "~@ignoreThis"
          ],
          profile: false,
          format: 'json:e2e/reports/cucumber-report.json',
          resultJsonOutputFile: 'e2e/reports/cucumber-report.json'
        },
        onPrepare: function() {

          const fs = require('fs');
          const path = require('path');

          const directory = 'e2e/reports';

          //cleans up the json results from the previous build when using node flake
          // fs.readdir(directory, (err, files) => {
          //   if (err) throw err;

          //   for (const file of files) {
          //     fs.unlink(path.join(directory, file), err => {
          //       if (err) throw err;
          //     });
          //   }
          // });

          var chai = require('chai');
          chai.use(require('chai-as-promised'));
          global.expect = chai.expect;
          browser.ignoreSynchronization = true;
          browser.manage().window().maximize();
          browser.waitForAngular(false);

        }
    }

Feature: Login to see the dashboard pages and logout

    @runThis
    Scenario: Open the browser and login
        Given I am on the login page
        When I should be able to login with my credentials
        When I logout
        Then I should be able to see login page

LoginSpec.js

let loginPage = require('../pages/loginPage.js');

const username = 'xxx';
const password = 'xxx';

module.exports = function() {

    this.Given('I am on the login page', function() {

        browser.get("https://localhost:8080");
    });

    this.When('I should be able to login with my credentials', function() {

        loginPage.setUsername(username);
        loginPage.setPassword(password);
        loginPage.clickLogin();
        loginPage.loaded(loginPage.HAMBERBURGER_MENU_ICON_CLASS);
    });

    this.When('I logout', function() {

        loginPage.openSideMenu();
        loginPage.clickLogout();
        loginPage.clickLogoutPopup();
    });

    this.Then('I should be able to see login page', {timeout: 120 * 1000},  async function () {

        expect(await element(by.id(loginPage.LOGIN_BUTTON_ID)).isPresent()).to.equal(true);
    });

};

Ответы [ 3 ]

0 голосов
/ 07 июня 2019

Было бы проще исправить файл конфигурации, который вы пробовали. Поэтому вы можете опубликовать файл config.js, который вы используете для параллельного запуска тестов в нескольких браузерах. Также интересно узнать, используете ли вы какое-либо облачное решение для сетки селена, например, стек браузера и т. Д., Или же используете свою собственную сетку селена ниже?

0 голосов
/ 09 июня 2019

Чтобы ответить на ваш оригинальный вопрос «Как лучше всего запускать тестирование нескольких браузеров?»

Вы можете использовать параллельное тестирование для обоих: 1) Чтобы ускорить выполнение теста, независимо от того, сколько браузеров или ОС вы завершили тестирование приложения.

2) Чтобы проверить поведение приложения в разных версиях браузера / ОС одновременно.

Для достижения 1) вы можете использовать объект возможностей только со свойствами maxInstances и shardTestFiles, например:

capabilities : {
browserName : 'chrome',
maxinstances: 10 ,// if you want to run 10 specs in parallels //which speed up your test execution time by 10 times
shardTestFiles: true,
},
specs: 'features/**/*.feature'

Для достижения 2) вы можете использовать объект multiCapabilities, как показано ниже

    multiCapabilities:
        [{
          'browserName': 'chrome's,
        },
        {
          'browserName': 'firefox',
        {
          'browserName': 'internet explorer',
        {
          'browserName': 'safari',
        }],
specs: 'features/**/*.feature'
0 голосов
/ 06 июня 2019

Целью тестирования на нескольких браузерах является проверка совместимости приложений на каждом браузере. Для достижения этой цели мы должны запустить все файлы спецификаций на всех браузерах. Если мы согласны с этим, вы можете использовать multiCapabilites для параллельного запуска спецификаций в каждом браузере. Ниже приведен файл conf.js для запуска спецификаций в двух браузерах.

// An example configuration file.
exports.config = {
  directConnect: false,

  // Capabilities to be passed to the webdriver instance.
  multiCapabilities: [{
    'browserName': 'chrome'
  },
  {
    'browserName': 'firefox'
  }],

  // Framework to use. Jasmine is recommended.
  framework: 'jasmine',

  // Spec patterns are relative to the current working directory when
  // protractor is called.
  specs: ['example_spec.js'],

  // Options to be passed to Jasmine.
  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...