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

skifzp

Регистрация: 27 янв 2020
Offline Активность: 23 июн 2020 02:57
-----

Мои темы

Многопоточность в программном тестировании

11 июня 2020 - 19:15

Доброго времени!

 

Я недавно закончил курс Баранцева "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>

 

Проблемы с которыми я столкнулся: есть множество тестов, которые на выходе делают сверку состояния всей базы до ТЕСТА с состоянием  после ТЕСТА с учетом изменений(поменяли имя, значит проверяем имена всех пользователей до этого изменения с учетом того, что этот пользователь уже с другим именем). !!! НО, если все течет в многопоточности, то за время ТЕСТА могут пробежаться другие тесты и , конечно , такая проверка не пройдет.

 

Отсюда вопрос, для чего нужна многопоточность в тестах (только, чтобы узнать предельные нагрузки, хотя как это реализовать без облака?), или у меня неверный подход к многопоточности?

 

Заранее благодарен за ответ по части реализации и применимость многопоточного тестирования