Автоматизация тестирования многопоточности
DESCRIPTION
Доклад Андрея Иваровского на конференции SQA Days-12, 30 ноября-1 декабря, МинскTRANSCRIPT
![Page 1: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/1.jpg)
Автоматизация тестированиямногопоточности
Андрей Иваровский. Глойп.
![Page 2: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/2.jpg)
Содержание
1. Зачем нужны многопоточные автотесты?
2. Как это делают “ручные” тестировщики
3. Как это делают разработчики
4. Как это делаю я
5. Описание сценария
6. Выполнение сценария
7. Шаблоны
8. Выводы
![Page 3: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/3.jpg)
1. Зачем нужны многопоточные автотесты?
Назовём автотест многопоточным, если его компоненты запускаются параллельно, в несколько потоков, взаимодействуя между собой.
![Page 4: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/4.jpg)
1. Зачем нужны многопоточные автотесты?
Лучший способ тестирования многопоточного кода - это убрать многопоточность.
© Энтони Уильямс
![Page 5: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/5.jpg)
1. Зачем нужны многопоточные автотесты?
1. Когда тесты нельзя выполнить в одном потокеТребования бизнес-логики приложения обязывают выполнять
тесты параллельно – в несколько потоков одновременно.
2. Если тестов очень много + они зависят друг от другаПараллельный запуск тестов значительно уменьшает время
прохождения набора тестов.
3. При тестировании производительностиТребуется проверить, как ведет себя
приложение при большом количестве пользователей, работающих с ним одновременно.
![Page 6: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/6.jpg)
1. Зачем нужны многопоточные автотесты?
Пример #1: интернет-мессенджер
![Page 7: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/7.jpg)
1. Зачем нужны многопоточные автотесты?
Пример #2: пуск ракет
![Page 8: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/8.jpg)
1. Зачем нужны многопоточные автотесты?
Пример #3: автоматизированные системы управления войсками
![Page 9: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/9.jpg)
2. Как это делают “ручные” тестировщики
Способ #1: тестировщик выполняет тесты последовательно, один за другим
![Page 10: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/10.jpg)
Способ #2: тестировщик использует средство виртуализации, например vmware, и выполняет несколько тестов одновременно
2. Как это делают “ручные” тестировщики
![Page 11: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/11.jpg)
Способ #3: несколько “ручных” тестировщиков тестируют приложение одновременно и согласованно
2. Как это делают “ручные” тестировщики
![Page 12: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/12.jpg)
3. Как это делают разработчики
Тестирующая логика в:
• В одном потоке• В нескольких потоках
- тестируемый поток
- тестирующий поток
![Page 13: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/13.jpg)
3. Как это делают разработчики
Промышленный стандарт:
• Большой тираж• Надежность в эксплуатации• Низкие затраты
![Page 14: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/14.jpg)
3. Как это делают разработчики
Промышленный стандарт:
Решение должно быть простым и надежным!
![Page 15: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/15.jpg)
3. Как это делают разработчики
Промышленный стандарт:
Логика приложения описывается в xml-файлах, называемых обычно сценариями.
Теги сценария связываются с определенными классами.
В классах нет условной логики, - только набор операторов. Операторы if и switch – не используются.
Используется уже готовый “движок” для запуска сценариев.
![Page 16: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/16.jpg)
3. Как это делают разработчики
“Custom-ная” разработка:
изобретается свой “велосипед” – используются методы и многопоточного программирования: в коде создаются потоки и/или процессы.
![Page 17: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/17.jpg)
3. Как это делают разработчики
“Custom-ная” разработка:
изобретается свой “велосипед” – используются методы и многопоточного программирования: в коде создаются потоки и/или процессы.
Создание классов, реализующих интерфейс Runnable Класс Thread Блокировки контекста И так далее…
Все это слишком сложно!
![Page 18: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/18.jpg)
4. Как это делаю я
1. Описание сценария
2. Разработка тестовых методов
3. Запуск сценариев на vmware
4. Анализ логов
![Page 19: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/19.jpg)
5. Описание сценария
Граф (дерево)Test1:Test2, Test3;Test3:Test4, Test5;Test5:Test6, Test7, Test8.
![Page 20: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/20.jpg)
5. Описание сценария
Граф (дерево)
Scenario.xml
<test name=“Test1” predecessor=“” />
<test name=“Test2” predecessor=“Test1” />
<test name=“Test3” predecessor=“Test1” />
<test name=“Test4” predecessor=“Test3” />
<test name=“Test5” predecessor=“Test3” />
<test name=“Test6” predecessor=“Test5” />
<test name=“Test7” predecessor=“Test5” />
<test name=“Test8” predecessor=“Test5” />
![Page 21: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/21.jpg)
5. Описание сценария
BPMN - Business Process Model and Notation, нотация и модель бизнес-процессов
![Page 22: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/22.jpg)
5. Описание сценария
TestNG
<suite name="Call." thread-count="2" parallel="tests" preserve-order="true" > <test name="User1.Call." >
<parameter name="loginname" value="user1"/> <classes> <class name="tests.TestCall" />
</classes></test>
<test name="User2.Call." > <parameter name="loginname" value="user2"/>
<classes> <class name="tests.TestCall" />
</classes></test>
</suite>
![Page 23: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/23.jpg)
6. Выполнение сценария
BPMN-”движок”, использующий web-сервисы: например Intalio
Сценарий Intalio
Web-сервисы
Пул VM
![Page 24: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/24.jpg)
6. Выполнение сценария
Используется самый простой “движок” - Sarasvati
Сценарий Sarasvati
Java-классы
Пул VM
![Page 25: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/25.jpg)
6. Выполнение сценария
Используется фреймворк TestNG
Сценарий Ant + TestNG
Тесты
Пул VM
![Page 26: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/26.jpg)
6. Выполнение сценария
Для запуска сценариев пишется свой “движок”
Сценарий“Самописный
движок”
Тесты
Пул VM
![Page 27: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/27.jpg)
Шаблон №1: Ant + TestNG + Selenium WD
7. Шаблоны
Framework + testng tests
AntTestng
task
Testng scenario .x
ml
ReportNGVIX vmrun
Selenium WD+AutoIT
SeleniumServer
VM
![Page 28: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/28.jpg)
Шаблон №1: Ant + TestNG + Selenium WD
7. Шаблоны
1. Ant запускает testng задачу
2. Выполняется testng сценарий
3. При помощи vix vmrun идет управление виртуальными машинами: включить, выключить, перезагрузить, снять скриншот и т.д.
4. На виртуальных машинах запускается Selenium Server
5. Тестовые методы, используя Selenium WD, через Selenium Server взаимодействуют с UI приложения на виртуальных машинах
6. Для взаимодействия с win-приложениями используются откомпилированные скипты AutoIT, которые запускаются на виртуальных машинах через vix vmrun
7. При помощи библиотеки ReportNG создаются отчеты
![Page 29: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/29.jpg)
Шаблон №2: JSP + DB + VBS + QTP
7. Шаблоны
JSP web.app.
DB
VBS+ QTP
VM
Tomcat
VIX vmrun
Daemon
Browser
![Page 30: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/30.jpg)
Шаблон №2: JSP + DB + VBS + QTP
7. Шаблоны
1. Для управления запусками тестов, а также отображения результатов используется веб-приложение, написанное на JSP. Веб-приложение деплоится на любой веб-сервер, поддерживающий JSP, например Tomcat.
2. При выборе теста и нажатии кнопки “Пуск” серверная часть JSP приложения находит соответствующий xml сценарий и запускает тесты в определенном порядке на указанных в сценарии виртуальных машинах.
3. Для взаимодействия с виртуальной машиной используется vix vmrun.
4. Для операции с UI тестируемого приложения используются QTP-скрипты, которые запускаются при помощи vbs на виртуальных машинах.
5. Информация о запланированных, текущих и уже прошедших запусках, о состоянии виртуальных машин хранится в базе данных.
6. Для управления очередью задач на запуск используется daemon-приложение, которое отслеживает запуски через базу данных.
7. Отчеты о запусках генерируются при помощи запросов к базе данных, выполняемых JSP приложением.
![Page 31: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/31.jpg)
Для описания многопоточных сценариев лучше использовать XML
Запуск многопоточных автотестов следует осуществлять через уже написанный “движок”. Например TestNG
Не использовать в коде тестов условной логики – она должна быть помещена в XML-сценарий
Не использовать при написании кода методы многопоточного программирования (не создавать новые потоки)
Использовать средства виртуализации. Например vmware
8. Выводы
![Page 32: Автоматизация тестирования многопоточности](https://reader036.vdocuments.pub/reader036/viewer/2022062308/558b886dd8b42a1c1b8b473e/html5/thumbnails/32.jpg)
Контакты:
Email: [email protected] Skype: andrew.ivarouski Mobile: (+375 29) 705 00 28 Web: www.runteo.ru
Спасибо за внимание!