TestNG параллельные тесты не пройдены - PullRequest
1 голос
/ 12 апреля 2011

Сначала позвольте мне описать структуру моих тестов:

  • Существует BaseTest (Singleton), содержащий setUp() метод, который запускает @BeforeSuite.Этот метод setUp () инициализирует MyObject , который объявлен как:

protected static ThreadLocal<MyObject> myObject= new ThreadLocal<MyObject>();

  • Все остальные тесты расширяют это BaseTest .например, скажем CustomerTest

    Этот CustomerTest имеет -

    1. Тест с тегом @BeforeClass - он получает сохраненный экземпляр MyObject.
    2. Другие тесты будут использовать MyObject, выполнять некоторые операции и выполнять тесты
    3. Тест с тегом @AfterClass - уничтожает экземпляр MyObject

Так что в идеале этот метод setUp () должен выполняться перед любым другим тестом.И он запускается только один раз .

Я пытаюсь запустить тестовые примеры параллельно в среде TestNG.Для этого я установил атрибут параллели в теге suite файла testng.xml как

<suite name="Suite" parallel="classes" thread-count="5">

Теперь, через несколько секунд после запуска сборки, сборка получаетне удалось, все основные тесты не пройдены, а другие пропущены.

Неудачный тест из-за java.lang.NullPointerException

Насколько я понимаю, пока метод setUp () выполняется в потоке, некоторые другие тестыв разных потоках пытаются получить доступ к MyObject, который еще не инициализирован.Как и провал.Верно ли мое понимание?

Если да, что может быть возможным решением этой проблемы?

Могу ли я сделать что-то вроде - пусть сначала запустится поток, в котором выполняется setUp (), и до тех пор не позволяйте другим потокам вызываться.И как только вызов setUp () завершится / вернется, разрешите другим потокам вызывать.

( Примечание: Мой проект использует Maven)

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Две вещи:

  • NullPointerException Исключения довольно легко отследить, что это говорит вам?Вы должны включить трассировку стека и код.

  • @ BeforeSuite будет запущен только один раз, но в зависимости от того, что вы говорите, вы ожидаете, что он будет выполняться перед каждым методом тестирования,означает, что вы должны использовать @ BeforeMethod.

0 голосов
/ 27 июля 2013

Я сталкивался с этой проблемой раньше.Единственный способ решить эту проблему - удалить тег BeforeSuite в методе установки.Затем каждый класс BeforeClass будет спрашивать, инициализируется ли он, и если это так, продолжать работу, в противном случае он вызовет setup.Конечно, вам также придется synchronize все эти методы для одного и того же объекта.Это единственный способ решить эту проблему.

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