Конфигурация мульти браузера в Дженкинс через sauce_ondemand_browsers

cross-browser
saucelabs
jenkins
maven
java
selenium
testng
Теги: #<Tag:0x00007fedc0fd8a80> #<Tag:0x00007fedc0fd8170> #<Tag:0x00007fedc0fdf9e8> #<Tag:0x00007fedc0fdf2b8> #<Tag:0x00007fedc0fdeb60> #<Tag:0x00007fedc0fde638> #<Tag:0x00007fedc0fde188>

(Soft_World) #1

Проблема заключается в настройке возможности использования кросс браузерного и кросс ОП тестирования в одной Дженкинс job.

Я попытался сделать через desired capabilities, но в случае с запуском тестов с одной Джобы в различных браузерах этот вариант не подходит. Далее была попытка настроить значения переменных через создание файла json, где указано следующее -

[
    {
        "platform":"LINUX",
        "os":"Linux",
        "browser":"firefox",
        "url":"sauce-ondemand:?os=Linux&browser=firefox&browser-version=16",
        "browserVersion":"16"
    },
    {
        "platform":"VISTA",
        "os":"Windows 2008",
        "browser":"iexploreproxy",
        "url":"sauce-ondemand:?os=Windows 2008&browser=iexploreproxy&browser-version=9",
        "browserVersion":"9"
    }
]

Сслались на сауслабс документацию - “the SAUCE_ONDEMAND_BROWSERS environment variable will be populated with a JSON-formatted string containing the attributes of the selected browsers”

Вот, что у меня получилось:

  1. JSon file с переменными (указан выше)
  2. Класс, где данные должны передаваться с JSon file в значение строчки:
     public class SauceBrowserDataProvider {

    public static final String SAUCE_ONDEMAND_BROWSERS = "SAUCE_ONDEMAND_BROWSERS";

   @DataProvider(name = "sauceBrowserDataProvider")

   public static Iterator<Object[]> sauceBrowserDataProvider(Method testMethod) {

    List<Object[]> data = new ArrayList<Object[]>();

    //read browsers from JSON-formatted environment variable if specified
    String json = SUtils.readPropertyOrEnv(SAUCE_ONDEMAND_BROWSERS, "");

    if (json == null || json.equals("")) {
        throw new IllegalArgumentException("Unable to find JSON");
    }

    try {
        JsonArray browsers = (JsonArray) new JsonParser().parse(json);
        for (Object object : browsers) {
            JsonObject jsonObject = (JsonObject) object;
            data.add(new Object[]{
                    jsonObject.get("platform"),
                    jsonObject.get("os"),
                    jsonObject.get("browser"),
                    jsonObject.get("browserVersion")
            });
        }
      } catch (JsonParseException e) {
      throw new IllegalArgumentException("Error parsing JSON String", e);
    }
    return data.iterator();
  }
  1. Базовый тест класс, где выполняется вся логика запуска браузера, ОП через сауслабс:
   public class BasicTest {

   protected WebDriver driver;
  protected static String baseUrl;
  protected Application app;
  protected ConfigFileReader configRead;
  protected PropertyLoader propertyRead;
  protected DesiredCapabilities caps;
  public Logger Log = Logger.getLogger(BasicTest_Local.class.getName());
  public static final String SAUCE_ACCESS_KEY = System.getenv("SAUCE_ACCESS_KEY");
     public static final String SAUCE_USERNAME = System.getenv("SAUCE_USERNAME");

   @BeforeMethod (description = "Get the browser and site url before the test run")

     public void setUp() throws Exception {
    Class<? extends BasicTest_Remote> SLclass = this.getClass();

     // Start with Jenkins
     DesiredCapabilities caps = new DesiredCapabilities();

     caps.setBrowserName(System.getenv("SELENIUM_BROWSER"));
     caps.setVersion(System.getenv("SELENIUM_VERSION"));
     caps.setCapability(CapabilityType.PLATFORM_NAME, System.getenv("SELENIUM_PLATFORM"));
     caps.setCapability("seleniumVersion", "3.8.1");
     caps.setCapability("name", SLclass.getSimpleName());
     caps.setCapability("screenResolution", "1920x1080");

      driver = (new RemoteWebDriver(new URL("http://" + SAUCE_USERNAME + ":" + SAUCE_ACCESS_KEY    + "@ondemand.saucelabs.com:80/wd/hub"), caps));

    configRead = new ConfigFileReader();
    propertyRead = new PropertyLoader();
    baseUrl = propertyRead.getProperty("site.url");

    app = new Application(driver);

Не могу разобраться как использовать sauce_ondemand_browsers в базовом классе, что-бы Дженкинс передавал в нее параметры браузера и ОП, заданные в Jenkins job.