СЕЙЧАС: У меня есть тестовый проект. Используя maven-failave-plugin, я запускаю причал, затем развертываю там войну и выполняю тестовые скрипты. TODO: Мне нужно параллельно работать в 5 webdrivers одним методом одновременно. Или выполните один и тот же тестовый класс в 5 драйверов одновременно. Это как тестирование производительности с использованием Selenium (плохой выбор, но это требование).Выполнение параллельного теста Selenium и JUnit в нескольких драйверах
0
A
ответ
1
Вот как выглядит мой класс ParrallelParametrized.
public class ParallelParametrized extends Parameterized {
private static class ThreadPoolScheduler implements RunnerScheduler {
private ExecutorService executor;
public ThreadPoolScheduler() {
String threads = System.getProperty("web.driver.amount");
int numThreads = Integer.parseInt(threads);
executor = Executors.newFixedThreadPool(numThreads);
}
@Override
public void finished() {
executor.shutdown();
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES);
} catch (InterruptedException exc) {
throw new RuntimeException(exc);
}
}
@Override
public void schedule(Runnable childStatement) {
executor.submit(childStatement);
}
}
public ParallelParametrized(Class klass) throws Throwable {
super(klass);
setScheduler(new ThreadPoolScheduler());
}
public void filter(Filter filter) throws NoTestsRemainException {
super.filter(new FilterDecorator(filter));
}
private static class FilterDecorator extends Filter {
private final Filter delegate;
private FilterDecorator(Filter delegate) {
this.delegate = delegate;
}
@Override
public boolean shouldRun(Description description) {
return delegate.shouldRun(wrap(description));
}
@Override
public String describe() {
return delegate.describe();
}
}
private static Description wrap(Description description) {
String name = description.getDisplayName();
String fixedName = deparametrizedName(name);
Description clonedDescription =
Description.createSuiteDescription(fixedName,description.getAnnotations().toArray(new Annotation[0]));
for(Description child : description.getChildren()){
clonedDescription.addChild(wrap(child));
}
return clonedDescription;
}
private static String deparametrizedName(String name) {
if(name.startsWith("[")){
return name;
}
int indexOfOpenBracket = name.indexOf('[');
int indexOfCloseBracket = name.indexOf(']')+1;
return name.substring(0,indexOfOpenBracket).concat(name.substring(indexOfCloseBracket));
}
}
И это мой Abstact испытаний Класс
public abstract class AbstractParallelBaseTest {
public static ThreadLocal<WebDriver> CURRENT_DRIVER = new ThreadLocal<WebDriver>();
public static List<WebDriver> DRIVERS_TO_CLEANUP = Collections.synchronizedList(new ArrayList<WebDriver>());
public static final long TIMEOUT = 100;
protected static final Log LOGGER = LogFactory.getLog(AbstractParallelBaseTest.class);
static class WebDriverFactory {
static WebDriver create() {
WebDriver driver = null;
try {
LoggingPreferences logs = new LoggingPreferences();
logs.enable(LogType.BROWSER, Level.OFF);
logs.enable(LogType.CLIENT, Level.OFF);
logs.enable(LogType.DRIVER, Level.OFF);
logs.enable(LogType.PERFORMANCE, Level.OFF);
logs.enable(LogType.PROFILER, Level.OFF);
logs.enable(LogType.SERVER, Level.OFF);
DesiredCapabilities desiredCapabilities;
String webDriver = System.getProperty("web.driver");
if ("chrome".equals(webDriver)) {
desiredCapabilities = DesiredCapabilities.chrome();
desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logs);
desiredCapabilities.setCapability(CapabilityType.PROXY, ClientUtil.createSeleniumProxy(proxy));
driver = new ChromeDriver(desiredCapabilities);
} else if ("ie".equals(webDriver)) {
desiredCapabilities = DesiredCapabilities.internetExplorer();
desiredCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
desiredCapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logs);
desiredCapabilities.setCapability(CapabilityType.PROXY, ClientUtil.createSeleniumProxy(proxy));
driver = new InternetExplorerDriver(desiredCapabilities);
} else if ("firefox".equals(webDriver)) {
desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logs);
driver = new FirefoxDriver(desiredCapabilities);
} else {
desiredCapabilities = DesiredCapabilities.htmlUnitWithJs();
desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logs);
driver = new HtmlUnitDriver(desiredCapabilities);
}
driver.manage().window().setPosition(new Point(0, 0));
driver.manage().window().setSize(new Dimension(1650, 1080));
driver.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(120, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
return driver;
}
}
@Parameterized.Parameter
public int currentDriverIndex;
@Parameterized.Parameters(name = "{0}")
public static ArrayList<Object> driverTypes() {
return Lists.newArrayList(getParams());
}
}
На каждом выполнении тестов я вставляю @RunWith (ParallelParametrized.class), и это работает!
Смежные вопросы
- 1. Выполнение параллельного теста на местной машине
- 2. Как ускорить выполнение теста Selenium/Junit, избегая настроек реестра
- 3. Выполнение теста JUnit через JButton
- 4. Selenium webdriver прекращает выполнение теста в Firefox
- 5. Выполнение экспортированного теста Selenium в C# WebDriver
- 6. Выполнение теста JUnit от Groovy Console
- 7. Вход только один раз для нескольких тестовых примеров - Selenium, JUnit
- 8. junit и запуск теста selenium из командной строки
- 9. Выполнение тестов в нескольких браузерах с сеткой селена и junit
- 10. Выполнение тестов Junit/Selenium с веб-страницы
- 11. Выполнение теста Selenium Builder через SeInterpreter.jar
- 12. Выполнение сценария Selenium даже после сбоя теста
- 13. Выполнение теста Selenium C# из формы окна
- 14. Запуск многопользовательского теста с junit и TAURUS
- 15. Выполнение параллельного теста с PNunit, невозможно прочитать из файла конфигурации
- 16. selenium 2 и junit
- 17. Выполнение теста Selenium через jenkins on linux box
- 18. Junit, Selenium и NoClassDefFound
- 19. Конвертировать пример теста JUnit в файл Selenium IDE html?
- 20. Найти элемент вспышки в Selenium для теста JUnit
- 21. Матричное умножение последовательного и параллельного теста производительности
- 22. Параллельное выполнение теста в Perl
- 23. Статистика теста JUnit и указание порядка выполнения теста
- 24. Выполнение теста JUnit с использованием в базе данных памяти. PlayFramework
- 25. Выполнение параллельной задачи теста с использованием градиента
- 26. Выполнение параллельного потока
- 27. Выполнение теста протранслятора в Eclipse
- 28. Выполнение нескольких тестов, разработанных в Selenium IDE
- 29. Selenium/Java/Junit - Получение драйвера/браузера при запуске теста
- 30. Выполнение нескольких команд для теста npm
Проверьте [этот ответ] (http://stackoverflow.com/a/31544625/1660507), это может вам помочь. – makeMonday