Перейти к содержимому

Фотография

Распараллеливание тестов на TestNG

testng

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 Ilana

Ilana

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Илана
  • Город:Иерусалим


Отправлено 10 декабря 2015 - 17:05

Здравствуйте!
 
Несколько месяцев назад я начала новый проект автомации на основе архетипа (Алексея Баранцева) используя TestNG. Проект очень вырос и потребовалось запускать его хотя бы в трех threads.
 
Сразу началась путаница в логах и скриншотах между тестами. Вначале проблема была в использовании static (особенно в log4j) и я вытерла почти все упоминания static в проекте :-) Это сразу же помогло, но когда количество тестов опять выросло, проблема вернулась. Логи работают хорошо, но скриншоты путаются и тесты падают в непонятный местах (там где при непараллельном пробеге они отлично проходят)...
 
В stackoverflow есть похожий пост http://stackoverflow...-mixed-the-driv
 
И там проблема решилась после двух шагов. Первый - снятие скриншотов делать в @AfterMethod. Второй - убрать все @After и @Before из супер класса тестов - в сами тесты:
 
1) eliminate the listener, and take all screenshots in the @AfterMethod. 2) Move the @Before/After Method/Test methods into the child classes, but simply call methods in the parent to do all the work. Another thing I noticed is that for #2, TestNG is supposed to run the parent '@Before' methods then the child '@Before' methods; and then at the end run the child '@After' methods and then the parent '@After' methods. I ran a series of simple tests, I found that all before/after methods were not being run, so for the few cases where I was using @Before and @After methods in both parent and child, I consolidated. Things seem to run much better now, the driver does not get confused, and screenshots are being attached to the correct browser/test.
 
Мне очень не хотелось бы это делать. Для первого шага надо изучить testNG rules, чтобы знать когда тест упал. (Сейчас тест сам зовет функцию скриншотов из super-class когда падает). Второй шаг еще хуже - функция супера @BeforeClass, которая инициализирует WebDriver, хелперы и остальное - ее размножать для каждого теста (!) - по-моему не стоит.
 
Намного легче перевести проект в JUnit где таких проблем нет (наш второй проект бежит с JUnit на 26 threads не делая никакой путаницы).
 
Может кто-то сталкивался с подобной проблемой? Любые советы приветствуются!
 
Спасибо!

  • 0

#2 asolntsev

asolntsev

    Новый участник

  • Members
  • Pip
  • 64 сообщений
  • ФИО:Андрей Солнцев
  • Город:Таллинн

Отправлено 11 декабря 2015 - 07:00

Тут проблема наверняка не в TestNG или JUnit, а в том, что именно написано в этих ваших @Before методах. Там код потоконебезопасный.

Но самое надёжное - параллелить тесты с помощью опции "fork", тогда тесты будут запускаться в разных процессах, а не потоках, и никаких проблем со статиками не будет.
  • 0

#3 Ilana

Ilana

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Илана
  • Город:Иерусалим


Отправлено 13 декабря 2015 - 05:48

Большое спасибо! Сейчас попробую.


  • 0

#4 feeod

feeod

    Новый участник

  • Members
  • Pip
  • 2 сообщений

Отправлено 29 октября 2017 - 09:51

Тут проблема наверняка не в TestNG или JUnit, а в том, что именно написано в этих ваших @Before методах. Там код потоконебезопасный.

Но самое надёжное - параллелить тесты с помощью опции "fork", тогда тесты будут запускаться в разных процессах, а не потоках, и никаких проблем со статиками не будет.

Добрый день. Подскажите, пожалуйста, где это описано более подробно.


  • 0



Темы с аналогичным тегами testng

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных