Параллельное тестирование с TestNG и Java (селен) - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу реализовать параллельное тестирование, но, похоже, что-то не работает должным образом. Когда я выполняю свой браузер тестовых случаев для браузера, тестовые случаи проходят 100% ... но когда я внедряю параллельное тестирование, они редко проходят, но обычно они терпят неудачу.

Я выполняю свои тестовые примеры на Eclipse IDE, и они работают на Docker с сеткой Selenium.

это мой класс параллельного тестирования моего браузера:

    public class BrowserFactory {

  private static final String FIREFOX = "firefox";
  private static final String CHROME = "chrome";
  private static final String SAFARI = "safari";
  private static final String IE = "internet explorer";

  private static String seleniumGridHub = UtlManageConfig.gethubURL();
  private static String weburl = UtlManageConfig.getWEBURL();

  public static DesiredCapabilities capabilities = null;
  public static MutableCapabilities options = null;


  public static WebDriver createInstance(String multiBrowser) throws MalformedURLException {
    WebDriver driver = null;
    try {

      switch(multiBrowser){

        case FIREFOX:
          FirefoxProfile profile = new FirefoxProfile();
          profile.setPreference("dom.disable_beforeunload", true);
          profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv");             
          options = new FirefoxOptions();
          options.setCapability(FirefoxDriver.PROFILE, profile);
          options.setCapability("moz:webdriverClick", false);
          options.setCapability(CapabilityType.BROWSER_NAME, FIREFOX);

          URL server = new URL(seleniumGridHub);
          driver = new RemoteWebDriver(server, options);




          break;

        case CHROME:
          ChromeOptions chromeOptions = new ChromeOptions();
          chromeOptions.addArguments("--disable-popup-blocking");
          chromeOptions.setCapability(CapabilityType.BROWSER_NAME, CHROME);
          URL server2 = new URL(seleniumGridHub);
          driver = new RemoteWebDriver(server2, chromeOptions);


          break;

        case SAFARI:

          SafariOptions safariOptions = new SafariOptions();
          safariOptions.setUseTechnologyPreview(true);

          driver = new SafariDriver(safariOptions);
          break;

        default:
          InternetExplorerOptions ieOptions = new InternetExplorerOptions();
          driver = new InternetExplorerDriver(ieOptions);
          break;

      }

    }catch (Exception e) {
      e.getStackTrace();

      return driver;
    }

    return driver;
  }

}

этот класс называется setup.java и этот класс вызывает Браузер, который я установил на свой xml.

public WebDriver driver = null;
driver = BrowserFactory.createInstance(browser);
DriverFactory.getInstance().setDriver(driver);
      driver = DriverFactory.getInstance().getDriver();
      driver.get(weburl);

      driver.manage().window().maximize();
      driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

Это мой XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="books Test" parallel= "tests">
    <test name="Firefox Test">
        <parameter name="browser" value="firefox" />
        <groups>
            <run>
                <include name="books" />
                <include name="bookssell" />
            </run>
        </groups>
        <classes>
            <class
                name="books" />
        </classes>
    </test>
    <test name="Chrome Test">
        <parameter name="browser" value="chrome" />
        <groups>
            <run>
                <include name="books" />
                <include name="bookssell" />
            </run>
        </groups>
        <classes>
            <class
                name="books" />
        </classes>
    </test>
</suite>

У меня есть 2 вопроса, на которые я бы хотел ответить, и на которые дан ответ этот пост.

  1. Как улучшить мой код для параллельного выполнения моих тестовых случаев (я имею в виду Firefox и Chrome одновременно с теми же тестовыми примерами)

  2. Если один тестовый случай не выполняется, остальные пропускаются.

1 Ответ

0 голосов
/ 06 февраля 2020

Я объединил ваши настройки. java класс в классе BrowserFactory, чтобы немного импровизировать ваш код. Вот ваш обновленный код:

public class BrowserFactory {

  private static final String FIREFOX = "firefox";
  private static final String CHROME = "chrome";
  private static final String SAFARI = "safari";
  private static final String IE = "internet explorer";

  private static String seleniumGridHub = UtlManageConfig.gethubURL();
  private static String weburl = UtlManageConfig.getWEBURL();

