Как запустить все функции каратэ, указав, какой браузер использовать в качестве внешней переменной maven - PullRequest
1 голос
/ 07 марта 2020

Я пытался найти способ запустить все функции в тестировании каратэ через maven, используя внешнюю переменную для настройки браузера (с локальным веб-драйвером или с помощью сетки Selenium).

Так что-то вроде:

mvn test -Dbrowser=chrome (or firefox, safari, etc)

или с использованием сетки Selenium:

mvn test -Dbrowser=chrome (or firefox, safari, etc) -Dgrid="grid url"

С Cucumber и Java это было довольно просто, используя синглтон для настройки глобальный веб-драйвер, который затем использовался во всех тестах. Таким образом, я мог запускать тесты с различными локальными или удаленными веб-драйверами.

В карате я пробовал другое решение, последним было:

  1. определить файл конфигурации карате переменной "browser"
  2. использовать переменную "browser" в единственная функция «X», в которой я установил только драйвер каратэ
  3. из всех других функций с помощью callonce для повторного вызова функции «X» для использования этого драйвера

но это не сработало и, честно говоря, мне кажется, это не правильный подход. Вероятно, возможность установить драйвер каратэ из функции Javascript внутри функций - это правильный путь, но я не смог найти решение этой проблемы.

Еще одна проблема, которую я обнаружил с каратэ, это дифференцирование поведения с помощью локальный или удаленный веб-драйвер, так как в файлах функций они установлены по-разному.

Так есть ли у кого-нибудь мои же потребности и как я могу их решить?

Ответы [ 2 ]

1 голос
/ 08 марта 2020

По совету Питера Томаса я использовал этот karate-config. js

function fn() {

  // browser settings, if not set it takes chrome
  var browser = karate.properties['browser'] || 'chrome';
  karate.log('the browser set is: ' + browser + ', default: "chrome"');

  // grid flag, if not set it takes false. The grid url is in this format http://localhost:4444/wd/hub
  var grid_url = karate.properties['grid_url'] || false;
  karate.log('the grid url set is: ' + grid_url + ', default: false');

  // configurations.
  var config = {
    host: 'http://httpstat.us/'
  };

  if (browser == 'chrome') {
      if (!grid_url) {
         karate.configure('driver', { type: 'chromedriver', executable: 'chromedriver' });
         karate.log("Selected Chrome");
      } else {
         karate.configure('driver', { type: 'chromedriver', start: false, webDriverUrl: grid_url });
         karate.log("Selected Chrome in grid");
      }
   } else if (browser == 'firefox') {
      if (!grid_url) {
          karate.configure('driver', { type: 'geckodriver', executable: 'geckodriver' });
          karate.log("Selected Firefox");
      } else {
          karate.configure('driver', { type: 'geckodriver', start: false, webDriverUrl: grid_url });
          karate.log("Selected Firefox in grid");
      }
   } 

  return config;
}

Таким образом я смог вызвать набор тестов, определяющий браузер для использования непосредственно из командной строки. (для использования в трубопроводе Дженкинса):

mvn clean test -Dbrowser=firefox -Dgrid_url=http://localhost:4444/wd/hub
1 голос
/ 07 марта 2020

Вот пара принципов. Каратэ отвечает за старт driver (эквивалент Селена WebDriver). Все, что вам нужно сделать, это настроить configure driver, как описано здесь: https://github.com/intuit/karate/tree/master/karate-core#configure -драйвер

Наконец, в зависимости от вашей среды, просто переключите конфигурацию драйвера. Это можно легко сделать в действительности (karate-config.js) (глобально), а не в каждом файле объектов:

function fn() {
    var config = {
        baseUrl: 'https://qa.mycompany.com'
    };
    if (karate.env == 'chrome') {
        karate.configure('driver', { type: 'chromedriver', start: false, webDriverUrl: 'http://somehost:9515/wd/hub' });
    }
    return config;
}

И в командной строке:

mvn test -Dkarate.env=chrome

Я предлагаю вам ознакомиться с конфигурацией каратэ: https://github.com/intuit/karate#configuration - это на самом деле оказывается проще, чем типичные Java / Maven проекты.

Другой способ - установить переменные в karate-config.js и затем использовать их в файлах объектов.

* configure driver = { type: '#(myVariableFromConfig)' }

Имейте в виду следующие принципы:

  • Любые экземпляры драйверов, созданные функцией "верхнего уровня", будут доступны для "вызываемых" функций
  • Вы даже можете вызвать «общую» функцию, создать там драйвер, и он будет установлен в «вызывающей» функции
  • Любой созданный драйвер будет закрыт, когда закончится функция «верхнего уровня»

Вам не нужны никакие другие шаблоны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...