Доброго времени!
Я недавно закончил курс Баранцева "Java программирование для тестировщика", где меня зацепила фраза лектора, что все тесты нашего рабочего проекта мы можем запускать в многопоточном режиме, но сам подход нам дали на самостоятельное изучение.
Прошу знатоков этого вопроса ответить на правильность моих суждений в части реализации (TestNG) и применимости.
Реализация -> все тестовые классы наследуются от БазовогоКласса, в котором было:
protected static final AppManager app = new AppManager(System.getProperty("browser",BrowserType.FIREFOX));
@BeforeClass(alwaysRun = true)
public void setUp(ITestContext context) throws Exception {
app.init();
context.setAttribute("app",app());
}
@AfterClass(alwaysRun = true)
public void tearDown() throws Exception {
app.stop();
}
ниже, мои переделки для многопоточного запуска:
private static ThreadLocal<AppManager> thread = new ThreadLocal<AppManager>();
public static AppManager app() {
return thread.get();
}
@BeforeClass(alwaysRun = true)
public void setUp(ITestContext context) throws Exception {
//System.out.println(Thread.currentThread().getName());
thread.set(new AppManager(System.getProperty("browser",BrowserType.FIREFOX)));
app().init();
context.setAttribute("app",app());
}
@AfterClass(alwaysRun = true)
public void tearDown() throws Exception {
app().stop();
}
Плюс я настроил запуск нескольких потоков через xml
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" parallel="classes" thread-count="3">
<test name="Contacts">
<classes>
<class name="il.javatesting.addressbook.tests.ContactCreation" />
<class name="il.javatesting.addressbook.tests.ContactDelete" />
<class name="il.javatesting.addressbook.tests.ContactModification" />
</classes>
</test>
</suite>
Проблемы с которыми я столкнулся: есть множество тестов, которые на выходе делают сверку состояния всей базы до ТЕСТА с состоянием после ТЕСТА с учетом изменений(поменяли имя, значит проверяем имена всех пользователей до этого изменения с учетом того, что этот пользователь уже с другим именем). !!! НО, если все течет в многопоточности, то за время ТЕСТА могут пробежаться другие тесты и , конечно , такая проверка не пройдет.
Отсюда вопрос, для чего нужна многопоточность в тестах (только, чтобы узнать предельные нагрузки, хотя как это реализовать без облака?), или у меня неверный подход к многопоточности?
Заранее благодарен за ответ по части реализации и применимость многопоточного тестирования