  public static DesiredCapabilities capabilities = null;
  public static MutableCapabilities options = null;
  Public WebDriver driver;


  public static createInstance(String multiBrowser) throws MalformedURLException {

    try {

      switch(multiBrowser){

        case FIREFOX:
          FirefoxProfile profile = new FirefoxProfile();
          profile.setPreference("dom.disable_beforeunload", true);
          profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv");             
          options = new FirefoxOptions();
          options.setCapability(FirefoxDriver.PROFILE, profile);
          options.setCapability("moz:webdriverClick", false);
          options.setCapability(CapabilityType.BROWSER_NAME, FIREFOX);

          URL server = new URL(seleniumGridHub);
          driver = new RemoteWebDriver(server, options);




          break;

        case CHROME:
          ChromeOptions chromeOptions = new ChromeOptions();
          chromeOptions.addArguments("--disable-popup-blocking");
          chromeOptions.setCapability(CapabilityType.BROWSER_NAME, CHROME);
          URL server2 = new URL(seleniumGridHub);
          driver = new RemoteWebDriver(server2, chromeOptions);


          break;

        case SAFARI:

          SafariOptions safariOptions = new SafariOptions();
          safariOptions.setUseTechnologyPreview(true);

          driver = new SafariDriver(safariOptions);
          break;

        default:
          InternetExplorerOptions ieOptions = new InternetExplorerOptions();
          driver = new InternetExplorerDriver(ieOptions);
          break;

      }

    }catch (Exception e) {
      e.getStackTrace();


    }


  }

  public static Browserlogin(String multiBrowser){
driver = BrowserFactory.createInstance(browser);
DriverFactory.getInstance().setDriver(driver);
      driver = DriverFactory.getInstance().getDriver();
      driver.get(weburl);

      driver.manage().window().maximize();
      driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

}
}

обновите ваш xml соответственно. Надеюсь, это поможет вам.

Вариант 2

public class BrowserFactory {

  private static final String FIREFOX = "firefox";
  private static final String CHROME = "chrome";
  private static final String SAFARI = "safari";
  private static final String IE = "internet explorer";

  private static String seleniumGridHub = UtlManageConfig.gethubURL();
  private static String weburl = UtlManageConfig.getWEBURL();

  public static DesiredCapabilities capabilities = null;
  public static MutableCapabilities options = null;
  protected static ThreadLocal<RemoteWebDriver> driver = new ThreadLocal<>();

 @BeforeMethod 
 @Parameters(value={"multiBrowser"})
 public static createInstance(String multiBrowser) throws MalformedURLException {

    try {

      switch(multiBrowser){

        case FIREFOX:
          FirefoxProfile profile = new FirefoxProfile();
          profile.setPreference("dom.disable_beforeunload", true);
          profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv");             
          options = new FirefoxOptions();
          options.setCapability(FirefoxDriver.PROFILE, profile);
          options.setCapability("moz:webdriverClick", false);
          options.setCapability(CapabilityType.BROWSER_NAME, FIREFOX);

          URL server = new URL(seleniumGridHub);
          driver = new RemoteWebDriver(server, options);




          break;

        case CHROME:
          ChromeOptions chromeOptions = new ChromeOptions();
          chromeOptions.addArguments("--disable-popup-blocking");
          chromeOptions.setCapability(CapabilityType.BROWSER_NAME, CHROME);
          URL server2 = new URL(seleniumGridHub);
          driver = new RemoteWebDriver(server2, chromeOptions);


          break;

        case SAFARI:

          SafariOptions safariOptions = new SafariOptions();
          safariOptions.setUseTechnologyPreview(true);

          driver = new SafariDriver(safariOptions);
          break;

        default:
          InternetExplorerOptions ieOptions = new InternetExplorerOptions();
          driver = new InternetExplorerDriver(ieOptions);
          break;

      }

    }catch (Exception e) {
      e.getStackTrace();


    }


  }
  public WebDriver getDriver() {
        //Get driver from ThreadLocalMap
        return driver;
    }
      @AfterMethod
    public void tearDown() {
        getDriver().quit();
    }

}

@Test
Class setup extends BrowserFactory{


       getDriver().get(weburl);

      getDriver().manage().window().maximize();
      getDriver().manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...